Текст подпрограммы и версий astar_p.zip , astae_p.zip , astac_p.zip |
Тексты тестовых примеров tastar_p.zip , tastae_p.zip , tastac_p.zip |
Решение системы линейных алгебраических уравнений с теплицевой матрицей.
Решается система Аx = B, где А - теплицева матрица размера М на М. Эффективно используется теплицевость матрицы А.
С.Н.Воеводина. Решение системы уравнений с клеточно - теплицевыми матрицами. В сб. "Вычислительные методы и программирование", вып. 24, Изд-во МГУ, 1975.
procedure ASTAR(var A :Array of Real; var X :Array of Real; var R :Array of Real; var M :Integer);
Параметры
A - | вещественный одномерный массив длины 2М - 1, в котором задается матрица системы следующим образом: в массиве А записывается ее первая строка, за которой следуют элементы первого столбца начиная со второго элемента; |
X - | вещественный одномерный массив длины М, в котором задается правая часть; на выходе из подпрограммы в Х получается решение; |
R - | вещественный одномерный рабочий массив длины 2М; |
M - | порядок матрицы (тип: целый). |
Версии
ASTAD - | решение системы линейных алгебраических уравнений с теплицевой матрицей, заданной с расширенной (Extended) точностью. |
ASTAC - | решение системы линейных алгебраических уравнений с комплексной теплицевой матрицей. |
Вызываемые подпрограммы: нет
Замечания по использованию
1. |
При обращении к подпрограмме АSКАD параметры А, Х, R имеют тип Extended. | |
2. |
При обращении к подпрограмме АSКАС параметры А, Х, R имеют тип Complex. | |
3. | В подпрограммах АSТАR, АSТАD, АSТАС используются соответствующие версии служебной подпрограммы АSТ0R. |
Unit TASTAR_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, ASTAR_p; function TASTAR: String; implementation function TASTAR: String; var M,_i :Integer; R :Array [0..7] of Real; const A :Array [0..6] of Real = ( 1.0,2.0,3.0,4.0,4.0,3.0,2.0 ); X :Array [0..3] of Real = ( 10.0,10.0,10.0,10.0 ); begin Result := ''; { результат функции } M := 4; ASTAR(A,X,R,M); Result := Result + Format('%s',[' X=' + #$0D#$0A]); Result := Result + #$0D#$0A; for _i:=0 to 3 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('TASTAR',Result); { вывод результатов в файл TASTAR.res } exit; end; end. Результат: X = ( 1., 1., 1., 1. )