Подпрограмма: AFJ0C (модуль AFJ0C_p)
Назначение
Приведение комплексной матрицы Якоби к симметрической
трехдиагональной матрице преобразованием подобия.
Математическое описание
Пусть Т - матрица Якоби, т.е. трехдиагональная матрица, у
которой диагональные элементы являются вещественными, а
произведения пар внедиагональных элементов все неотрицательны и
равны нулю только тогда, когда оба сомножителя равны нулю.
Подпрограмма AFJ0C приводит матрицу Т к вещественной
симметрической матрице Н преобразованием подобия
Н = D - 1ТD ,
где D - комплексная диагональная матрица. При этом
используются лишь внедиагональные элементы матрицы Т, т.к.
диагональные элементы матриц Т и Н совпадают.
Использование
procedure AFJ0C(var BR :Array of Real; var BI :Array of Real;
var CR :Array of Real; var CI :Array of Real;
N :Integer; var IERR :Integer);
Параметры
BR, BI -
|
вещественные векторы длины N, в последних N - 1
компонентах которых содержатся соответственно
вещественные и мнимые части наддиагональных
элементов исходной матрицы Якоби; на выходе
подпрограммы в последних N - 1 компонентах
вектора ВR запоминаются вычисленные наддиагональные
элементы трехдиагональной матрицы Н;
|
CR, CI -
|
вещественные векторы длины N, в последних N - 1
компонентах которых содержатся соответственно
вещественные и мнимые части поддиагональных
элементов; на выходе подпрограммы в векторах СR
и СI запоминаются соответственно вещественные и
мнимые части вычисленных диагональных элементов
диагональной матрицы D;
|
N -
|
заданный порядок исходной матрицы Якоби (тип: целый);
|
IERR -
|
целая переменная, служащая для сообщения об
ошибках, обнаруженных в ходе работы подпрограммы; при этом:
|
IЕRR=66 -
|
если не все попарные произведения
соответствующих элементов побочных
диагоналей исходной матрицы неотрицательны;
|
IЕRR=67 -
|
если имеется равное нулю произведение
соответствующих элементов побочных
диагоналей, причем сомножители равны нулю неодновременно;
|
IЕRR=68 -
|
если матрица Н получена, но матрица
преобразования D не вычислена, т.к. она
или обратная к ней матрица алгоритмически вырождена.
|
Версии
AFJ0Z -
|
приведение комплексной матрицы Якоби, заданной
с расширенной (Extended) точностью, к вещественной
симметрической трехдиагональной матрице преобразованием подобия.
|
Вызываемые подпрограммы
UTAF12 -
|
подпрограмма выдачи диагностических сообщений
при работе подпрограмм АFJ0С и АFJ0Z.
|
Замечания по использованию
|
В подпрограмме АFJ0Z параметры ВR, ВI, СR, СI должны
иметь тип Extended.
|
Пример использования
Unit tafj0c_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AFJ0C_p;
function tafj0c: String;
implementation
function tafj0c: String;
var
_i,IERR :Integer;
const
BR :Array [0..3] of Real = ( 0.0,0.0,1.0,-4.0 );
CI :Array [0..3] of Real = ( 0.0,1.0,8.0,0.0 );
BI :Array [0..3] of Real = ( 0.0,-1.0,-1.0,0.0 );
CR :Array [0..3] of Real = ( 0.0,0.0,8.0,-4.0 );
begin
Result := ''; { результат функции }
AFJ0C(BR,BI,CR,CI,4,IERR);
Result := Result + #$0D#$0A;
for _i:=0 to 3 do
begin
Result := Result + Format('%20.16f ',[BR[_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 3 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 3 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 + Format(' %10d ',[IERR]) + #$0D#$0A;
UtRes('tafj0c',Result); { вывод результатов в файл tafj0c.res }
exit;
end;
end.
Результаты:
BR = (0., 1., 4., 4.),
CR = (1., 0., -2., 2.),
CI = (0., 1., 2., -2.),
IERR = 0