Текст подпрограммы и версий ask7c_p.zip |
Тексты тестовых примеров task7c_p.zip |
Решение системы линейных алгебраических уравнений с клеточно - циркулянтной матрицей, все клетки которой суть клеточные циркулянтные матрицы с циркулянтными клетками.
Решается система А*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.) )