Текст подпрограммы и версий aib1r_p.zip aib1e_p.zip |
Тексты тестовых примеров taib1r_p.zip taib1e_p.zip |
Обращение ленточной матрицы, заданной в компактной форме, с выбором ведущего элемента по столбцу.
Подпрограмма AIB1R вычисляет матрицу B, такую что А*В = Е, где А - исходная ленточная, а Е - единичная матрицы. Обращение осуществляется с выбором главного элемента по столбцу.
Дж.Х.Уилкинсон, Алгебраическая проблема собственных значений. "Наука", М., 1970.
procedure AIB1R(var A :Array of Real; var AINV :Array of Real; N :Integer; NLC :Integer; NUC :Integer; var R :Array of Real; var IERR :Integer);
Параметры
A - | вещественный двумерный массив размера N на (NLС+NUС+1), в котором содержится заданная матрица, записанная в компактной форме; |
B - | вещественный двумерный массив размера N на N, в котором записывается вычисленная обратная матрица; |
N - | порядок матрицы (тип: целый); |
NLC - | число ненулевых диагоналей матрицы, расположенных под главной диагональю (тип: целый); |
NUC - | число ненулевых диагоналей матрицы, расположенных над главной диагональю (тип: целый); |
R - | вещественный двумерный массив размера N на (NLС+1), используемый как рабочий; |
IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
IЕRR=65 - | если заданная матрица является алгоритмически сингулярной. |
Версии
AIB1E - | обращение ленточной матрицы, заданной в компактной форме с расширенной (Extended) точностью. Используется выбор ведущего элемента по столбцу. |
Вызываемые подпрограммы
UTBF10 - | подпрограмма печати диагностических сообщений при работе подпрограммы АIВ1R; |
UTBF11 - | подпрограмма печати диагностических сообщений при работе подпрограммы АIВ1E. |
Замечания по использованию
При работе подпрограммы исходная матрица не сохраняется. На место вектора А помещается его треугольное разложение. Для подпрограммы АIВ1E параметры А, B, R должны иметь тип External. |
Unit TAIB1R_p; interface uses SysUtils, Math, { Delphi } LStruct, Lfunc, UtRes_p, AIB1R_p; function TAIB1R: String; implementation function TAIB1R: String; var _i,IERR :Integer; B :Array [0..8] of Real; R :Array [0..5] of Real; const A :Array [0..8] of Real = ( 0.0,1.0,2.0,1.0,3.0,3.0,-1.0,-2.0,0.0 ); begin Result := ''; Result := Result + Format('%s',[' ЗАДАННАЯ MATPИЦA:']); Result := Result + #$0D#$0A; for _i:=0 to 8 do begin Result := Result + Format('%10.4f ',[A[_i]]); if ( ((_i+1) mod 3)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; AIB1R(A,B,3,1,1,R,IERR); Result := Result + Format('%s',[' PEЗYЛЬTAT:']); Result := Result + #$0D#$0A; for _i:=0 to 8 do begin Result := Result + Format('%10.4f ',[B[_i]]); if ( ((_i+1) mod 3)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; Result := Result + Format('%s',[' I=']); Result := Result + Format('%5d ',[IERR]) + #$0D#$0A; UtRes('TAIB1R',Result); {вывод результатов в файл TAIB1R.res} exit; end; end. Результаты: B = (0.8125, -0.1875, 0.125, 0.1875, 0.1875, -0.125, 0.125, 0.125, 0.25), IERR = 0