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