|
Текст подпрограммы и версий ast5r_p.zip , ast5e_p.zip |
Тексты тестовых примеров tast5r_p.zip , tast5e_p.zip |
Решение разреженной линейной системы с нижней треугольной матрицей с единичной диагональю, представленной в виде верхней треугольной в формате 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)