Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal] Монте-Карло


Автор: MagicPRO 11.6.2007, 09:56
Код сделал на 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.

Автор: comtat 11.6.2007, 11:07
http://student.km.ru/ref_show_frame.asp?id=4CFD88CDD54F471296F689106AEBD710

Прикрепленный файл взят http://www.drgenius.h1.ru/pascal.shtml

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)