|
Текст подпрограммы и версий aeb1r_p.zip , aeb1e_p.zip |
Тексты тестовых примеров taeb1r_p.zip , taeb1e_p.zip |
Вычисление собственных значений вещественной симметрической ленточной матрицы с помощью Q*L - алгоритма.
Симметричная ленточная матрица приводится ортогональными преобразованиями Гивенса к симметрической трехдиагональной форме, которая используется для вычисления собственных значений исходной матрицы Q*L - алгоритмом.
Дж.Х.Уилкинсон, Агебраическая проблема собственных значений, "Наука", М., 1970.
procedure AEB1R(N :Integer; MB :Integer; var A :Array of Real;
var EV :Array of Real; var RAB :Array of Real;
var IERR :Integer);
Параметры
| N - | порядок исходной матрицы (тип: целый); |
| NC - | заданное число кодиагоналей исходной матрицы, включая главную диагональ (тип: целый); |
| A - | вещественный двумерный массив размера N*NС, в котором задается исходная симметричная ленточная матрица в компактной форме; |
| EV - | вещественный вектор длины N, содержащий вычисленные в возрастающем порядке собственные значения; |
| RAB - | вещественный вектор длины 2 на N, используемый как рабочий; |
| IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом значение IЕRR полагается равным номеру собственного значения, для вычисления которого потребовалось более 30 итераций; в этом случае собственные значения с индексами 1, 2, ..., IЕRR - 1 вычислены правильно и расположены в возрастающем порядке, но они не обязательно являются самыми меньшими из всех N собственных значений. |
Версии
| AEB1E - | вычисление собственных значений вещественной симметрической ленточной матрицы с помощью QL - алгоритма с расширенной (Extended) точностью. |
Вызываемые подпрограммы
| UTAE10 - | подпрограмма выдачи диагностических сообщений при работе подпрограмм АЕВ1R, AEB1E. |
Замечания по использованию
| Подпрограммы АЕВ1R, AEB1E не сохраняют исходную ленточную матрицу, но в последних двух столбцах массива А запоминается ее трехдиагональная форма. | |
| В подпрограмме AEB1E параметры A, EV, RAB имеют тип Extended . |
Unit TAEB1R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AEB1R_p;
function TAEB1R: String;
implementation
function TAEB1R: String;
var
I,NC,N,_i,IERR :Integer;
A :Array [0..20] of Real;
EV :Array [0..6] of Real;
RАВ :Array [0..13] 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;
AEB1R(N,NC,A,EV,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;
UtRes('TAEB1R',Result); { вывод результатов в файл TAEB1R.res }
exit;
end;
end.
Результаты:
Собственные значения:
| -5.67229125355E+00 |
| 1.55306255671E+01 |
| 1.01029233155E+02 |
EV = | 1.00010119681E+03 |
| 1.00000101005E+04 |
| 1.00000001008E+05 |
| 1.00000000011E+06 |
IERR = 0