Yechish. Oddiy differensial tengamalarni Runge-Kutta usuli bilan DELPHI dasturlash muhitida yechish quyidagi ketma-ketlikda amalgam oshiriladi.
1. Dastur uchun interfeys ishlab chiqiladi. Buning uchun
a) bo’sh forma yaratiladi va uning CAPTION hususiyatini “Oddiy differentsial tenglamalarni yechish” qilib o’rnatamiz ;
b) Formaga oltita LABEL componentasi joylashtiriladi. Ularning CAPTION hususiyatlarini 7.3-rasmdagi kabi moz ravishda “RUNGE-KUTTA usuli”, “Berilgan tenglama ”, “Boshlang’ich shart”, “Oraliq”, “a=”, “b=” tarzida o’rnatamiz.
c) formaga yana 3 ta LABEL komponentalarini joylashtirib, ularning CAPTION hususiyatlarini mos ravishda “Qadamlar soni =”, “x0=”, “y0=” qilib o’zgartiramiz.
d) Hisoblangan natijalarni formaga chiqarish uchun uchta LABEL compo-nenttatalarni joylab, ularning CAPTION hususiyatlarini “№”, “x=”, “y=” tarzida o’rnatamiz.
e) oraliqlarni kiritish uchun EDIT1 va EDIT2, x0 va y0 larni kiritish uchun EDIT3 va EDIT4, oraliqlar sonini ko’rsatish uchun EDIT5 komponentalarini formaga joylashtiramiz. Ularning FONT hususiyatlarini forma o’lcha,lariga mos qilib o’rnatiladi, TEXT hususiyatini esa bo’shatamiz.
f) Formaga ikkita buyruqli tugmalar joylashtiramiz va ularning CAPTION hususiyatlarini mos ravishda “HISOBLASH” hamda “ISHNI YAKUNLASH” shaklida o’zgartiramiz.
g) Formaning o’lchamlarini taxminan kamida 10 ta qiymatlarni chiqarishga mo’ljallaymiz. Zarur hollarda uning o’lchamlarini ekran o’lchami bilan biri hil belgilash mumkin.
Natijada dasturning 8.1-rasmdagi interfeysi hosil bo’ladi.
8.1-rasm. Dastur interfeysi.
Shundan keyin, buyruqli tugmalar uchun hodisalarni qayta ishlagichlarni yozishga o’tamiz. Ularning listingi quyidagicha:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var x, y, x0, y0, y1, a, b, h, k1, k2, k3, k4 : real;
n, i : integer;
begin
x0:=Strtofloat(Edit1.Text);
y0:=Strtofloat(Edit2.Text);
a:=Strtofloat(Edit3.Text);
b:=Strtofloat(Edit4.Text);
n:=Strtoint(Edit5.Text);
h:=(b-a)/n;
x0:=a;
Label10.caption:='0'+#13;
Label11.caption:=Edit1.text+#13;
Label12.caption:=Edit2.text+#13;
for i:=0 to n-1 do begin
x0:=x0+h;
k1:=h*(2*y0*sin(x0)+3*cos(3*x0));
x:=x0+h/2;
y:=y0+h/2*k1;
k2:=h*(2*y*sin(x)+3*cos(3*x));
y:=y0+h/2*k2;
k3:=h*(2*y*sin(x)+3*cos(3*x));
y:=y0+k3;
k4:=h*(2*y*sin(x)+3*cos(3*x));
y1:=y0+(k1+2*k2+2*k3+k4)/6;
Label10.caption:=Label10.caption+Inttostr(i)+#13;
Label11.caption:=Label11.caption+floattostr(x0)+#13;
Label12.caption:=Label12.caption+floattostr(y1)+#13;
y0:=y1;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Close;
end;
end.
Bu dasturni ishga tushirsak, u quyidagi natijani beradi:
Do'stlaringiz bilan baham: |