Текст подпрограммы и версий 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