Текст подпрограммы и версий 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.) .