Текст подпрограммы и версий 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.)