Текст подпрограммы и версий asp5a_p.zip , asp5e_p.zip , asp5z_p.zip |
Тексты тестовых примеров tasp5a_p.zip , tasp5e_p.zip , tasp5z_p.zip |
Нахождение нормального решения недоопределенной системы линейных алгебраических уравнений полного ранга методом вращений.
Находится нормальное решение системы Аx = b, где А - матрица полного ранга размера N на М (N ≤ М), b - заданный вектор длины N. Для решения используется приведение матрицы системы к нижней треугольной форме с помощью последовательности преобразований вращения
AR1 2...RN M = T ,
где Ri j, i < j, i = 1, ..., N, j = 2, ..., М, - соответствующие матрицы вращения, Т - нижняя треугольная матрица размера N на М. Из полученной треугольной системы
Ty = b
находится нормальное решение y, по которому затем определяется искомое решение x = R1 2 ... RN Мy .
В.В.Воеводин, Вычислительные основы линейной алгебры, М., 1977.
procedure ASP5A(var A :Array of Real; var B :Array of Real; var X :Array of Real; N :Integer; M :Integer; L :Integer);
Параметры
A - | вещественный двумерный массив размера N на М (N ≤ М), в котором задается исходная матрица; в pезультате работы подпрограммы в массиве А на соответствующих местах запоминаются элементы вычисленной нижней треугольной матрицы Т; в остальной части массива запоминается информация о матрицах вращения Ri j; |
B - | вещественный вектор длины N, в котором задается правая часть системы; |
X - | вещественный вектор длины М, в котором запоминается найденное решение системы; |
N, M - | число строк и столбцов исходной матрицы А, причем N ≤ М (тип: целый); |
L - | задает режим работы подпрограммы (тип: целый), а именно: |
L = 1 - | если система с данной матрицей решается в первый раз; |
L ≠ 1 - | если система повторно решается с другой правой частью и с той же матрицей (не выполняется заново приведение матрицы к нижней треугольной форме). |
Версии
ASP5E - | нахождение нормального решения недоопределенной системы линейных алгебраических уравнений полного ранга, заданной с расширенной (Extended) точностью, методом вращений. |
ASP5Z - | нахождение нормального решения недоопределенной комплексной системы линейных алгебраических уравнений полного ранга методом вращений. |
Вызываемые подпрограммы: нет
Замечания по использованию
1. |
В подпрограмме АSР5E параметры А, В, Х имеют тип Extended. | |
2. |
В подпрограмме АSР5Z параметры А, В, Х имеют тип Complex. | |
3. | При повторном решении системы с той же матрицей информация, полученная ранее в массиве А, не должна портиться. |
Unit tasp5a_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, ASP5A_p; function tasp5a: String; implementation function tasp5a: String; var I,J,_i :Integer; A :Array [0..29] of Real; B :Array [0..5] of Real; X :Array [0..5] of Real; label _2,_3,_4; begin Result := ''; { результат функции } for I:=1 to 5 do begin for J:=1 to 6 do begin _2: A[(I-1)+(J-1)*5] := 0.0; end; end; for I:=1 to 5 do begin for J:=I to 5 do begin _3: A[(I-1)+(J-1)*5] := 1.0; end; end; for I:=1 to 6 do begin _4: B[I-1] := 6-I; end; ASP5A(A,B,X,5,6,1); Result := Result + #$0D#$0A; for _i:=0 to 5 do begin Result := Result + Format('%20.16f ',[X[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; Result := Result + #$0D#$0A; for _i:=0 to 5 do begin Result := Result + Format('%20.16f ',[B[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; Result := Result + #$0D#$0A; for _i:=0 to 29 do begin Result := Result + Format('%20.16f ',[A[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; UtRes('tasp5a',Result); { вывод результатов в файл tasp5a.res } exit; end; end. Результат: Х = ( 1., 1., 1., 1., 1., 0. )