|
Текст подпрограммы и версий afe0c_p.zip , afe0z_p.zip |
Тексты тестовых примеров tafe0c_p.zip , tafe0z_p.zip |
Приведение комплексной эрмитовой трехдиагональной матрицы к вещественной симметрической трехдиагональной матрице унитарным диагональным преобразованием подобия.
Подпрограмма 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.) .