Текст подпрограммы и версий aeh5r_p.zip , aeh5e_p.zip |
Тексты тестовых примеров taeh5r_p.zip , taeh5e_p.zip |
Вычисление всех собственных значений и собственных векторов вещественной симметричной матрицы, заданной в компактной форме, с помощью QL - алгоpитма.
Заданная матрица ортогональными преобразованиями подобия
приводится к трехдиагональной симметричной форме,
собственные значения которой затем вычисляются с помощью неявного
QL - алгоpитма.
Информация о преобразованиях используется для вычисления
собственных векторов.
Уилкинсон, Pайнш. Справочник алгоритмов на языке АЛГОЛ. Линейная алгебра. М.: "Машиностроение", 1976.
procedure AEH5R(N :Integer; NV :Integer; var A :Array of Real; var EV :Array of Real; var V :Array of Real; var R :Array of Real; var IERR :Integer);
Параметры
N - | порядок исходной матрицы (тип: целый); |
NV - | длина вектора А, NV ≥ N(N + 1)/2 (тип: целый); |
A - | вещественный вектор длины NV, содержащий в своих первых N (N + 1)/2 компонентах исходную матрицу, заданную в компактной форме; |
EV - | вещественный вектор длины N, содержащий вычисленные собственные значения, расположенные в порядке неубывания; |
V - | вещественный двумерный массив размерности N на N, содержащий в своих столбцах ортонормированные собственные векторы; |
R - | вещественный вектор длины 3 * N, используемый как рабочий; |
IERR - | целочисленная переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом IЕRR имеет тот же смысл, что и в подпрограмме АЕЕ1R. |
Версии
AEH5E - | вычисление с помощью QL - алгоpитма всех собственных значений и собственных векторов вещественной симметричной матрицы, заданной в компактной форме с расширенной (Extended) точностью. |
Вызываемые подпрограммы
AFH5R - | приведение вещественной симметричной матрицы, заданной в компактной форме, к симметричной трехдиагональной форме ортогональными преобразованиями подобия. |
AEE1R - | вычисление всех собственных значений и соответствующих собственных векторов вещественной симметричной трехдиагональной матрицы неявным QL - алгоpитмом. |
AFH5R1 - | рабочая подпрограмма. |
Замечания по использованию
1. |
Подпрограмма АЕН5R не сохраняет исходный вектор А. | |
2. |
В подпрограмме АЕН5E параметры А, ЕV, V, R имеют тип Extended. | |
3. | Подпрограмма АЕН5R1 используется в качестве рабочей. |
Unit TAEH5R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, AEH5R_p; function TAEH5R: String; implementation function TAEH5R: String; var _i,J,I,IERR :Integer; EV :Array [0..3] of Real; R :Array [0..11] of Real; V :Array [0..15] of Real; const A :Array [0..9] of Real = ( 43.0,0.0,68.0,0.0,24.0,82.0,24.0,0.0,0.0,57.0 ); begin Result := ''; { результат функции } AEH5R(4,10,A,EV,V,R,IERR); Result := Result + Format('%s',[' IERR=']); Result := Result + Format('%5d ',[IERR]) + #$0D#$0A; Result := Result + Format('%s',[' EV=']); Result := Result + #$0D#$0A; for _i:=0 to 3 do begIN RЕSULT := RЕSULT + FОRMat('%20.16f ',[EV[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; Result := Result + #$0D#$0A; Result := Result + Format('%s',[' V=' + #$0D#$0A]); for I:=1 to 4 do begin for J:=1 to 4 do begin Result := Result + Format('%20.16f ',[V[(I-1)+(J-1)*4]]) + #$0D#$0A; end; end; Result := Result + #$0D#$0A; UtRes('TAEH5R',Result); { вывод результатов в файл TAEH5R.res } exit; end; end. Результаты: IERR = 0 | - 0.8 1.8E -12 0.6 0. | V = | 0. - 0.8 0. - 0.6 | | 1.8E -12 0.6 0. - 0.8 | | 0.6 0. 0.8 0. | EV = (25., 50., 75., 100.)