Текст подпрограммы и версий
aet2c_p.zip , aet2z_p.zip
Тексты тестовых примеров
taet2c_p.zip , taet2z_p.zip

Подпрограмма:  AET2C (модуль AET2C_p)

Назначение

Вычисление всех собственных значений комплексной верхней матрицы Хессенберга 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.)