Текст подпрограммы и версий
asc0c_p.zip
Тексты тестовых примеров
tasc0c_p.zip

Подпрограмма:  ASC0C (модуль ASC0C_p)

Назначение

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

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

Решается система А*x = b, где А - циркулянтная матрица порядка М. В основе алгорифма лежит подобное преобразование матрицы А к диагональной матрице на базе дискретного преобразования Фурье.

С.Н.Воеводина. Решение системы уравнений с клеточно - теплицевыми матрицами. В Сб. Вычислительные методы и программирование, вып. 24, Изд-во МГУ, 1975.

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

procedure ASC0C(var A :Array of Complex; var X :Array of Complex;
                var R :Array of Complex; M :Integer);

Параметры

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

Версии: нет

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

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

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

Unit TASC0C_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ASC0C_p;

function TASC0C: String;

implementation

function TASC0C: String;
var
M,_i :Integer;
R :Array [0..3] of Complex;
const
A :Array [0..3] of Complex = ( ( re:1.0; im:1.0 ),( re:2.0; im:2.0 ),( re:3.0; 
im:3.0 ),( re:4.0; im: 4.0 ) );
X :АRray [0..3] of Complex = ( ( re:10.0; im:10.0 ),( re:10.0; im:10.0 ),( 
re:10.0; im:10.0 ),( re:10.0; im: 10.0 ) );
begin
Result := '';  { результат функции }
M := 4;
ASC0C(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 %20.16f ',[X[_i].re,X[_i].im]);
  if ( ((_i+1) mod 2)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TASC0C',Result);  { вывод результатов в файл TASC0C.res }
exit;
end;

end.

Результаты:

      X  =  ( (1., 0.),  (1., 0.),  (1., 0.),  (1., 0.) )