Текст подпрограммы и версий
aeh5r_p.zip , aeh5e_p.zip
Тексты тестовых примеров
taeh5r_p.zip , taeh5e_p.zip

Подпрограмма:  AEH5R (модуль AEH5R_p)

Назначение

Вычисление всех собственных значений и собственных векторов вещественной симметричной матрицы, заданной в компактной форме, с помощью 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.)