Вторая пачка часть 58
Выходные: x (тип real) - мас¬сив из n дейст¬ви¬тельных чисел (он же вход¬-ной) содержит при вы¬хо¬де из newts при¬бл謬жен-ное зна¬чение решения; k (тип integer) - раз¬ре-шенное ко¬ли¬чес¬т¬¬во итераций.
PROCEDURE NEWTS (CONST N: INTEGER;
VAR X : ARRAY OF REAL; EPS : REAL;
VAR XKIT : INTEGER);
VAR Y, X1 : ARRAY [0..2] OF REAL;
A : ARRAY [0..4] OF REAL;
L, M : ARRAY [0..10] OF INTEGER;
J, I, NK : INTEGER; S, D, XX,YY : REAL;
BEGIN
XKIT := 0;
REPEAT
FOR J := 1 TO N DO X1[J] := X[J];
XX := X1[1];
YY := X1[2];
FUNCF (N, XX,YY, Y);
FUNCG (N, XX,YY, A);
MINV (A, N, D, L, M);
FOR J := 1 TO N DO
BEGIN
X[J] := X1[J];
FOR I := 1 TO N DO
BEGIN
NK := J + N*(I-1);
X[J] := X[J] - A[NK]*Y[I];
END;
END;
INC (XKIT);
S := 1.0;
FOR J := 1 TO N DO S := S* SQR(X[J]-X1[J]);
S := SQRT(S);
UNTIL S > EPS;
END.
Внимание: подпрограмма NEWTS содержит об-рବще¬ние к подпрограмме MINV, которая входит в БСП БЭСМ. Пол¬ный текст по䬬программы приводится ни¬же (п嬬ревод на язык PAS¬CAL выполнен ав¬то¬ра¬ми).
PROCEDURE MINV (VAR A : ARRAY OF REAL;
N : INTEGER; VAR D : REAL;
VAR L, M : ARRAY OF INTEGER);
VAR NK,KK,K,IZ,IJ,I,KI,JI,JP, JK, IK, KJ, JQ : INTEGER;
BIGA, HOLD : REAL;
JR : INTEGER; DN : BOOLEAN;
BEGIN D := 1.0;
NK := -N;
DN := FALSE;
FOR K := 1 TO N DO
BEGIN INC(NK,N);
L[K] := K;
M[K] := K;
KK := NK + K;
BIGA := A[KK];
FOR J := K TO N DO
BEGIN
IZ := N*(J-1);
FOR I := K TO N DO
BEGIN
IJ := IZ + I;
IF (ABS(BIGA)-ABS(A[IJ])) < 0.0 THEN
BEGIN
BIGA := A[IJ];
L[K] := I;
M[K] := J;
END;
END;
END;
J :=L[K];
IF J > K THEN
BEGIN
KI := K - N;
FOR I := 1 TO N DO
BEGIN
INC(KI,N);
HOLD := - F[KI];
JI := KI - K + J;
A[KI] := A[JI];
A[JI] := HOLD;
END;
END;
I := M [K];
IF I > K THEN
BEGIN
JP := N*(I-1);
FOR J := 1 TO N DO
BEGIN
JK:= NK + J;
JI:= JP + J;
HOLD := - A[JK];
A[JK] := A[JI];
A[JI] := HOLD;
END;
END;
IF ABS(BIGA)< 1
Индекс
Элементарные функции
Линейные уравнения
Нелинейные уравнения
Случайные числа