Текст подпрограммы и версий
ash2r_p.zip , ash2e_p.zip
Тексты тестовых примеров
tash2r_p.zip , tash2e_p.zip

Подпрограмма:  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