Вторая пачка часть 10


Описанный алгоритм, как и алгоритм метода Гବ¬¬ус¬са, представленный в п. 3.1, имеет множество про¬грам¬мных р嬬¬ализаций и всегда есть в биб¬ли¬о¬те¬ках стан¬¬дар¬т¬ных про¬грамм. Один из относительно эф¬фек¬тив¬ных ал¬го¬рит-мов есть в БСП на ЕС ЭВМ для тран¬слятора FORT¬RAN-77. Он ре¬а¬ли¬зо¬ван в в謬¬де про¬цедуры SINQ. Пе¬ревод на язык PASCAL вы¬¬пол¬нен ав-торами. Формальные параметры процедуры. Входные: n (тип in¬¬te¬ger) - целое положительное число, рав¬ное п¬рядку ис¬¬ходной системы; aa (тип real) - массив из n?n дейс¬т¬ви¬тель¬ных чисел, содержащий мат¬ри¬цу кэф¬фи¬циентов сис¬те¬мы (aa[1] = а11; aa[2] = а21; aa[3] = a31; ...; aa[n]= an1; aa[n +1]= =a12; aa[n + 2] = a22; ...; aa[2*n] = аn2; ...; aa[n*n] = аnn); b (тип real) - мас¬сив из n действительных чисел, со¬дер¬жа¬щий стол¬бец сво¬бодных членов исходной системы (b[1] = =b1; b[2] = b2; ...; b[n] = bn). Выходные: b (тип real) - мас¬¬сив из n действительных чисел (он же был вход¬ным) при выходе из подпрограммы, со¬дер-жа¬щий ре¬ше¬ния ис¬ход¬ной системы (b[1]= x1; b[2] = x2; ...; b[n] = xn); ks (тип in¬¬te¬ger) - признак пра-виль¬нос¬ти р嬬ше¬ния или код ошиб¬ки: если ks = =0, то в ма¬с¬си¬ве b со¬дер¬жится р嬬шение ис¬ход-ной сис¬те¬мы; если ks = 1, то исход¬ная сис¬тема не име¬ет ре¬ше¬ния (глав¬ный опре¬де¬ли¬тель ее равен нулю). PROCEDURE SINQ (VAR A: MAS11; VAR B : MAS1; VAR KS : INTEGER; N : INTEGER); VAR TOL, BIGA, AA, SAVE : REAL; JJ,JY,IJ,IT,J,I, I1, IMAX, K, IQS, IXJ, IXJX : INTEGER; JJX, NY, IA, IB, IO, I2, IX, JX, KY : INTEGER; LABEL CONT10; BEGIN TOL := 0.0; KS := 0; JJ := -N; FOR J := 1 TO N DO BEGIN JY := J + 1; JJ := JJ + N + 1; BIGA := 0.0; IT := JJ - J; FOR I := J TO N DO BEGIN IJ := IT + I; AA := ABS (A[IJ]); IF (ABS(BIGA)-AA) < 0.0 THEN BEGIN BIGA := A[IJ]; IMAX := I; END; END; IF (ABS(BIGA)-TOL) <= 0.0 THEN BEGIN KS := 1; EXIT; END; I1 := J + N*(J-2); IT := IMAX - J; FOR K := J TO N DO BEGIN INC (I1,N); I2:= I1 + IT; SAVE := A[I1]; A[I1] := A[I2]; A[I2] := SAVE; A[I1] := A[I1] / BIGA; END; SAVE := B[IMAX]; B[IMAX] := B[J]; B[J] := SAVE / BIGA; IF J=N THEN GOTO CONT10; IQS := N*(J-1); FOR IX := JY TO N DO BEGIN IXJ := IQS + IX; IT := J - IX; FOR JX := JY TO N DO BEGIN IXJX := N*(JX-1) + IX; JJX := IXJX + IT; A[IXJX] := A[IXJX] - A[IXJ]*A[JJX]; END; B[IX] := B[IX] - B[J]*A[IXJ]; END; END; CONT10: NY := N - 1; IT := N*N; I := 1; J :=1; FOR KY := 1 TO NY DO BEGIN IA := IT - KY; IB := N - KY; IO := N; FOR K := 1 TO KY DO BEGIN B[IB] := B[IB] - A[IA]*B[IO]; DEC (IA,N); DEC (IO); END; END; END
Индекс
Элементарные функции    Линейные уравнения    Нелинейные уравнения    Случайные числа


Hosted by uCoz