|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.ru/lib_na/cat/am_htm_p/am02e_p.htm
Дата изменения: Fri Oct 30 12:34:33 2015 Дата индексирования: Sun Apr 10 03:41:51 2016 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий am02e_p.zip , am02c_p.zip |
Тексты тестовых примеров tam02e_p.zip , tam02c_p.zip |
Вычисление нормированного вектора невязки системы линейных алгебраических уравнений.
Вычисляется вектор R = r / S, где r = b - Аx, b - заданный вектор длины N, x - заданный вектор длины М, A - заданная матрица размера N * М, S = || r || ∞.
Нормировка вектора невязки r необходима при решении системы линейных алгебраических уравнений Аx = b с уточнением.
В.В.Воеводин, Вычислительные основы линейной алгебры, "Наука", М., 1977.
Параметры
| A - | двумерный массив размера N * М, в котором задается матрица системы (тип: вещественный расширенной (Extended) точности); |
| B - | вектор длины N, в котором запоминается правая часть системы (тип: вещественный расширенной (Extended) точности); |
| X - | вектор длины М, в котором задается решение системы (тип: вещественный расширенной (Extended) точности); |
| R - | одномерный массив длины N, в котором запоминается вычисленный нормированный вектор невязки (тип: вещественный расширенной (Extended) точности); |
| S - | переменная, в которой запоминается бесконечная норма вычисленного вектора невязки (тип: вещественный расширенной (Extended) точности); |
| N, M - | число строк и столбцов матрицы системы (тип: целый). |
Версии
| AM02C - | вычисление нормированного вектора невязки комплексной системы линейных алгебраических уравнений. |
Вызываемые подпрограммы: нет.
Замечания по использованию
| 1. |
В подпрограмме AM02C параметры А, B, X, R имеют тип Complex. | |
| 2. | Подпрограммы АМ02E, AM02C целесообразно использовать при решении системы линейных алгебраических уравнений с уточнением (см. пример использования). |
Unit tam02e_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, ASH0E_p, AM02E_p;
function tam02e: String;
implementation
function tam02e: String;
var
N,I,J,K,_i :Integer;
S0,Z,F,S :Extended;
X1 :Array [0..6] of Extended;
A :Array [0..48] of Extended;
A1 :Array [0..48] of Extended;
X :Array [0..6] of Extended;
D :Array [0..6] of Extended;
R :Array [0..6] of Extended;
S1 :Array [0..6] of Extended;
const
B :Array [0..6] of Extended = ( 0.e0,0.e0,0.e0,0.e0,0.e0,0.e0,0.e0 );
label
_4,_3,_2,_5,_9,_6;
begin
Result := '';
N := 7;
for I:=1 to N do
begin
for J:=1 to N do
begin
A[(I-1)+(J-1)*7] := 360360.e0/(I+J-1);
_4:
A1[(I-1)+(J-1)*7] := A[(I-1)+(J-1)*7];
end;
end;
B[4] := 360360.e0;
ASH0E(A,B,X,S1,N,1);
S0 := 0.e0;
for I:=1 to N do
begin
X1[I-1] := X[I-1];
if ( Abs(X[I-1]) <= S0 )
then goto _3;
S0 := Abs(X[I-1]);
_3:
end;
for K:=1 to 6 do
begin
Result := Result + #$0D#$0A;
for _i:=0 to 6 do
begin
Result := Result + Format('%20.16f ',[X[_i]]);
if ( ((_i+1) mod 1)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
AM02E(A1,B,X,R,S,N,N);
Result := Result + #$0D#$0A;
for _i:=0 to 6 do
begin
Result := Result + Format('%20.16f ',[R[_i]]);
if ( ((_i+1) mod 1)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
Result := Result + Format(' %20.16f ',[S]) + #$0D#$0A;
ASH0E(A,R,D,S1,N,2);
Result := Result + #$0D#$0A;
for _i:=0 to 6 do
begin
Result := Result + Format('%20.16f ',[D[_i]]);
if ( ((_i+1) mod 1)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
for I:=1 to N do
begin
_2:
X[I-1] := X[I-1]+D[I-1]*S;
end;
Z := 0.e0;
for I:=1 to N do
begin
F := Abs(X[I-1]-X1[I-1]);
X1[I-1] := X[I-1];
if ( F <= Z )
then goto _5;
Z := F;
_5:
end;
if ( S0+Z = S0 )
then goto _6;
_9:
end;
_6:
Result := Result + #$0D#$0A;
for _i:=0 to 6 do
begin
Result := Result + Format('%20.16f ',[X[_i]]);
if ( ((_i+1) mod 1)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
UtRes('tam02e',Result); { вывод результатов в файл tam02e.res }
exit;
end;
end.
Подпрограмма АSН0E (А, В, Х, S, N, Р)
находит решение системы Аx = b, причем при повторном решении
системы с той же матрицей и другой правой частью параметр Р
полагают отличным от единицы. Проводится два шага уточнения решения
системы с матрицей Гильберта 7 порядка и правой частью
b = (0, 0, 0, 0, 1, 0, 0).
Результат:
X1 X2 X3
4.85115043411 + 04 4.85099999532 + 04 4.85100000000 + 04
- 1.94046009606 + 06 - 1.94039999813 + 06 - 1.94040000000 + 06
1.87115797099 + 07 1.87109999819 + 07 1.87110000000 + 07
- 7.27672565200 + 07 - 7.27649999300 + 07 - 7.27650000001 + 07
1.33406641488 + 08 1.33402499871 + 08 1.33402500000 + 08
- 1.15263342213 + 08 - 1.15259759888 + 08 - 1.15259760000 + 08
3.78389772248 + 07 3.78377999634 + 07 3.78378000000 + 07
где X1 - решение системы без уточнения;
X2 - решение системы после 1-ого шага уточнения;
X3 - решение системы после 2-ого шага уточнения.