Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.03.2013, 11:29
koroleva25 koroleva25 вне форума
Прохожий
 
Регистрация: 17.03.2012
Сообщения: 32
Репутация: 10
По умолчанию Метод Монте-Карло

Здравствуйте! Прошу помощи. Очень нужна дельная подсказка в корректировке кода. Пишу программу в Delhi по нахождению определенного интеграла методом Монте-Карло.

Решение математическим методом – это число 8.
Решение же с помощью программы дает либо неправильный результат, либо ошибку. У меня есть определенная догадка – скорей всего неправильно использован цикл повтора нахождения всех последующих 9999 точек - связка repeat…until. Подскажите, пожалуйста, как правильно его в моем коде использовать? Или может быть здесь должен использоваться другой оператор (while…do) ?

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Button1: TButton;
    Label4: TLabel;
    Label5: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
    const
      x1=2; // Интервал
      X2=3; // интегрирования
var
  Form1: TForm1;
  k:      integer; // Количество точек введенных пользователем
  y1,y2:  real;
  n,m:    integer;
  r1,r2:  real; //случайные числа от 0 до 1
  fx:     real;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  r1: real;
  r2: real;
  x,y,Integral: real;
  i:integer;
  j:  integer;
begin
  y1:=0;
  y2:= strtoint(Edit1.Text); //Это значение равно 15
  //i:=1;
  n:=0;
  m:=0;
  k:=strtoint(Edit2.text); //количество точек введенное пользователем

repeat
  //=============== Запускаем цикл нахождения точки =====================
  Randomize; //Запускаем генератор случ. чисел
  for i := 1 to k do
  begin
    r1:= Random; //Генерируем случ. числа от 0 до 1
    r2:= Random;
   //ShowMessage ('r1= '+FloatToStr(r1)+ #13 + ' r2= ' + FloatToStr(r2));
  end;
  x := x1 + (r1*(x2-x1));
  y := r2 * y2;
  fx :=((3*x*x) - (4*x) - 1);

  if y <= fx then n:= n+1 else
  if y > fx  then m:= m+1;
//=========================================================================
until i<=k;

  Integral:= ((x2-x1)*(y2-y1)*(n/(n+m)));
  Edit3.Text:=floattostr(Integral);

end;

end.
Изображения
Тип файла: jpg Интеграл.jpg (3.1 Кбайт, 45 просмотров)
Вложения
Тип файла: rar Лаба 1.rar (222.4 Кбайт, 59 просмотров)
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:28.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025