Вторая пачка часть 8
Если контроль за невырожденностью мат-ри¬цы А не¬об¬ходим, то можно предложить воспользоваться другой про¬це¬ду¬рой GAUS1.
В отличие от первой процедуры здесь в вы¬ход¬ных па¬раметрах есть переменная tol, воз-вра¬ща¬ю¬щая 0 при нор¬¬мальном завершении работы про¬це¬ду¬ры, или 1, ес¬ли на главной диагонали один из эле¬ментов ра¬вен 0, или 2, если матрица А раз¬мер¬ностью боль¬ше, чем 50?50.
PROCEDURE GAUS1 (N:INTEGER; A : MAS; B : MAS1;
VAR X : MAS1; VAR TOL : INTEGER);
TYPE MST = ARRAY [1..50] OF REAL;
MSS = ARRAY [1..50] OF MST;
VAR A1 : MSS; B1 : MST;
I, J, M, K : INTEGER; H : REAL;
BEGIN
FOR I := 1 TO N DO
BEGIN
B1[I] := B[I];
FOR J := 1 TO N DO A1 [I,J] := A[I,J];
END;
TOL := 0;
IF N > 50 THEN
BEGIN
TOL := 2;
EXIT;
END;
FOR I := 1 TO N-1 DO
FOR J := I+1 TO N DO
BEGIN
IF ABS(A1[I,I])< 1.0E-10 THEN
BEGIN
TOL := 1;
EXIT;
END;
A1[J,I] :=- A1[J,I] / A1[I,I];
FOR K := I+1 TO N DO
A1[J,K] := A1 [J,K] + A1[J,I]*A1[I,K];
B1[J] := B1[J] + B1[I]*A1[J,I]
END;
IF ABS(A1[N,N]) < 1.0E-10 THEN
BEGIN
TOL := 1;
EXIT;
END;
X[N] := B1[N] / A1[N,N];
FOR I := N-1 DOWNTO 1 DO
BEGIN
IF ABS(A1[I,I]) < 1.0E-10 THEN
BEGIN
TOL := 1;
EXIT;
END;
H := B1[I];
FOR J := I+1 TO N DO H := H - X[J]*A1[I,J];
X[I] := H / A1[I,I];
END;
END.
По поводу приведенных ал¬го¬рит¬мов можно скବзать, что они не самые эф¬фек¬тив¬ные и при¬год¬ны для ре¬ше¬ния систем, имеющих невырожденные матрицы А и В с рангом не бо-лее 50, составленные из при¬бли¬зи¬тельно оди¬на-ко¬вых ко¬эф¬фи¬ци¬ентов. Если ме欬ду на¬и¬большим и на¬и¬мень¬шим из ко¬эф¬¬фи¬ци¬ен¬тов рас¬стоя¬ние более чем 104, то эти а묬го¬ритмы при¬ме¬нять не рекомендуется, так как по¬греш¬ность вы¬чис¬¬ле-ний бу¬дет тବкова, что может ли¬бо привести к вы¬¬рож¬ден¬ной мат¬ри¬це А, ли¬бо дать в ре¬зультате веꬬтор Х с боль¬шой вы¬чис¬¬л謬тель¬ной по¬греш¬нос-тью.
Для проверки работы процедур ре¬шим сис¬¬тему ли¬ней¬ных уравнений методом Гаусса с точ¬нос¬тью до 0
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа