|
Текст подпрограммы и версий asp4a_p.zip , asp4e_p.zip , asp4z_p.zip |
Тексты тестовых примеров tasp4a_p.zip , tasp4e_p.zip , tasp4z_p.zip |
Нахождение нормального псевдорешения переопределенной системы линейных алгебраических уравнений полного ранга методом вращений.
Находится нормальное псевдорешение системы Аx = b, где А - матрица полного ранга размера N на М (N≥ М), b - заданный вектор длины N. Для решения используется приведение матрицы системы к верхней треугольной форме с помощью последовательности преобразований вращения
RN M...R2 1A = T ,
где Ri j, i > j, i = 2, 3, ..., N, j = 1, 2, ..., М, - соответствующие матрицы вращения, Т - верхняя треугольная матрица размера N на М. Тем самым исходная задача сводится к решению треугольной системы
Tx = RN M ... R2 1b .
В.В.Воеводин, Вычислительные основы линейной алгебры, М., 1977.
procedure ASP4A(var A :Array of Real; var B :Array of Real;
var X :Array of Real; N :Integer; M :Integer;
L :Integer);
Параметры
| A - | вещественный двумерный массив размера N на М (N ≥ М), в котором задается исходная матрица А; в результате работы подпрограммы в массиве А на соответствующих местах запоминаются элементы вычисленной верхней треугольной матрицы Т; в остальной части массива А запоминается информация о матрицах вращения Ri j; |
| B - | вещественный вектор длины N, в котором задается правая часть системы; |
| X - | вещественный вектор длины N, в первых М компонентах которого запоминается найденное псевдорешение; |
| N, M - | число строк и столбцов матрицы А, причем N ≥ М (тип: целый); |
| L - | задает режим работы подпрограммы (тип:целый); А именно: |
| L = 1 - | если система с данной матрицей решается в первый раз; |
| L ≠ 1 - | если система повторно решается с другой правой частью и с той же матрицей (не выполняется заново приведение матрицы к верхней треугольной форме). |
Версии
| ASP4E - | нахождение нормального псевдорешения переопределенной системы линейных алгебраических уравнений полного ранга, заданных с расширенной (Extended) точностью, методом вращений. |
| ASP4Z - | нахождение нормального псевдорешения переопределенной комплексной системы линейных алгебраических уравнений полного ранга методом вращений. |
Вызываемые подпрограммы: нет
Замечания по использованию
| 1. |
В подпрограмме АSР4E параметры А, В, Х имеют тип Extended. | |
| 2. |
В подпрограмме АSР4Z параметры А, В, Х имеют тип Complex. | |
| 3. | При повторном решении системы с той же матрицей информация, полученная ранее в массиве А, не должна портиться. |
Unit tasp4a_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ASP4A_p;
function tasp4a: String;
implementation
function tasp4a: 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 6 do
begin
for J:=1 to 5 do
begin
_2:
A[(I-1)+(J-1)*6] := 0.0;
end;
end;
for I:=1 to 5 do
begin
for J:=1 to I do
begin
_3:
A[(I-1)+(J-1)*6] := 1.0;
end;
end;
for I:=1 to 6 do
begin
_4:
B[I-1] := I;
end;
ASP4A(A,B,X,6,5,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('tasp4a',Result); { вывод результатов в файл tasp4a.res }
exit;
end;
end.
Результат:
Х = ( 1., 1., 1., 1., 1. )