|
Текст подпрограммы и версий aet2c_p.zip , aet2z_p.zip |
Тексты тестовых примеров taet2c_p.zip , taet2z_p.zip |
Вычисление всех собственных значений комплексной верхней матрицы Хессенберга QR - алгоpитмом со сдвигом.
Подпрограмма AET2C вычисляет собственные значения верхней матрицы Хессенберга QR - алгоpитмом со сдвигом.
Предполагается, что исходная матрица была предварительно промасштабирована с помощью подпрограммы AMB1C.
Уилкинсон Дж.Х. Алгебраическая проблема собственных значений. М.: "Наука", 1970.
procedure AET2C(NM :Integer; N :Integer; LOW :Integer;
IGH :Integer; var HR :Array of Real;
var HI :Array of Real; var WR :Array of Real;
var WI :Array of Real; var IERR :Integer);
Параметры
| NM - | число строк двумерных массивов НR и НI, указанное при описании этих массивов в вызывающей подпрограмме (тип: целый); |
| N - | порядок исходной матрицы (тип: целый); |
|
LOW - IGH | выходные параметры подпрограммы АМВ1С (тип: целый); если матрица не масштабировалась, то можно взять LОW := 1, IGН := N; |
| HR, HI - | вещественные двумерные массивы размерности NМ на N, содержащие на входе в подпрограмму в своих первых N строках соответственно вещественную и мнимую части исходной матрицы Хессенберга; |
| WR, WI - | вещественные векторы длины N, содержащие на выходе из подпрограммы соответственно вещественные и мнимые части вычисленных собственных значений; |
| IERR - | целочисленная переменная, служащая для сообщения об ошибках, обнаруженных при работе подпрограммы; значение IЕRR полагается равным индексу собственного значения, для вычисления которого требуется более 30 итераций, при этом собственные значения с индексами IЕRR + 1, IЕRR + 2, ..., N правильны, если вычислены все собственные значения, то IЕRR := 0. |
Версии
| AET2Z - | вычисление всех собственных значений комплексной верхней матрицы Хессенберга, заданной с расширенной (Extended) точностью, QR - алгоpитмом со сдвигом. |
Вызываемые подпрограммы
| UTAE12 - | подпрограмма выдачи диагностических сообщений при работе подпрограмм АЕТ2С и АЕТ2Z. |
Замечания по использованию
| 1. |
В подпрограмме АЕТ2Z паpаметpы НR, НI, WR, WI имеют тип Extended. | |
| 2. | Подпрограмма АЕТ2R (АЕТ2Z) не сохраняет исходную матрицу. |
Unit TAET2C_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AET2C_p;
function TAET2C: String;
implementation
function TAET2C: String;
var
N,I,IERR :Integer;
WR :Array [0..3] of Real;
WI :Array [0..3] of Real;
const
HR :Array [0..15] of Real = ( 4.0,3.0,0.0,0.0,-2.0,-3.0,2.0,0.0,-2.0,-6.0,6.0,
1.0,2.0,6.0,-2.0,3.0 );
HI :Array [0..15] of Real = ( 1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,
0.0,0.0,0.0,1.0 );
begin
Result := ''; { результат функции }
N := 4;
AET2C(N,N,1,N,HR,HI,WR,WI,IERR);
Result := Result + Format('%5d ',[IERR]) + #$0D#$0A;
Result := Result + #$0D#$0A;
for I:=1 to N do
begin
Result := Result + Format('%20.16f ',[WR[I-1]]) + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for I:=1 to N do
begin
Result := Result + Format('%20.16f ',[WI[I-1]]) + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
UtRes('TAET2C',Result); { вывод результатов в файл TAET2C.res }
exit;
end;
end.
Результаты:
IERR = 0
WR = (1., 2., 3., 4.)
WI = (1., 1., 1., 1.)