Текст подпрограммы и версий
astar_p.zip , astae_p.zip , astac_p.zip
Тексты тестовых примеров
tastar_p.zip , tastae_p.zip , tastac_p.zip

Подпрограмма:  ASTAR (модуль ASTAR_p)

Назначение

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

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

Решается система А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. )