Текст подпрограммы и версий
astor_p.zip , astoe_p.zip
Тексты тестовых примеров
tastor_p.zip , tastoe_p.zip

Подпрограмма:  ASTOR (модуль ASTOR_p)

Назначение

Решение системы линейных алгебраических уравнений AX = b с симметричной теплицевой матрицей.

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

Решается система Аx = B, где А - симметричная теплицева матрица размера М на М. Эффективно используется теплицевость и симметричность матрицы А.

В.В.Воеводин, Вычислительные основы линейной алгебры, М., "Hаука", 1977.

Использование

procedure ASTOR(var A :Array of Real; var B :Array of Real;
                var X :Array of Real; var A1 :Array of Real;
                var B1 :Array of Real; M :Integer);

Параметры

A - вещественный вектор длины М, в котором задается первая строка исходной матрицы;
B - вещественный вектор длины М, в котором задается вектор правой части;
X - вещественный вектор длины М, в котором запоминается вычисленное решение;
A1, B1 - вещественные векторы длины М, используемые как рабочие;
M - заданный порядок матрицы (тип: целый).

Версии

ASTOE - решение системы линейных алгебраических уравнений с симметричной теплицевой матрицей, заданной с расширенной (Extended) точностью.

Вызываемые подпрограммы: нет

Замечания по использованию

  При обращении к подпрограмме АSТОE параметры А, В, Х, А1, В1 имеют тип Extended.

Пример использования

1.
Unit TASTOR_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ASTOR_p;

function TASTOR: String;

implementation

function TASTOR: String;
var
M,I,_i :Integer;
A :Array [0..5] of Real;
X :Array [0..5] of Real;
A1 :Array [0..5] of Real;
B1 :Array [0..5] of Real;
const
B :Array [0..5] of Real = ( 21.0,17.0,15.0,15.0,17.0,21.0 );
labeL
_1;
begin
Result := '';  { результат функции }
M := 6;
for I:=1 to M do
 begin
  A[I-1] := I;
_1:
 end;
ASTOR(A,B,X,A1,B1,M);
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;
UtRes('TASTOR',Result);  { вывод результатов в файл TASTOR.res }
exit;
end;

end.


Результат:

        X  =   ( 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 )

2.
Unit tastoe_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ASTOE_p;

function tastoe: String;

implementation

function tastoe: String;
var
M,I,_i :Integer;
A :Array [0..99] of Extended;
B :Array [0..99] of Extended;
X :Array [0..99] of Extended;
A1 :Array [0..99] of Extended;
B1 :Array [0..99] of Extended;
label
_1;
begin
Result := '';  { результат функции }
M := 100;
A[0] := 2.e0;
A[1] := 1.e0;
B[0] := 3.e0;
B[M-1] := 3.e0;
for I:=3 to M do
 begin
  A[I-1] := 0.e0;
  B[I-2] := 4.e0;
_1:
 end;
ASTOE(A,B,X,A1,B1,M);
Result := Result + #$0D#$0A;
for _i:=0 to 99 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;
UtRes('tastoe',Result);  { вывод результатов в файл tastoe.res }
exit;
end;

end.

Результат:

        X(I)  =  1.0 ,     I  =  1, 2, ..., 100