Текст подпрограммы и версий
afe0c_p.zip , afe0z_p.zip
Тексты тестовых примеров
tafe0c_p.zip , tafe0z_p.zip

Подпрограмма:  AFE0C (модуль AFE0C_p)

Назначение

Приведение комплексной эрмитовой трехдиагональной матрицы к вещественной симметрической трехдиагональной матрице унитарным диагональным преобразованием подобия.

Математическое описание

Подпрограмма AFE0C приводит комплексную эрмитову трехдиагональную матрицу Н к вещественной симметрической матрице Т преобразованием подобия вида Т = D - 1НD, где D - комплексная диагональная матрица, диагональные элементы которой удовлетворяют условию | di | = 1. При этом диагональные элементы матрицы Т вычислять не требуется, т.к. они совпадают с диагональными элементами исходной матрицы Н.

Подпрограмма AFE0C по заданным поддиагональным элементам  ci эрмитовой матрицы Н вычисляет поддиагональные элементы  bi матрицы Т и элементы диагональной матрицы D по следующим формулам

     bi = | ci | ,                i = 2,...,N

     d1 = 1. ,
     di + 1 = di * ci / | ci | ,        если сi ≠ 0 ;
     di + 1 = 1. ,                       если сi = 0. ,            i = 1,...,N-1 

Дж.Х.Уилкинсон, Алгебраическая проблема собственных значений, "Наука", М., 1970.

Использование

procedure AFE0C(var CR :Array of Real; var CI :Array of Real;
                var B :Array of Real; N :Integer);

Параметры

CR, CI - вещественные векторы длины N, содержащие в последних N - 1 компонетах соответственно вещественные и мнимые части поддиагональных элементов исходной эрмитовой матрицы Н; на выходе подпрограммы векторы СR и СI содержат соответственно вещественные и мнимые части диагональных элементов матрицы преобразования D;
B - вещественный вектор длины N, содержащий в последних N - 1 компонентах вычисленные поддиагональные элементы трехдиагональной матрицы Т;
N - заданный порядок исходной трехдиагональной матрицы (тип: целый).

Версии

AFE0Z - приведение комплексной эрмитовой трехдиагональной матрицы, заданной с расширенной (Extended) точностью, к вещественной симметрической трехдиагональной матрице унитарным диагональным преобразованием подобия.

Вызываемые подпрограммы: нет

Замечания по использованию

  В подпрограмме АFЕ0Z параметры СR, СI, В имеют тип Extended.

Пример использования

Unit tafe0c_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AFE0C_p;

function tafe0c: String;

implementation

function tafe0c: String;
var
_i :Integer;
B :Array [0..4] of Real;
const
CR :Array [0..4] of Real = ( 0.0,3.0,1.0,0.0,0.0 );
CI :Array [0..4] of Real = ( 0.0,4.0,0.0,1.0,0.0 );
begin
Result := '';  { результат функции }
AFE0C(CR,CI,B,5);
Result := Result + #$0D#$0A;
for _i:=0 to 4 do
 begin
  Result := Result + Format('%20.16f ',[CR[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 4 do
 begin
  Result := Result + Format('%20.16f ',[CI[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 4 do
 begin
  Result := Result + Format('%20.16f ',[B[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('tafe0c',Result);  { вывод результатов в файл tafe0c.res }
exit;
end;

end.


Результаты:

      CR  =   (1., 0.6, 0.6, -0.8, 1.) ,
      CI   =   (0., 0.8, 0.8, 0.6, 0.) ,

      B   =   (0., 5., 1., 1., 0.) .