Текст подпрограммы и версий aet3c_p.zip , aet3z_p.zip |
Тексты тестовых примеров taet3c_p.zip , taet3z_p.zip |
Вычисление собственных векто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 |