
04.06.2014, 19:08
|
Прохожий
|
|
Регистрация: 29.05.2014
Сообщения: 6
Версия Delphi: delphi 7
Репутация: 10
|
|
интегрирование методом монте-карло
Здравствуйте! Прошу помощи. Очень нужна дельная подсказка в корректировке кода. Пишу программу в Delhi по нахождению определенного интеграла методом Монте-Карло. Вот код.
Код:
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.
Админ: Пользуемся тегами для оформления кода!
Последний раз редактировалось Admin, 04.06.2014 в 19:26.
|