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

Подпрограмма:  ASK7C (модуль ASK7C_p)

Назначение

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

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

Решается система А*x = b с клеточно - циркулянтной матрицей А (см. [1]) клеточного размера К на К, с клетками размера (М*L) на (М*L); клетки матрицы А сами являются клеточно - циркулянтными матрицами клеточного размера L на L, с циркулянтными клетками размера М на М.

В основе алгорифма лежит подобное преобразование матрицы А к клеточно - диагональной матрице клеточного размера К на К, с клетками размера (М*L) на (М*L). Тем самым решение исходной системы порядка М на L на К сводится к решению К систем порядка М на L, матрицы которых - клеточно - циркулянтные, с циркулянтными клетками (см. [2]) .

1.  В.В.Воеводин. Вычислительные основы линейной алгебры. М., Наука, 1977.
2.  Е.Е.Тыртышников. О решении систем с матрицами типа теплицевых. В сб. "Численный анализ на ФОРТРАНе. Вычисл. Методы и инструментальные системы". Изд-во МГУ, 1978.

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

procedure ASK7C(var A :Array of Complex; var X :Array of Complex;
                var R :Array of Complex; M :Integer;
                L :Integer; K :Integer);

Параметры

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

Версии: нет

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

ASK4C - решение системы линейных алгебраических уравнений с клеточно - циркулянтной матрицей, все клетки которой суть циркулянтные матрицы.
ASC0C - решение системы линейных алгебраических уравнений с циркулянтной матрицей.

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

  В подпрограмме АSК7С используются служебные подпрограммы АR01С, АR02С.

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

Unit TASK7C_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ASK7C_p;

function TASK7C: String;

implementation

function TASK7C: String;
var
M,L,K,_i :Integer;
R :Array [0..1] of Complex;
const
A :Array [0..7] 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 ),( re:2.0; im:2.0 ),( 
re:4.0; im:4.0 ),( re:4.0; im:4.0 ),( re:8.0; im: 
8.0 ) );
X :Array [0..7] of Complex = ( ( re:27.0; im:27.0 ),( re:27.0; im:27.0 ),( 
re:27.0; im:27.0 ),( re:27.0; im:27.0 ),( 
re:27.0; im:27.0 ),( re:27.0; im:27.0 ),( 
re:27.0; im:27.0 ),( re:27.0; im: 27.0 ) );
begin
Result := '';  { результат функции }
M := 2;
L := 2;
K := 2;
ASK7C(A,X,R,M,L,K);
Result := Result + Format('%s',[' X=' + #$0D#$0A]);
Result := Result + #$0D#$0A;
for _i:=0 to 7 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('TASK7C',Result);  { вывод результатов в файл TASK7C.res }
exit;
end;

end.

Результат:

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