Текст подпрограммы и версий
aet3c_p.zip , aet3z_p.zip
Тексты тестовых примеров
taet3c_p.zip , taet3z_p.zip

Подпрограмма:  AET3C (модуль AET3C_p)

Назначение

Вычисление собственных вектоpов верхней комплексной матрицы Хессенберга, соответствующих указанным собственным значениям.

Математическое описание

Подпрограмма AET3C по заданным собственным значениям верхней комплексной матрицы Хессенберга A вычисляет соответствующие собственные векторы с помощью метода обратных итераций.

Возникающие в методе обратных итераций системы

     ( A - λ I ) x  =  y , 

где λ - задаваемое приближение к собственному значению матрицы A, решаются методом Гаусса с выбором ведущего элемента по столбцу.

Уилкинсон, Райнш. Справочник алгоритмов на языке АЛГОЛ. Линейная алгебра. M.: "Машиностроение", 1976.

Использование

procedure AET3C(NM :Integer; N :Integer; var AR :Array of Real;
                var AI :Array of Real; var WR :Array of Real;
                var WI :Array of Real; var SELECT :Array of Boolean;
                MM :Integer; var M :Integer; var ZR :Array of Real;
                var ZI :Array of Real; var RM1 :Array of Real;
                var RM2 :Array of Real; var RV1 :Array of Real;
                var RV2 :Array of Real; var IERR :Integer);

Параметры

NM - число стpок двумерных массивов AR, AI, ZR и ZI, указанное при описании этих массивов в вызывающей подпрограмме (тип: целый);
N - порядок исходной матрицы, N ≤ NM (тип: целый);
AR, AI - вещественные двумерные массивы размерности NM на N, содержащие в своих первых N стpоках соответственно вещественную и мнимые части исходной матрицы Хессенберга;
WR, WI - вещественные векторы длины N, содержащие на входе в подпрограмму соответственно вещественные и мнимые части собственных значений исходной матрицы Хессенберга; если исходная матрица является правой квазитреугольной, то требуется, чтобы собственные значения каждой диагональной клетки исходной матрицы имели бы в массивах WR и WI индексы, заключенные между граничными индексами соответствующей диагональной клетки; этому условию удовлетворяют собственные значения, вычисленные подпрограммой AET2R;
SELECT - логический вектоp длины N, служащий для выделения тех собственных значений, для которых нужно вычислить собственные векторы, при этом, если требуется вычислить собственный вектоp, соответствующий собственному значению, имеющему индекс I в массивах WR и WI, то SELECT [I] := True;
MM - задаваемая оценка свеpху для числа столбцов, требующихся для хранения вычисляемых собственных вектоpов (тип: целый);
M - целая переменная равная на выходе из подпрограммы числу столбцов, действительно использованных для хранения вычисленных собственных вектоpов;
ZR, ZI - вещественные двумерные массивы размерности NM на MM, содержащие на выходе из подпрограммы в своих первых M столбцах соответственно вещественные и мнимые части вычисленных собственных вектоpов;
          RM1 -
          RM2  
вещественные рабочие векторы длины N2;
            RV1 -
            RV2  
вещественные рабочие векторы длины N;
IERR - целочисленная переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом:
IERR = - (2*N + 1) - если для хранения искомых собственных вектоpов требуется более MM столбцов, в этом случае на выходе из подпрограммы M = MM;
IERR = - K - если для собственного значения с индексом K не было получено приемлемого приближения к собственному вектоpу; в этом случае компоненты этого вектоpа приравниваются нулю; если таких собственных вектоpов несколько, то в качестве K берется индекс последнего из них;
IERR = - (N + K) - если обе описанные выше ошибки имели место;
IERR= 0 - в случае нормального выхода из подпрограммы.

Версии

AET3Z - вычисление собственных вектоpов верхней комплексной матрицы Хессенберга, заданной с расширенной (Extended) точностью, по заданным собственным значениям.

Вызываемые подпрограммы

UTAE12 - подпрограмма выдачи диагностических сообщений при работе подпрограмм AET3C и AET3Z.

Замечания по использованию

  1. 

Подпрограмма AET3C сохраняет исходную матрицу (массив A) и заданные собственные значения (массивы WR и WI), если не считать незначительные возмущения вещественных частей некоторых близких собственных значений (массив WR), произведенные с целью получения независимых собственных вектоpов.

  2.  B подпрограмме AET3Z параметры AR, AI, WR, WI, ZR, ZI, RM1, RM2, RV1, RV2 имеют тип Extended.

Пример использования

Unit TAET3C_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AET3C_p;

function TAET3C: String;

implementation

function TAET3C: String;
var
MM,N,_i,J,I,M,IERR :Integer;
SELЕСТ :Array [0..2] of Boolean;
ZR :Array [0..5] of Real;
ZI :Array [0..5] of Real;
RM1 :Array [0..8] of Real;
RM2 :Array [0..8] of Real;
RV1 :Array [0..2] of Real;
RV2 :Array [0..2] of Real;
const
AR :Array [0..8] of Real = ( 2.0,0.0,0.0,-2.0,0.0,-1.0,4.0,2.0,3.0 );
AI :Array [0..8] of Real = ( 2.0,0.0,0.0,-2.0,1.0,0.0,4.0,0.0,1.0 );
WR :Array [0..2] of Real = ( 2.0,1.0,2.0 );
WI :Array [0..2] of Real = ( 2.0,1.0,1.0 );
begin
Result := '';  { результат функции }
ММ := 2;
N := 3;
SELECT[0] := True;
SELECT[1] := False;
SELECT[2] := True;
AET3C(3,3,AR,AI,WR,WI,SELECT,MM,M,
     ZR,ZI,RM1,RM2,RV1,RV2,IERR);
Result := Result + Format(' %5d  %5d ',[IERR,M]) + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 2 do
 begin
  Result := Result + Format('%20.16f ',[WR[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 2 do
 begin
  Result := Result + Format('%20.16f ',[WI[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for I:=1 to N do
 begin
  for J:=1 to 2 do
   begin
    Result := Result + Format('%20.16f ',[ZR[(I-1)+(J-1)*3]]) + #$0D#$0A;
   end;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for I:=1 to N do
 begin
  for J:=1 to 2 do
   begin
    Result := Result + Format('%20.16f ',[ZI[(I-1)+(J-1)*3]]) + #$0D#$0A;
   end;
 end;
Result := Result + #$0D#$0A;
UtRes('TAET3C',Result);  { вывод результатов в файл TAET3C.res }
exit;
end;

end.

Результаты:

      M  =  2 ,    IERR  =  0 ,

                  | 1.    1.     |
       ZR  =  | 0.   -0.25 |
                  | 0.   -0.25 |

                 | 0.    0.     |
       ZI  =  | 0.   -0.25 |
                 | 0.   -0.25 |