Текст подпрограммы и версий
asp5a_p.zip , asp5e_p.zip , asp5z_p.zip
Тексты тестовых примеров
tasp5a_p.zip , tasp5e_p.zip , tasp5z_p.zip

Подпрограмма:  ASP5A (модуль ASP5A_p)

Назначение

Нахождение нормального решения недоопределенной системы линейных алгебраических уравнений полного ранга методом вращений.

Математическое описание

Находится нормальное решение системы А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. )