Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.ru/lib_na/cat/as_htm_p/ash1r_p.htm
Дата изменения: Fri Dec 4 10:26:24 2015 Дата индексирования: Sun Apr 10 03:56:57 2016 Кодировка: Windows-1251 |
Текст подпрограммы и версий ash1r_p.zip , ash1e_p.zip , ash1c_p.zip |
Тексты тестовых примеров tash1r_p.zip , tash1e_p.zip , tash1c_p.zip |
Решение системы линейных алгебраических уравнений с положительно определенной симметричной матрицей, записанной в компактной форме, методом квадратного корня (методом Холецкого).
Подпрограмма ASH1R вычисляет решение системы N линейных алгебраических уравнений А*x = b, где А - положительно определенная симметричная матрица, b - одномерный вектор правой части решаемой системы, методом квадратного корня (методом Холецкого). Матрица А задается в компактной форме.
В.В.Воеводин, Численные методы алгебры (теория и алгорифмы), Наука, М., 1966.
procedure ASH1R(var A :Array of Real; var B :Array of Real; var X :Array of Real; N :Integer; L :Integer; var IERR :Integer);
Параметры
A - | вектор длины N на (N + 1)/2, в котором содержится заданная матрица, записанная в компактной форме (тип: вещественный); |
B - | вектор длины N, в котором задается правая часть исходной системы (тип: вещественный); |
X - | вектор длины N, в котором содержится решение исходной системы (тип: вещественный); |
N - | порядок матрицы (тип: целый); |
L - | целая переменная, которая задает режим работы подпрограммы; при этом: |
L = 1 - | если система с данной матрицей решается впервые; |
L ≠ 1 - | если система с данной матрицей решается повторно. |
IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
IЕRR=65 - | если заданная матрица не является положительно определенной. |
Версии
ASH1E - | решение системы линейных алгебраических уравнений с положительно определенной симметричной матрицей, записанной в компактной форме, методом квадратного корня (методом Холецкого) с расширенной (Extended) точностью. |
ASH1C - | решение системы линейных алгебраических уравнений с положительно определенной эрмитовой матрицей, записанной в компактной форме, методом квадратного корня (методом Холецкого) . |
Вызываемые подпрограммы
UTAS10 - | подпрограмма выдачи диагностических сообщений при работе подпрограмм АSН1R и АSН1С. |
UTAS11 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы АSН1E. |
AFH1R - | подпрограмма, реализующая треугольное разложение положительно определенной матрицы методом квадратного корня (методом Холецкого) с компактной формой представления. |
AFH1D - AFH1C | подпрограммы, реализующие треугольное разложение положительно определенной матрицы методом квадратного корня (методом Холецкого) с компактной формой представления с расширенной (Extended) точностью и эрмитовой матрицы соответственно. |
Замечания по использованию
При работе подпрограммы исходная матрица А не сохраняется. На месте матрицы А помещается ее треугольное разложение, полученное подпрограммами АFН1R, АFН1E и АFН1С. Подпрограммы АSН1R и АSН1E позволяют использовать вместо параметра Х параметр В. Таким образом, в результате работы подпрограмм на место столбца правой части может быть помещено вычисленное решение. Для подпрограммы АSН1E параметры А, В, Х должны иметь тип Extended, а для АSН1С - тип Complex. |
Unit TASH1R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, ASH1R_p; function TASH1R: String; implementation function TASH1R: String; var _i,IERR :Integer; X :Array [0..2] of Real; const A :Array [0..5] of Real = ( 1.0,2.0,20.0,3.0,26.0,70.0 ); B :Array [0..2] of Real = ( 2.0,0.0,-35.0 ); begin Result := ''; { результат функции } Result := Result + Format('%s', [' РЕЗУЛЬТАТЫ РЕШЕНИЯ ЗАДАЧИ:' + #$0D#$0A]) + #$0D#$0A; Result := Result + Format('%s', [' РЕШЕНИЕ СИСТЕМЫ AX=B МЕТОДОМ ХОЛЕЦКОГО (A-ПOЛOЖИTEЛЬHO' + #$0D#$0A + ' ОПРЕДЕЛЕННАЯ СИММЕТРИЧЕСКАЯ MATPИЦA)' + #$0D#$0A]) + #$0D#$0A; Result := Result + Format('%s',[' ЗАДАННАЯ МАТРИЦА A: ' + #$0D#$0A]); Result := Result + Format('%s',['(']); Result := Result + #$0D#$0A; for _i:=0 to 5 do begin Result := Result + Format('%20.16f ',[A[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + Format('%s',[')' + #$0D#$0A]); Result := Result + #$0D#$0A; Result := Result + Format('%s',[' ВЕКТОР ПРАВЫХ ЧАСТЕЙ B: ' + #$0D#$0A]); Result := Result + Format('%s',['(']); Result := Result + #$0D#$0A; for _i:=0 to 2 do begin Result := Result + Format('%20.16f ',[B[_i]]); if ( ((_i+1) mod 3)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + Format('%s',[')' + #$0D#$0A]); Result := Result + #$0D#$0A; ASH1R(A,B,X,3,1,IERR); Result := Result + Format('%s', [' ВЕКТОР X, СОДЕРЖАЩИЙ РЕШЕНИЯ CИCTEMЫ: ' + #$0D#$0A]); Result := Result + Format('%s',['(']); Result := Result + #$0D#$0A; for _i:=0 to 2 do begin Result := Result + Format('%20.16f ',[X[_i]]); if ( ((_i+1) mod 3)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + Format('%s',[')' + #$0D#$0A]); Result := Result + #$0D#$0A; Result := Result + Format('%s',[' IERR =']); Result := Result + Format('%5d ',[IERR]) + #$0D#$0A; UtRes('TASH1R',Result); { вывод результатов в файл TASH1R.res } exit; end; end. Результаты: X = (3., 1., -1.) IERR = 0