|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.ru/lib_na/cat/ae_htm_p/aet3c_p.htm
Дата изменения: Wed Dec 2 10:56:36 2015 Дата индексирования: Sun Apr 10 04:03:16 2016 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий 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 |