|
Текст подпрограммы и версий aeb0r_p.zip , aeb0e_p.zip |
Тексты тестовых примеров taeb0r_p.zip , taeb0e_p.zip |
Вычисление собственных значений и собственных векторов вещественной симметрической ленточной матрицы с помощью QL - алгоритма.
Симметричная ленточная матрица приводится ортогональными преобразованиями Гивенса к симметрической трехдиагональной форме, которая используется для вычисления собственных значений и соответствующих собственных векторов исходной матрицы.
Дж.Х.Уилкинсон, Агебраическая проблема собственных значений, "Наука", М., 1970.
procedure AEB0R(N :Integer; MB :Integer; var A :Array of Real;
var EV :Array of Real; var V :Array of Real;
var RAB1 :Array of Real; var IERR :Integer);
Параметры
| N - | порядок исходной матрицы (тип: целый); |
| NC - | заданное число кодиагоналей исходной матрицы, включая главную диагональ (тип: целый); |
| A - | вещественный двумерный массив размера N*NС, в котором задается исходная симметричная ленточная матрица в компактной форме; |
| EV - | вещественный вектор длины N, содержащий вычисленные в возрастающем порядке собственные значения; |
| V - | вещественный двумерный массив размерности N на N, содержащий вычисленные ортонормированные собственные векторы исходной матрицы; |
| RAB - | вещественный вектор длины N, используемый как рабочий; |
| IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом значение IЕRR полагается равным номеру собственного значения, для вычисления которого потребовалось более 30 итераций; в этом случае будут вычислены правильно, но не упорядочены, собственные значения с индексами 1, 2, ..., IЕRR - 1 и соответствующие собственные векторы. |
Версии
| AEB0E - | вычисление собственных значений и собственных векторов вещественной симметрической ленточной матрицы с помощью QL - алгоритма с расширенной (Extended) точностью. |
Вызываемые подпрограммы
| UTAE10 - | подпрограмма выдачи диагностических сообщений при работе подпрограмм АЕВ0R, AEB0E. |
Замечания по использованию
|
Подпрограммы АЕВ0R, AEB0E не сохраняют исходную ленточную матрицу, но в последних двух столбцах массива А запоминается ее трехдиагональная форма. | |
| В подпрограмме AEB0E параметры A, V, EV, RAB имеют тип Extended . |
Unit TAEB0R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AEB0R_p;
function TAEB0R: String;
implementation
function TAEB0R: String;
var
I,NC,N,_i,IERR :Integer;
A :Array [0..20] of Real;
EV :Array [0..6] of Real;
V :Array [0..48] of Real;
RАВ :Array [0..6] of Real;
label
_11;
begin
Result := ''; { результат функции }
for I:=1 to 7 do
begin
A[(I-1)+14] := Power(10.0,7-I);
A[(I-1)+7] := 10.0;
_11:
A[(I-1)+0] := 1.0;
end;
NC := 3;
N := 7;
AEB0R(N,NC,A,EV,V,RAB,IERR);
Result := Result + #$0D#$0A;
for _i:=0 to 20 do
begin
Result := Result + Format('%20.16f ',[A[_i]]);
if ( ((_i+1) mod 4)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
Result := Result + Format('%s',[' IERR=']);
Result := Result + Format('%2d ',[IERR]) + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 6 do
begin
Result := Result + Format('%20.16f ',[EV[_i]]);
if ( ((_i+1) mod 4)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 48 do
begin
Result := Result + Format('%20.16f ',[V[_i]]);
if ( ((_i+1) mod 4)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
UtRes('TAEB0R',Result); { вывод результатов в файл TAEB0R.res }
exit;
end;
end.
Результаты:
Собственные значения:
| -5.6722919995E+00 |
| 1.5530623348E+01 |
| 1.0102923192E+02 |
EV = | 1.0001011975E+03 |
| 1.0000010098E+04 |
| 1.0000000100E+05 |
| 1.0000000001E+06 |
Собственные векторы:
| 4.60241432E-12 | | -1.01658674E-11 |
| -6.19409164E-10 | | -3.23048617E-09 |
| -4.59624634E-6 | | 1.01980144E-05 |
V1 = | 1.07906847E-4 | , V2 = | 2.21018403E-04 | ,
| 4.49094723E-2 | | -1.04031614E-01 |
| -5.57567694E-1 | | 8.22631335E-01 |
| 8.28915795E-1 | | 5.58976743E-01 |
| 8.78765679E-11 | | 1.21337184E-09 |
| 1.20773046E-07 | | -9.98803192E-06 |
| -8.90754203E-05 | | -1.11227803E-03 |
V3 = | -1.11743497E-02 | , V4 = | 9.99936917E-01 | ,
| 9.93497270E-01 | | 1.11204209E-02 |
| 1.11331459E-01 | | 1.12247594E-03 |
| 2.10619612E-02 | | 2.23652822E-05 |
| -1.00897793E-06 | | -1.11112345E-05 |
| -1.11123288E-04 | | 9.99999994E-01 |
| 9.99999371E-01 | | 1.11112108E-04 |
V5 = | 1.11121032E-03 | , V6 = | 1.01122336E-05 | ,
| 1.02132585E-04 | | 2.12447903E-09 |
| 2.13477306E-07 | | 1.01344920E-10 |
| 1.04277680E-08 | | 3.13795946E-14 |
| 1.00000000E+00 |
| 1.11111223E-05 |
| 1.01021324E-06 |
V7 = | 2.12344994E-11 | ,
| 1.01052664E-12 |
| 3.13400892E-17 |
| 1.01084105E-18 |
IERR = 0