Текст подпрограммы и версий
afj0r_p.zip , afj0e_p.zip
Тексты тестовых примеров
tafj0r_p.zip , tafj0e_p.zip

Подпрограмма:  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