Текст подпрограммы и версий
aeh6r_p.zip , aeh6e_p.zip
Тексты тестовых примеров
taeh6r_p.zip , taeh6e_p.zip

Подпрограмма:  AEH6R (модуль AEH6R_p)

Назначение

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