Код сделал на pascalе, но теперь загвоздка в вводе коефициентов уравнений! Я думаю что этот метод нужен не только мне, в инете я его не нашел, валяется платные курсак, а вот есть почти решенные помогите!
| Код | uses crt;
function SGN(a: real): integer; begin if a > 0 then SGN := 1; if a = 0 then SGN := 0; if a < 0 then SGN := -1; end;
var a: array[1..20, 1..21] of real; b: array[1..20, 1..20] of real; w: array[1..20] of real; n, d, m, t, s: byte; i, j: word; x, c, v, y: real; label label1, label2, label3; begin v := 0; writeln('vvedite poradok system'); readln(n); writeln('vvedite coeffs'); for I := 1 to N do begin readln(A[I, I]); B[I, I] := ABS(A[I, I]); for J := 2 to N do begin readln(A[I, J]); B[I, J] := B[I, J - I] + ABS(A[I, J]); end; readln(A[I, N + 1]); end; readln; for I := 1 to N do W[i] := A[I, N + 1] / (1 - B[I, N]); writeln('vvedite nomer uravnenia'); readln(d, m); T := 1; Y := 0; label2: S := d; Y := 1; if T > M then goto label1; label3: C := random(1); for J := N downto 1 do begin if C <= B[S, J] then continue; if J = N then begin T := T + 1; Y := Y + V * W[S]; goto label2; end else begin V := V * SGN(A[S, J + 1]); S := J + 1; goto label3; end; end; V := V * SGN(A[S, 1]); S := 1; goto label2; label1: X := Y / M; writeln('coren ', d, ' - go uravnenia X=', X); readln; end.
|
|