Подпрограмма: ASH2R (модуль ASH2R_p)
Назначение
Решение системы линейных алгебраических уравнений с
положительно определенной симметричной ленточной матрицей,
заданной в компактной форме, методом квадратного корня (методом
Холецкого).
Математическое описание
Подпрограмма ASH2R вычисляет решение системы N линейных
алгебраических уравнений А*x = b, где
А - положительно определенная симметричная ленточная матрица,
заданная в компактной форме, b - одномерный вектор правой
части решаемой системы, методом квадратного корня (методом
Холецкого).
В.В.Воеводин, Численные методы алгебры (теория и
алгорифмы), Наука, М., 1966 .
Использование
procedure ASH2R(var A :Array of Real; var B :Array of Real;
var X :Array of Real; N :Integer; NC :Integer;
L :Integer; var IERR :Integer);
Параметры
A -
|
вещественный двумерный массив размера
N на (NС + 1),
в котором содержится заданная матрица,
записанная в компактной форме;
|
B -
|
вектор длины N, в котором задается правая часть
исходной системы (тип: вещественный);
|
X -
|
вектор длины N, в котором содержится решение
исходной системы (тип: вещественный);
|
N -
|
порядок матрицы (тип: целый);
|
NC -
|
число ненулевых диагоналей заданной матрицы по
одну сторону от главной диагонали (тип:целый);
|
L -
|
целая переменная, которая задает режим работы
подпрограммы; при этом:
|
L = 1 -
|
если система с данной матрицей решается впервые;
|
L ≠ 1 -
|
если система с данной матрицей решается повторно;
|
IERR -
|
целая переменная, служащая для сообщения об
ошибках, обнаруженных в ходе работы подпрограммы; при этом:
|
IЕRR=65 -
|
если заданная матрица не является положительно определенной.
|
Версии
ASH2E -
|
решение системы линейных алгебраических
уравнений с положительно определенной симметричной
ленточной матрицей, заданной в компактной
форме, методом квадратного корня (методом
Холецкого) с расширенной (Extended) точностью.
|
Вызываемые подпрограммы
UTAS10 -
|
подпрограмма выдачи диагностических сообщений
при работе подпрограммы АSН2R.
|
UTAS11 -
|
подпрограмма выдачи диагностических сообщений
при работе подпрограммы АSН2E.
|
AFH2R -
|
подпрограмма, реализующая треугольное
разложение положительно определенной симметричной
ленточной матрицы с компактной формой
представления методом квадратного корня.
|
AFH2E -
|
подпрограмма, реализующая треугольное
разложение положительно определенной симметричной
ленточной матрицы с компактной формой
представления методом квадратного корня с расширенной (Extended) точностью.
|
Замечания по использованию
|
При работе подпрограммы исходная матрица не
сохраняется. На месте матрицы А помещается ее треугольное
разложение, полученное программами АFН2R, АFН2E.
Подпрограммы АSН2R и АSН2E позволяют использовать
вместо параметра Х параметр В. Таким образом, в результате
работы подпрограммы на место столбца правой части может
быть помещено вычисленное решение.
Для подпрограммы АSН2E параметры А, В, Х должны иметь
тип Extended.
|
Пример использования
Unit TASH2R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ASH2R_p;
function TASH2R: String;
implementation
function TASH2R: String;
var
_i,IERR :Integer;
X :Array [0..2] of Real;
const
A :Array [0..5] of Real = ( 0.0,2.0,12.0,1.0,25.0,56.0 );
B :Array [0..2] of Real = ( 1.0,27.0,68.0 );
begin
Result := ''; { результат функции }
Result := Result + Format('%s',[' ИСХОДНАЯ MATPИЦA' + #$0D#$0A]);
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 + #$0D#$0A;
ASH2R(A,B,X,3,1,1,IERR);
Result := Result + Format('%s',[' PEЗУЛЬTAT' + #$0D#$0A]);
Result := Result + Format('%s',[' IERR=']);
Result := Result + Format('%5d ',[IERR]);
Result := Result + Format('%s',[' X=']);
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 + #$0D#$0A;
UtRes('TASH2R',Result); { вывод результатов в файл TASH2R.res }
exit;
end;
end.
Результаты:
Х = (-0.13178, 0.56589, 1.0930) ,
IЕRR=0