Текст подпрограммы и версий
ash3r_p.zip , ash3e_p.zip , ash3c_p.zip , ass3c_p.zip
Тексты тестовых примеров
tash3r_p.zip , tash3e_p.zip , tash3c_p.zip , tass3c_p.zip

Подпрограмма:  ASH3R (модуль ASH3R_p)

Назначение

Решение системы линейных алгебраических уравнений с неособенной симметричной матрицей, записанной в компактной форме, методом квадратного корня.

Математическое описание

Подпрограмма ASH3R вычисляет решение системы N линейных алгебраических уравнений А*x = b где А - неособенная симметричная матрица, заданная в компактной форме, b - вектор правой части, методом квадратного корня.

Вunch J.R., Рarlett В.N., Direct Мethods for Solving Symmetric Indefinite Systems of Linear Еquations, SIАМ J. Numer. Аnal., Vol. 8, No. 4, December 1971.

Использование

procedure ASH3R(var A :Array of Real; var B :Array of Real;
                var X :Array of Real; N :Integer; L :Integer;
                var IR :Array of Integer; var R :Array of Real;
                var IERR :Integer);

Параметры

A - вещественный вектор длины N на (N + 1)/2, в котором содержится заданная матрица, записанная в компактной форме;
B - вещественный вектор длины N, в котором задается правая часть;
X - вещественный вектор длины N, в котором содержится решение исходной системы;
N - заданный порядок матрицы (тип: целый);
L - целая переменая, которая задает режим работы подпрограммы; при этом:
L = 1 - если система с данной матрицей решается впервые;
L ≠ 1 - если система с данной матрицей решается повторно;
IR - целый вектор длины 2 на N, используемый как рабочий; если подпрограмма АSН3R будет использоваться повторно, т.е. при L ≠ 1, компоненты вектора IR пользователь менять не имеет права;
R - вещественный вектор длины N, используемый как рабочий; если подпрограмма АSН3R будет использоваться повторно, т.е. при L ≠ 1, компоненты вектора R пользователь менять не имеет права;
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в процессе работы подпрограммы; при этом:
IЕRR=65 - если матрица является сингулярной.

Версии

ASH3E - решение системы линейных алгебраических уравнений с неособенной симметричной матрицей, записанной в компактной форме, методом квадратного корня с повышеной точностью.
ASH3C - решение системы линейных алгебраических уравнений, с неособенной эрмитовой матрицей, записанной в компактной форме, методом квадратного корня.
ASS3C - решение системы линейных алгебраических уравнений с неособенной симметричной комплексной матрицей, записанной в компактной форме, методом квадратного корня.

Вызываемые подпрограммы

UTAS10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы АSН3R.
UTAS11 - подпрограмма выдачи диагностических сообщений при работе подпрограммы АSН3E.
UTAF10 - подпрограмма выдачи диагностических сообщений при работе подпрограмм АSН3С и АSS3С.
AFH3R - разложение неособенной симметричной матрицы с компактной формой записи методом квадратного корня.
AFH3E - разложение неособенной симметричной матрицы, записанной в компактной форме, методом квадратного корня с расширенной (Extended) точностью;
AFH3C - разложение неособенной эрмитовой матрицы с компактной формой записи методом квадратного корня;
AFS3C - разложение неособенной симметричной комплексной матрицы с компактной формой записи методом квадратного корня.

Замечания по использованию

 

При работе подпрограммы исходная матрица А не сохраняется. На месте матрицы А помещается ее треугольное разложение, полученное подпрограммами АFН3R, АFН3E, АFS3С и АFН3С.

Подпрограммы АSН3R, АSН3E, АSН3С и АSS3С позволяют помещать вычисленное решение Х на место правой части В.

Для подпрограммы АSН3E параметры А, В и Х должны иметь тип Extended.

Для подпрограмм АSН3С и АSS3С параметры А, В и Х должны иметь тип Complex.

Пример использования

Unit TASH3R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ASH3R_p;

function TASH3R: String;

implementation

function TASH3R: String;
var
_i,N,L,IERR :Integer;
X :Array [0..2] of Real;
IR :Array [0..5] of Integer;
R :Array [0..2] of Real;
const
A :Array [0..5] of Real = ( 1.0,0.5,-1.0,3.0,2.0,1.0 );
B :Array [0..2] of Real = ( -1.0,-3.5,6.0 );
begin
Result := '';  { результат функции }
Result := Result + Format('%s',
 [' РЕШЕНИЕ СИСТЕМЫ YРАВНЕНИЙ AX=B C СИММЕТРИЧЕСКОЙ MATPИЦEЙ' + #$0D#$0A]) + #$0D#$0A; 
Result := Result + Format('%s',[' ЗАДАННАЯ МАТРИЦА 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;
Result := Result + Format('%s',[' ВЕКТОР ПРАВЫХ ЧАСТЕЙ B :' + #$0D#$0A]);
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 + #$0D#$0A;
N := 3;
L := 1;
ASH3R(A,B,X,N,L,IR,R,IERR);
Result := Result + Format('%s',
 [' BEKTOP, СОДЕРЖАЩИЙ РЕШЕНИЕ ИСХОДНОЙ СИСТЕМЫ YPABHEHИЙ: ' + #$0D#$0A]);
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;
Result := Result + Format('%s',[' IERR = ']);
Result := Result + Format('%10d ',[IERR]) + #$0D#$0A;
UtRes('TASH3R',Result);  { вывод результатов в файл TASH3R.res }
exit;
end;

end.


Результаты:

      X  =   (1., 2., -1.) , 
      IERR  =  0