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