|
Текст подпрограммы и версий asg5a_p.zip , asg5e_p.zip , asg5z_p.zip |
Тексты тестовых примеров tasg5a_p.zip , tasg5e_p.zip , tasg5z_p.zip |
Решение системы линейных алгебраических уравнений на основе преобразований вращения.
Матрица А размера N на N исходной системы А*x = b с помощью преобразований вращения R1 2, R1 3, ..., RN - 1 N представляется в виде
A = L*RN-1 N ... R1 2 ,
где L - нижняя треугольная матрица размера N на N. Заменой переменных y = RN - 1 N ... R1 2*x исходная система сводится к системе L*y = b, которая решается способом обратной подстановки. При повторном решении системы с той же матрицей А и другой правой частью предоставляется возможность не выполнять заново факторизацию матрицы А.
В.В. Воеводин, Вычислительные основы линейной алгебры, М., 1977.
procedure ASG5A(var A :Array of Real; var B :Array of Real;
var X :Array of Real; N :Integer; L :Integer);
Параметры
| A - | вещественный двумерный массив размера N на N, в котором задается исходная матрица; по окончании работы подпрограммы в нижней треугольной части А запоминаются на соответствующих местах элементы матрицы L, а в верхней треугольной части матрицы А в компактном виде запоминается информация о матрицах вращения R1 2, ..., RN - 1 N ; |
| B - | вещественный вектор длины N, в котором задается правая часть; |
| X - | вещественный вектор длины N, в котором запоминается вычисленное решение системы; |
| N - | заданый порядок матрицы А (тип: целый); |
| L - | задает режим работы подпрограммы (тип: целый); при этом: |
| L = 1 - | если система с данной матрицей решается впервые, |
| L ≠ 1 - | если система с данной матрицей, но другой правой частью, решается повторно. |
Версии
| ASG5E - | решение системы линейных алгебраических уравнений, заданной с расширенной (Extended) точностью, на основе преобразований вращения. |
| ASG5E - | решение комплексной системы линейных алгебраических уравнений на основе преобразований вращения. |
Вызываемые подпрограммы: нет
Замечания по использованию
| 1. |
Подпрограммы АSG5А, АSG5E, АSG5Е позволяют помещать вычисленное решение Х на место правой части В. | |
| 2. |
В подпрограмме АSG5E параметры А, В, Х имеют тип Extended. | |
| 3. | В подпрограмме АSG5Е параметры А, В, Х имеют тип Complex. |
Unit tasg5a_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, ASG5A_p;
function tasg5a: String;
implementation
function tasg5a: String;
var
I,J,_i :Integer;
A :Array [0..24] of Real;
B :Array [0..4] of Real;
X :Array [0..4] of Real;
label
_2,_3,_4;
begin
Result := ''; { результат функции }
for I:=1 to 5 do
begin
for J:=1 to 5 do
begin
_2:
A[(I-1)+(J-1)*5] := 0.0;
end;
end;
for I:=1 to 5 do
begin
for J:=I to 5 do
begin
_3:
A[(I-1)+(J-1)*5] := 1.0;
end;
end;
for I:=1 to 5 do
begin
_4:
B[I-1] := 6-I;
end;
ASG5A(A,B,X,5,1);
Result := Result + #$0D#$0A;
for _i:=0 to 4 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('tasg5a',Result); { вывод результатов в файл tasg5a.res }
exit;
end;
end.
Результат:
X = (1., 1., 1., 1., 1.)