- •1. Постановка задачи
- •2. Формулировка заданий ргр
- •3. Выполнение расчетно-графической работы
- •3.1 Метод Гаусса
- •3.1.1 Листинг
- •3.2 Метод прогонки
- •3.2.1 Листинг
- •3.3 Нелинейное уравнение
- •3.3.1 Листинг
- •3.4 Метод вращения Якоби
- •3.4.1 Листинг
- •3.5. Интерполяционный многочлен
- •3.5.1 Интерполяционный многочлен Лагранжа
- •3.5.1.1 Листинг
- •3.5.2 Интерполяционный многочлен Ньютона
- •3.5.2.1 Листинг
- •3.6 Интерполяция сплайнами
- •3.6.1 Листинг
- •3.7 Метод наименьших квадратов
- •3.7.1 Листинг
- •3.8 Дифференцирование многочленами
- •3.8.1 Листинг
- •3.9 Метод Монте-Карло
- •3.9.1 Листинг
- •3.10 Метод Рунге-Кутты
- •3.10.1 Листинг
- •3.11 Краевая задача
- •3.11.1 Листинг
- •4. Заключение
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.
