Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет Расчетка ВЫЧМАТ.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
3.19 Mб
Скачать

3.9 Метод Монте-Карло

3.9.1 Листинг

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, jpeg, ExtCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Label1: TLabel;

Label2: TLabel;

Button1: TButton;

Edit3: TEdit;

Label3: TLabel;

Edit4: TEdit;

Edit5: TEdit;

Label4: TLabel;

Label5: TLabel;

Memo1: TMemo;

lbl7: TLabel;

bvl1: TBevel;

lbl8: TLabel;

img2: TImage;

lbl10: TLabel;

lbl1: TLabel;

lbl2: TLabel;

lbl3: TLabel;

lbl4: TLabel;

lbl5: TLabel;

lbl6: TLabel;

Image1: TImage;

lbl9: TLabel;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var

Pop:integer; //Количество попавших точек

N,i:integer;

Ver,x,y,alfa,betta,S,a,Sigma,h:extended;

begin

a := StrToFloat(Edit2.text);

alfa := StrToFloat(Edit3.text);

betta := StrToFloat(Edit4.text);

N := StrToInt(Edit5.text); //Количество точек

Sigma := StrToFloat(Edit1.text);

h := 1/(sqrt(2*3.14159265)*Sigma);

S := (betta-alfa)*(1/(sqrt(2*3.14159265)*Sigma));

Pop:=0; Ver:=0;

For i:=1 to N do

begin

Randomize();

x := alfa+(betta-alfa)*Random;

y := Random*h;

If y <= (1/(sqrt(2*3.14159265)*Sigma))*exp((-1)*((x-a)*(x-a))/(2*Sigma*Sigma)) then

Pop:=Pop+1;

end;

If Pop <> 0 then

begin

Ver:=((Pop/N)*S);

Memo1.Lines.add(IntToStr(Pop)+' - Кол-во попавших точек '+FloatToStr(Ver)+' - Площадь под кривой');

end

else

ShowMessage('Нет попавших точек');

end;

end.

3.10 Метод Рунге-Кутты

3.10.1 Листинг

unit UnitChInt11;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Grids, Math, ExtCtrls, TeeProcs, TeEngine, Chart,

Series, jpeg;

type

TForm1 = class(TForm)

SG1: TStringGrid;

Button1: TButton;

Label5: TLabel;

Edit1: TEdit;

Label1: TLabel;

Label2: TLabel;

Edit2: TEdit;

Label3: TLabel;

Edit3: TEdit;

Edit4: TEdit;

Label10: TLabel;

Edit6: TEdit;

Chart1: TChart;

Series1: TLineSeries;

lbl10: TLabel;

lbl1: TLabel;

lbl2: TLabel;

lbl3: TLabel;

lbl4: TLabel;

lbl5: TLabel;

lbl6: TLabel;

Image1: TImage;

lbl9: TLabel;

bvl1: TBevel;

Label9: TStaticText;

Label7: TStaticText;

Label4: TStaticText;

Label6: TStaticText;

Label8: TStaticText;

bvl2: TBevel;

Image2: TImage;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

function f(x,y:double):double;

begin

result:=x*x - y*y;

end;

procedure TForm1.Button1Click(Sender: TObject);

var i: integer;

Y0,Xb,Xe,h: double;

Yi,Xi: double;

Ki1,Ki2,Ki3,Ki4,DeltaYi: double;

Xk,Yk: double;

begin

Y0:=StrToFloat(Edit1.Text);

Xb:=StrToFloat(Edit4.Text); Xe:=StrToFloat(Edit3.Text);

h:=StrToFloat(Edit2.Text);

SG1.Cells[0,0]:='i'; SG1.Cells[1,0]:='Xi'; SG1.Cells[2,0]:='Xi+h/2';

SG1.Cells[3,0]:='Xi+1'; SG1.Cells[4,0]:='Yi';

i:=SG1.RowCount-2;

SG1.RowCount:=SG1.RowCount+1;

Xi:=Xb; Yi:=Y0;

if i=0 then begin

SG1.Cells[0,i+1]:=IntToStr(i); SG1.Cells[1,i+1]:=FloatToStr(Xb);

SG1.Cells[2,i+1]:=FloatToStr(Xb+h/2); SG1.Cells[3,i+1]:=FloatToStr(Xb+h);

SG1.Cells[4,i+1]:=FloatToStr(Y0);

Series1.AddXY(Xb,Y0,'',clRed);

end

else begin

Xi:=StrToFloat(SG1.Cells[1,i])+h; Yi:=StrToFloat(Edit6.Text);

SG1.Cells[0,i+1]:=IntToStr(i); SG1.Cells[1,i+1]:=FloatToStr(Xi);

SG1.Cells[2,i+1]:=FloatToStr(Xi+h/2); SG1.Cells[3,i+1]:=FloatToStr(Xi+h);

SG1.Cells[4,i+1]:=FloatToStr(Yi);

end;

Ki1:=h*f(Xi,Yi);

Xk:=Xi+h/2; Yk:=Yi+Ki1/2;

Ki2:=h*f(Xk,Yk);

Yk:=Yi+Ki2/2;

Ki3:=h*f(Xk,Yk);

Xk:=Xi+h; Yk:=Yi+Ki3;

Ki4:=h*f(Xk,Yk);

DeltaYi:=(Ki1+2*Ki2+2*Ki3+Ki4)/6;

Yi:=Yi+DeltaYi;

Label10.Caption:='Y'+IntToStr(i); Edit6.Text:=FloatToStr(Yi);

Series1.AddXY(Xi,Yi,'',clRed);

if Xi=Xe then Button1.Enabled:=false;

end;

end.