Текст подпрограммы и версий 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)