Текст подпрограммы и версий aih2r_p.zip aih2e_p.zip |
Тексты тестовых примеров taih2r_p.zip taih2e_p.zip |
Обращение положительно определенной симметричной ленточной матрицы с компактной формой представления с использованием метода квадратного корня (метода Холецкого).
Подпрограмма AIH2R вычисляет матрицу В (симметричная, в компактной форме), такую, что А*В = Е, где А - исходная симметричная ленточная положительно определенная заданная в компактной форме, а Е - единичная матрицы. Используется метод квадратного корня (метод Холецкого).
В.В.Воеводин, Численные методы алгебры (теория и алгорифмы), Наука, М., 1966 г.
procedure AIH2R(var A :Array of Real; var AINV :Array of Real; N :Integer; NC :Integer; var IERR :Integer);
Параметры
A - | вещественный двумерный массив размера N на (NС+1), в котором содержится заданная матрица, записанная в компактной форме; |
AINV - | вещественный вектор размерности N на (N+1)/2, в котором запоминается вычисленная обратная матрица в компактной форме; |
N - | порядок матрицы (тип: целый); |
NC - | число ненулевых диагоналей заданной матрицы по одну сторону от главной диагонали (тип: целый); |
IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
IЕRR=65 - | если заданная матрица не является положительно определенной. |
Версии
AIH2E - | обращение положительно определенной симметричной ленточной матрицы с компактной формой представления с использованием метода квадратного корня (метод Холецкого) с расширенной (Extended) точностью. |
Вызываемые подпрограммы
UTAI10 - | подпрограмма печати диагностических сообщений при работе подпрограммы АIН2R; |
UTAI11 - | подпрограмма печати диагностических сообщений при работе подпрограммы АIН2E; |
Замечания по использованию
При работе подпрограммы исходная матрица не сохраняется. На место вектора А помещается ее треугольное разложение, полученное методом квадратного корня (методом Холецкого). Для подпрограммы АIН2E параметры А, АINV должны иметь тип Extended. |
Unit TAIH2R_p; interface uses SysUtils, Math, { Delphi } LStruct, Lfunc, UtRes_p, AIH2R_p; function TAIH2R: String; implementation function TAIH2R: String; var _i,IERR :Integer; B :Array [0..5] of Real; const A :Array [0..5] of Real = ( 0.0,-1.0,-1.0,2.0,2.0,2.0 ); begin Result := ''; Result := Result + Format('%s', [' ИНВЕРСИЯ ПОЛОЖИТЕЛЬНО ОПРЕДЕЛЕННЫХ СИММЕТРИЧНЫХ ЛЕНТОЧНЫХ MATPИЦ' + #$0D#$0A]) + #$0D#$0A; Result := Result + Format('%s',[' ЗАДАННАЯ MATPИЦA:']); Result := Result + #$0D#$0A; for _i:=0 to 5 do begin Result := Result + Format('%10.2f ',[A[_i]]); if ( ((_i+1) mod 2)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; AIH2R(A,B,3,1,IERR); Result := Result + Format('%s',[' МАТРИЦА B: A*B=E:']); Result := Result + #$0D#$0A; for _i:=0 to 5 do begin Result := Result + Format('%12.4f ',[B[_i]]); if ( ((_i+1) mod 2)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; Result := Result + Format('%s',[' IERR=']); Result := Result + Format('%8d ',[IERR]) + #$0D#$0A; UtRes('TAIH2R',Result); { вывод результатов в файл TAIH2R.res } exit; end; end. Результаты: AINV = (0.75, 0.5, 1., 0.25, 0.5, 0.75), IERR = 0