|
Текст подпрограммы и версий ast4r_p.zip , ast4e_p.zip |
Тексты тестовых примеров tast4r_p.zip , tast4e_p.zip |
Решение разреженной линейной системы с верхней треугольной матрицей с единичной диагональю, представленной в формате RR (U) U .
Описание формата RR (U) U приведено в описании подпрограммы AM21R (индекс 18.8.16).
Пусть разреженная верхняя треугольная матрица U порядка N с единичной диагональю задана в строчном формате RR (U) U. Требуется найти решение линейной системы UX = B.
Решение систем такого вида осуществляется обратной подстановкой по следующим расчетным формулам:
xn = bn
n
xi = bi - ∑ ui k xk , i = n - 1, ..., 2, 1
k= i +1
procedure AST4R(var IU :Array of Integer; var JU :Array of Integer;
var UN :Array of Real; var B :Array of Real;
N :Integer; var X :Array of Real);
Параметры
|
IU, JU, - UN | заданные портрет и ненулевые элементы верхней треугольной матрицы U с единичной диагональю в формате RR (U) U; |
| B - | вещественный одномерный массив длины N, содержащий компоненты вектора правой части системы; |
| N - | заданный порядок системы (тип: целый); |
| X - | вещественный одномерный массив длины N, содержащий компоненты вычисленного вектора решения. |
Версии
| AST4E - | решение разреженной линейной системы с верхней треугольной матрицей с единичной диагональю в режиме расширенной (Extended) точности; при этом параметры UN, B и X должны иметь тип Extended. |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
Unit TAST4R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AST4R_p;
function TAST4R: String;
implementation
function TAST4R: 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 := ''; { результат функции }
{ ТЕСТ ДЛЯ ПОДПРОГРАММЫ AST4R }
N := 4;
AST4R(IU,JU,UN,B,N,X);
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('TAST4R',Result); { вывод результатов в файл TAST4R.res }
exit;
end;
end.
Результаты: X = (0, 1, 0, 1)