Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.su/lib_na/cat/af_htm_p/afj0r_p.htm
Дата изменения: Thu Jun 23 11:48:51 2011 Дата индексирования: Mon Oct 1 22:56:47 2012 Кодировка: Windows-1251 |
Текст подпрограммы и версий afj0r_p.zip , afj0e_p.zip |
Тексты тестовых примеров tafj0r_p.zip , tafj0e_p.zip |
Приведение матрицы Якоби к симметрической трехдиагональной матрице преобразованием подобия.
Пусть Т - матрица Якоби, т.е. трехдиагональная матрица, произведения пар внедиагональных элементов которой все неотрицательны и равны нулю только тогда, когда оба сомножителя равны нулю.
Подпрограмма 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