Текст подпрограммы и версий as08r_p.zip , as08e_p.zip |
Тексты тестовых примеров tas08r_p.zip , tas08e_p.zip |
Нахождение частного решения неоднородной системы линейных алгебраических уравнений и фундаментальной системы решений соответствующей однородной системы методом Жордана с выбором главного элемента по строке.
Ищется частное решение неоднородной системы линейных алгебраических уравнений
(1) B * U= b ,
и фундаментальная система решений соответствующей однородной системы
(2) B * U = 0 ,
где В - прямоугольная матрица порядка (М - К) на М (ранг равен М - К), U,b - векторы длины М и (М - К), соответственно, 0 - нулевой вектор длины (М - К), - методом Жордана с выбором главного элемента по строке.
В.В.Воеводин, Численные методы алгебры. Теория и алгорифмы. Наука, М., 1966.
procedure AS08R(M :Integer; K :Integer; M1 :Integer; var B :Array of Real; var U :Array of Real; var IRAB :Array of Integer);
Параметры
M - | число неизвестных в системе уравнений (тип: целый); |
K - | ранг фундаментальной системы решений (2) (тип: целый); если К = 0, то ищется только частное решение неоднородной системы (1), причем это решение единственное; |
M1 - | число уравнений в системе (1) М1 = М - К (тип: целый); |
B - | вещественный двумерный массив размера М1 на (М + 1), в котором задается расширенная матрица системы (1), расписанная по столбцам; при этом вектор b размещается в следующих элементах массива В: В (1, М + 1), В (2, М + 1), В (3, М + 1),... |
U - | двумерный вещественный массив размера М на (К + 1), в первых К столбцах которого запоминается вычисленная фундаментальная система решений однородной системы (2), а в (К + 1) - м столбце - часное решение неоднородной системы (1); если К = 0, то массив U содержит только решение неоднородной системы; |
IRAB - | вектор длины М, используемый в подпрограмме как рабочий (тип: целый). |
Версии
AS08E - | нахождение частного решения неоднородной системы линейных алгебраических уравнений, заданных с расширенной (Extended) точностью, и фундаментальной системы решений соответствующей однородной системы методом Жордана с выбором главного элемента по строке. При этом параметры В и U должны иметь тип Extended. |
Вызываемые подпрограммы: нет
Замечания по использованию
При работе подпрограммы значения параметров М, К и М1 сохраняются. |
Использование подпрограммы иллюстрируется на примере:
X1 + 3*X2 + 5*X3 + 7*X4 = -9 2*X1 + 4*X2 + 6*X3 + 8*X4 = 10.Unit TAS08R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, AS08R_p; function TAS08R: String; implementation function TAS08R: String; var M,K,M1,_i :Integer; JRАВ :Array [0..3] of Integer; YR :Array [0..11] of Real; const B :Array [0..9] of Real = ( 1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,-9.0,10.0 ); begin Result := ''; { результат функции } M := 4; K := 2; M1 := 2; AS08R(M,K,M1,B,YR,JRAB); Result := Result + Format('%s',[' YR' + #$0D#$0A]); Result := Result + #$0D#$0A; for _i:=0 to 11 do begin Result := Result + Format('%20.16f ',[YR[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; UtRes('TAS08R',Result); { вывод результатов в файл TAS08R.res } exit; end; end. Результаты: YR(1, 1) = -0.3333333333 YR(2, 1) = 0. YR(3, 1) = 1. YR(4, 1) = -0.6666666667 YR(1, 2) = -0.6666666667 YR(2, 2) = 1. YR(3, 2) = 0. YR(4, 2) = -0.3333333333 YR(1, 3) = 23.66666667 YR(2, 3) = 0. YR(3, 3) = 0. YR(4, 3) = -4.66666667