Текст подпрограммы и версий
ast5r_p.zip , ast5e_p.zip
Тексты тестовых примеров
tast5r_p.zip , tast5e_p.zip

Подпрограмма:  AST5R (модуль AST5R_p)

Назначение

Решение разреженной линейной системы с нижней треугольной матрицей с единичной диагональю, представленной в виде верхней треугольной в формате RR (U) U .

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

Описание формата RR (U) U приведено в описании подпрограммы AM21R (индекс 18.8.16).

Пусть разреженная верхняя треугольная матрица  U порядка  N с единичной диагональю задана в строчном формате RR (U) U. Требуется найти решение линейной системы UTX = B, где символ  T означает операцию транспонирования. Следовательно, матрица UT является нижней треугольной.

Решение систем такого вида осуществляется прямой подстановкой по следующим расчетным формулам:

              x1  =  b1
                               i -1
              xi  =  bi  -  ∑   uk i xk ,      i = 2, 3, ..., n
                              k =1 

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

procedure AST5R(var IU :Array of Integer; var JU :Array of Integer;
                var UN :Array of Real; var X :Array of Real;
                N :Integer; var B :Array of Real);

Параметры

IU, JU, -
         UN  
заданные портрет и ненулевые элементы верхней треугольной матрицы  U с единичной диагональю в формате RR (U) U;
X - вещественный одномерный массив длины  N, содержащий компоненты вычисленного вектора решения;
N - заданный порядок системы (тип: целый);
B - вещественный одномерный массив длины  N, содержащий компоненты вектора правой части системы.

Версии

AST5E - решение разреженной линейной системы с нижней треугольной матрицей с единичной диагональю, представленной в виде верхней треугольной в формате RR (U) U в режиме расширенной (Extended) точности; при этом параметры UN, X и B должны иметь тип Extended.

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

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

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

Unit TAST5R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AST5R_p;

function TAST5R: String;

implementation

function TAST5R: String;
var
N,_i :Integer;
X :Array [0..3] of Real;
const
IU :Array [0..4] of Integer = ( 1,2,3,4,4 );
JU :Array [0..2] of Integer = ( 4,3,4 );
UN :Array [0..2] of Real = ( 1.0,1.0,1.0 );
B :Array [0..3] of Real = ( 1.0,1.0,1.0,1.0 );
begin
Result := '';  { результат функции }

{      ТЕСТ ДЛЯ ПОДПРОГРАММЫ AST5R }

N := 4;
AST5R(IU,JU,UN,X,N,B);
Result := Result + Format('%s',[' X=']);
Result := Result + #$0D#$0A;
for _i:=0 to 3 do
 begin
  Result := Result + Format('%20.16f ',[X[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TAST5R',Result);  { вывод результатов в файл TAST5R.res }
exit;
end;

end.


Результаты:   X = (1, 1, 0, 0)