Подпрограмма: ASK4C (модуль ASK4C_p)
Назначение
Решение системы линейных алгебраических уравнений с
клеточно - циркулянтной матрицей, все клетки которой суть
циркулянтные матрицы.
Математическое описание
Решается система А*x = b с
клеточно - циркулянтной матрицей
А (см. [1]), состоящей из L на L клеток порядка М,
являющихся циркулянтными матрицами. В основе алгорифма лежит подобное
преобразование матрицы А к клеточно - диагональной матрице
тех же размеров и также с циркулянтными клетками. Тем самым решение
исходной системы порядка М на L сводится к решению L систем
порядка М с циркулянтными матрицами (см. [2]).
1.
|
В.В.Воеводин. Вычислительные основы линейной алгебры. М., Наука, 1977.
|
2.
|
Е.Е.Тыртышников. О решении систем с матрицами типа
теплицевых. В сб. "Численный анализ на ФОРТРАНе. Вычисл.
Методы и инструментальные системы". Изд-во МГУ, 1978.
|
Использование
procedure ASK4C(var A :Array of Complex; var X :Array of Complex;
var R :Array of Complex; M :Integer;
L :Integer);
Параметры
A -
|
комплексный одномерный массив длины М на L, в
котором задается матрица системы своей первой строкой;
|
X -
|
комплексный одномерный массив длины М на L, в
котором задается правая часть; на выходе из
подпрограммы в Х получается решение;
|
R -
|
комплексный одномерный рабочий массив длины
max (М, L);
|
M -
|
порядок клетки (тип: целый);
|
L -
|
клеточный порядок исходной матрицы (тип: целый).
|
Версии: нет
Вызываемые подпрограммы
ASC0C -
|
решение системы линейных алгебраических
уравнений с циркулянтной матрицей.
|
Замечания по использованию
|
В подпрограмме АSК4С используются служебные
подпрограммы АR01С, АR02С.
|
Пример использования
Unit TASK4C_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ASK4C_p;
function TASK4C: String;
implementation
function TASK4C: String;
var
M,L,_i :Integer;
R :Array [0..1] of Complex;
const
A :Array [0..3] of Complex = ( ( re:1.0; im:1.0 ),( re:2.0; im:2.0 ),( re:2.0;
im:2.0 ),( re:4.0; im: 4.0 ) );
X :АRray [0..3] of Complex = ( ( re:9.0; im:9.0 ),( re:9.0; im:9.0 ),( re:9.0;
im:9.0 ),( re:9.0; im: 9.0 ) );
begin
Result := ''; { результат функции }
M := 2;
L := 2;
ASK4C(A,X,R,M,L);
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('TASK4C',Result); { вывод результатов в файл TASK4C.res }
end;
end.
Результат:
X = ( (1., 0.), (1., 0.), (1., 0.), (1., 0.) )