Подпрограмма: AFJ0R (модуль AFJ0R_p)
Назначение
Приведение матрицы Якоби к симметрической трехдиагональной
матрице преобразованием подобия.
Математическое описание
Пусть Т - матрица Якоби, т.е. трехдиагональная матрица,
произведения пар внедиагональных элементов которой все
неотрицательны и равны нулю только тогда, когда оба сомножителя
равны нулю.
Подпрограмма AFJ0R приводит матрицу Т к симметричной матрице
Н преобразованием подобия
Н = D - 1ТD , где D -
диагональная матрица. При этом используются лишь внедиагональные
элементы матрицы Т, поскольку диагональные элементы матриц Т и
Н совпадают.
Использование
procedure AFJ0R(var B :Array of Real; var C :Array of Real;
N :Integer; var IERR :Integer);
Параметры
B -
|
вещественный вектор длины N, содержащий в
последних N - 1 компонентах наддиагональные элементы
матрицы Якоби Т; на выходе подпрограммы в
последних N - 1 компонентах вектора в запоминаются
вычисленные наддиагональные элементы матрицы Н;
|
C -
|
вещественный вектор длины N, в последних N - 1
компонентах которого содержатся поддиагональные
элементы исходной матрицы Якоби; на выходе
подпрограммы на месте вектора с запоминаются
вычисленные диагональные элементы диагональной матрицы D;
|
N -
|
заданный порядок исходной матрицы Якоби Т (тип: целый);
|
IERR -
|
целая переменная, служащая для сообщения об
ошибках, обнаруженных в ходе работы подпрограммы; при этом:
|
IЕRR=66 -
|
если не все попарные произведения
соответствующих элементов побочных
диагоналей исходной матрицы неотрицательны;
|
IЕRR=67 -
|
если имеется равное нулю произведение
соответствующих элементов побочных
диагоналей, причем сомножители равны нулю неодновременно;
|
IЕRR=68 -
|
если матрица Н получена, но матрица
преобразования D не вычислена, т.к. она
или обратная к ней матрица алгоритмически вырождена.
|
Версии
AEJ0E -
|
приведение матрицы Якоби, заданной с расширенной (Extended)
точностью, к симметрической трехдиагональной
матрице преобразованием подобия.
|
Вызываемые подпрограммы
UTAF12 -
|
подпрограмма выдачи диагностических сообщений
при работе подпрограмм АFJ0R и АFJ0E.
|
Замечания по использованию
|
В подпрограмме АFJ0E параметры В, С должны иметь тип
Extended.
|
Пример использования
Unit TAFJ0R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AFJ0R_p;
function TAFJ0R: String;
implementation
function TAFJ0R: String;
var
_i,IERR :Integer;
const
B :Array [0..4] of Real = ( 0.0,1.0,1.0,-4.0,-4.0 );
C :Array [0..4] of Real = ( 0.0,4.0,16.0,-4.0,-4.0 );
begin
Result := ''; { результат функции }
AFJ0R(B,C,5,IERR);
Result := Result + Format('%s',[' B,C,IERR:']) + #$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;
Result := Result + #$0D#$0A;
for _i:=0 to 4 do
begin
Result := Result + Format('%20.16f ',[C[_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('TAFJ0R',Result); { вывод результатов в файл TAFJ0R.res }
exit;
end;
end.
Результаты:
B = (0., 2., 4., 4.),
C = (1., 2., 8., -8., 8.),
IERR = 0