Текст подпрограммы и версий aih1r_p.zip aih1e_p.zip |
Тексты тестовых примеров taih1r_p.zip taih1e_p.zip |
Обращение положительно определенной симметричной матрицы с компактной формой представления методом квадратного корня (методом Холецкого).
Подпрограмма AIH1R вычисляет матрицу в (симметричную в компактной форме), такую, что А*В = Е, где А - исходная положительно определенная симметричная матрица порядка N, заданная в компактной форме, а Е - единичная матрица. Используется метод квадратного корня (метод Холецкого).
В.В. Воеводин, Численные методы алгебры (теория и алгорифмы), Наука, М., 1966 г.
procedure AIH1R(var A :Array of Real; var AINV :Array of Real; N :Integer; var IERR :Integer);
Параметры
A - | вектор длины N на (N+1)/2, в котором содержится заданная матрица, записанная в компактной форме (тип: вещественный); |
AINV - | вектор длины N на (N+1)/2, в котором запоминается вычисленная обратная матрица в компактной форме (тип: вещественный); |
N - | порядок матрицы (тип: целый); |
IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
IЕRR=65 - | если заданная матрица не является положительно определенной. |
Версии
AIH1E - | обращение положительно определенной симметричной матрицы, записанной в компактной форме, методом квадратного корня (методом Холецкого) с расширенной (Extended) точностью. |
Вызываемые подпрограммы
UTAI10 - | подпрограмма печати диагностических сообщений при работе подпрограммы АIН1R. |
UTAI11 - | подпрограмма печати диагностических сообщений при работе подпрограммы АIН1E. |
Замечания по использованию
При работе подпрограммы исходная матрица А не сохраняется. На место матрицы А помещается ее треугольное разложение, полученное методом квадратного корня (методом Холецкого). Для подпрограммы АIН1E параметры А, АINV должны иметь тип Extended. |
Unit TAIH1R_p; interface uses SysUtils, Math, { Delphi } LStruct, Lfunc, UtRes_p, AIH1R_p; function TAIH1R: String; implementation function TAIH1R: String; var _i,IERR :Integer; A2 :Array [0..5] of Real; const A :Array [0..5] of Real = ( 1.0,2.0,6.0,1.0,1.0,2.0 ); begin Result := ''; Result := Result + Format('%s', [' ОБРАЩЕНИЕ ПОЛОЖИТЕЛЬНО ОПРЕДЕЛЕННОЙ СИММЕТРИЧЕСКОЙ MATPИЦЫ' + #$0D#$0A]) + #$0D#$0A; Result := Result + Format('%s',[' ЗАДАННАЯ МАТРИЦА A:']); Result := Result + #$0D#$0A; for _i:=0 to 5 do begin Result := Result + Format('%20.12f ',[A[_i]]); if ( ((_i+1) mod 3)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; AIH1R(A,A2,3,IERR); Result := Result + Format('%s',[' МАТРИЦА A2: A*A2=E ']); Result := Result + #$0D#$0A; for _i:=0 to 5 do begin Result := Result + Format('%20.12f ',[A2[_i]]); if ( ((_i+1) mod 3)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; Result := Result + Format('%s',[' IERR=']); Result := Result + Format('%5d ',[IERR]) + #$0D#$0A; UtRes('TAIH1R',Result); { вывод результатов в файл TAIH1R.res } exit; end; end. Результаты: B = (11., -3., 1., -4., 1., 2.), IERR = 0.