Текст подпрограммы и версий aeh6r_p.zip , aeh6e_p.zip |
Тексты тестовых примеров taeh6r_p.zip , taeh6e_p.zip |
Вычисление всех собственных значений вещественной симметричной матрицы, заданной в компактной форме, с помощью QL - алгоритма.
Заданная матрица ортогональными преобразованиями подобия приводится к треугольной симметричной форме, собственные значения которой затем вычисляются с помощью неявного QL - алгоритма.
Уилкинсон, Pайнш. Справочник алгоритмов на языке АЛГОЛ. Линейная алгебра. М.: "Машиностроение", 1976.
procedure AEH6R(N :Integer; NV :Integer; var A :Array of Real; var EV :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, содержащий вычисленные собственные значения, расположенные в неубывающем порядке; |
R - | вещественный вектор длины 2 * N, используемый как рабочий; |
IERR - | целочисленная переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; IЕRR имеет тот же смысл, что и в подпрограмме АЕЕ2R. |
Версии
AEH6E - | вычисление с помощью QL - алгоpитма всех собственных значений вещественной симметричной матрицы, заданной в компактной форме, с расширенной (Extended) точностью. |
Вызываемые подпрограммы
AEE2R - | вычисление всех собственных значений вещественной симметричной трехдиагональной матрицы при помощи неявного QL - алгоpитма. |
AFH5R - | приведение вещественной симметричной матрицы, заданной в компактной форме, к симметричной трехдиагональной матрице ортогональными преобразованиями подобия. |
Замечания по использованию
1. |
Подпрограмма АЕН6R не сохраняет исходный вектор А. | |
2. | В подпрограмме АЕН6E параметры А, ЕV, R имеют тип Extended. |
Unit TAEH6R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, AEH6R_p; function TAEH6R: String; implementation function TAEH6R: String; var _i,IERR :Integer; EV :Array [0..2] of Real; R :Array [0..5] of Real; const A :Array [0..5] of Real = ( 294.0,-180.0,-25.0,108.0,240.0,231.0 ); begin Result := ''; { результат функции } AEH6R(3,6,A,EV,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 2 do begin Result := Result + Format('%20.16f ',[EV[_i]]); if ( ((_i+1) mod 3)=0 ) tHЕN RЕSULT := RЕSULT + #$0D#$0А; end; Result := Result + #$0D#$0A; UtRes('TAEH6R',Result); { вывод результатов в файл TAEH6R.res } exit; end; end. Результаты: IERR = 0 EV = (- 250., 375., 375.)