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