|
Текст подпрограммы и версий astor_p.zip , astoe_p.zip |
Тексты тестовых примеров tastor_p.zip , tastoe_p.zip |
Решение системы линейных алгебраических уравнений 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