Подпрограмма: AFE1R (модуль AFE1R_p)
Назначение
Одновременное приведение вещественной симметрической
трехдиагональной матрицы и диагональной положительно определенной
матрицы двусторонним диагональным преобразованием
соответственно к вещественной симметрической трехдиагональной и
единичной матрицам.
Математическое описание
Пусть Т - заданная вещественная симметрическая
трехдиагональная матрица, D - диагональная положительно
определенная матрица. Подпрограмма AFE1R получает вещественную
симметрическую трехдиагональную матрицу Н и диагональную матрицу
D1 = D - 1/2,
такие что Н = D1ТD1
и D1DD1 = Е .
Эта подпрограмма может быть использована для сведения
обобщенной проблемы собственных значений вида
Тx = λDx ,
где Т - вещественная симметрическая трехдиагональная, D -
диагональная, D > 0, к стандартной проблеме
Нz = λz с
вещественной симметрической трехдиагональной матрицей Н; при
этом собственные значения этих задач совпадают, а
соответствующие собственные векторы связаны следующим образом :
x = D1z .
Использование
procedure AFE1R(var A :Array of Real; var B :Array of Real;
var D :Array of Real; N :Integer; var IERR :Integer);
Параметры
A -
|
вещественный вектор длины N, содержащий
диагональные элементы исходной трехдиагональной
матрицы Т; на выходе из подпрограммы на
соответствующих местах вектора А запоминаются вычисленные
диагональные элементы матрицы Н;
|
B -
|
вещественный вектор длины N, в последних N - 1
компонентах которого содержатся наддиагональные
элементы исходной трехдиагональной матрицы Т; на
выходе из подпрограммы на соответствующих местах
вектора В запоминаются вычисленные
наддиагональные элементы вещественной симметрической
трехдиагональной матрицы Н;
|
D -
|
вещественный вектор длины N, содержащий
диагональные элементы исходной диагональной матрицы
D; на выходе из подпрограммы на соответствующих
местах вектора D запоминаются вычисленные
диагональные элементы матрицы D1;
|
N -
|
заданный порядок исходных матриц Т и D (тип: целый);
|
IERR -
|
целая переменная, служащая для сообщения об
ошибках, обнаруженных в ходе работы подпрограммы; при этом:
|
IЕRR=65 -
|
если исходная диагональная матрица D не
является положительно определенной.
|
Версии
AFE1E -
|
одновременное приведение вещественной
симметрической трехдиагональной и диагональной
положительно определенной матриц, заданных с расширенной (Extended)
точностью, двусторонним диагональным
преобразованием к вещественной симметрической
трехдиагональной и единичной матрицам.
|
Вызываемые подпрограммы
UTAF12 -
|
подпрограмма выдачи диагностических сообщений
при работе подпрограмм АFЕ1R и АFЕ1E.
|
Замечания по использованию
|
В подпрограмме АFЕ1E параметры А, В, D должны иметь тип
Extended.
|
Пример использования
Unit TAFE1R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AFE1R_p;
function TAFE1R: String;
implementation
function TAFE1R: String;
var
_i,IERR :Integer;
const
A :Array [0..4] of Real = ( 1.0,2.0,2.0,2.0,1.0 );
B :Array [0..4] of Real = ( 0.0,2.0,2.0,2.0,2.0 );
D :Array [0..4] of Real = ( 1.0,4.0,4.0,4.0,4.0 );
begin
Result := ''; { результат функции }
AFE1R(A,B,D,5,IERR);
Result := Result + Format('%s',[' А,В,D,IЕRR:']) + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 4 do
begin
Result := Result + Format('%20.16f ',[A[_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 dО
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 ',[D[_i]]);
if ( ((_i+1) mod 4)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
Result := Result + Format(' %5d ',[IERR]) + #$0D#$0A;
UtRes('TAFE1R',Result); { вывод результатов в файл TAFE1R.res }
exit;
end;
end.
Результаты:
A = (1., 0.5, 0.5, 0.5, 0.25) ,
B = (0., 1., 0.5, 0.5, 0.5) ,
D = (1., 0.5, 0.5, 0.5, 0.5) ,
IERR = 0 .