Breaking News
recent

Range Kutta Integral


Ini merupakan source code untuk Range Kutta dari orde 2,3,4, sampai orde tinggi. Mohon direview dan didiskusikan.



function fungsi(x,y:real):real;

begin

//result:=4*exp(0.8*x)-0.5*y;

result:=(500-4*y)/(300-2*x)

end;

//RK orde 2

procedure TForm1.Button1Click(Sender: TObject);

var

x0,xt,n,i,k:integer;

x,y,k1,k2:array [1..100] of real;

h:real;

begin

x0:=strtoint(edit1.text);

xt:=strtoint(edit2.text);

x[1]:=strtofloat(edit3.text);

y[1]:=strtofloat(edit4.text);

n:=strtoint(edit5.text);

h:=(xt-x0)/n;

for i:=1 to n do

begin

k1[i]:=fungsi(x[i],y[i]);

k2[i]:=fungsi(x[i]+(3*h)/4,y[i]+(3*k1[i]*h)/4);

y[i+1]:=y[i]+(k1[i]/3+(2*k2[i])/3)*h;

x[i+1]:=x[i]+h;

//mengeluarkan pada stringgrid

stringgrid1.cells[0,i]:=inttostr(i);

stringgrid1.cells[1,i]:=floattostr(x[i]);

stringgrid1.cells[2,i]:=floattostr(y[i]);

stringgrid1.Cells[3,i]:=floattostr(k1[i]);

stringgrid1.cells[4,i]:=floattostr(k2[i]);

stringgrid1.cells[5,i]:=floattostr(y[i+1]);

label8.caption:='nilai h sebesar '+floattostr(h)+

' dan hasil integral sebesar = ' + floattostr(y[i+1]);

end;

stringgrid1.cells[0,n+1]:=inttostr(n+1);

stringgrid1.cells[1,n+1]:=floattostr(x[n]+h);

stringgrid1.cells[2,n+1]:=floattostr(y[n+1]);

stringgrid1.RowCount:=n+2;

stringgrid1.ColCount:=6;

//row penamaan

stringgrid1.cells[0,0]:='iterasi';

stringgrid1.cells[1,0]:='x[i]';

stringgrid1.cells[2,0]:='y[i]';

stringgrid1.Cells[3,0]:='k1[i]';

stringgrid1.cells[4,0]:='k2[i]';

stringgrid1.cells[5,0]:='y[i+1]';

end;

//RK orde 3

procedure TForm1.Button2Click(Sender: TObject);

var

x0,xt,n,i,k:integer;

x,y,k1,k2,k3:array [1..100] of real;

h:real;

begin

x0:=strtoint(edit1.text);

xt:=strtoint(edit2.text);

x[1]:=strtofloat(edit3.text);

y[1]:=strtofloat(edit4.text);

n:=strtoint(edit5.text);

h:=(xt-x0)/n;

for i:=1 to n do

begin

k1[i]:=fungsi(x[i],y[i]);

k2[i]:=fungsi( x[i]+(0.5*h) , y[i]+(0.5*h*k1[i]) );

k3[i]:=fungsi( x[i]+h , y[i]-h*k1[i]+2*h*k2[i]);

y[i+1]:=y[i]+ ((k1[i]+4*k2[i]+k3[i])*h) /6;

x[i+1]:=x[i]+h;

//mengeluarkan pada stringgrid

stringgrid1.cells[0,i]:=inttostr(i);

stringgrid1.cells[1,i]:=floattostr(x[i]);

stringgrid1.cells[2,i]:=floattostr(y[i]);

stringgrid1.Cells[3,i]:=floattostr(k1[i]);

stringgrid1.cells[4,i]:=floattostr(k2[i]);

stringgrid1.cells[5,i]:=floattostr(k3[i]);

stringgrid1.cells[6,i]:=floattostr(y[i+1]);

label8.caption:='nilai h sebesar '+floattostr(h)+

' dan hasil integral sebesar = ' + floattostr(y[i+1]);

end;

stringgrid1.cells[0,n+1]:=inttostr(n+1);

stringgrid1.cells[1,n+1]:=floattostr(x[n]+h);

stringgrid1.cells[2,n+1]:=floattostr(y[n+1]);

stringgrid1.RowCount:=n+2;

stringgrid1.ColCount:=7;

//row penamaan

stringgrid1.cells[0,0]:='iterasi';

stringgrid1.cells[1,0]:='x[i]';

stringgrid1.cells[2,0]:='y[i]';

stringgrid1.Cells[3,0]:='k1[i]';

stringgrid1.cells[4,0]:='k2[i]';

stringgrid1.cells[5,0]:='k3[i]';

stringgrid1.cells[6,0]:='y[i+1]';

end;

//RK orde 4

procedure TForm1.Button3Click(Sender: TObject);

var

x0,xt,n,i,k:integer;

x,y,k1,k2,k3,k4:array [1..100] of real;

h:real;

begin

x0:=strtoint(edit1.text);

xt:=strtoint(edit2.text);

x[1]:=strtofloat(edit3.text);

y[1]:=strtofloat(edit4.text);

n:=strtoint(edit5.text);

h:=(xt-x0)/n;

for i:=1 to n do

begin

k1[i]:=fungsi(x[i],y[i]);

k2[i]:=fungsi( x[i]+(0.5*h) , y[i]+(0.5*h*k1[i]) );

k3[i]:=fungsi( x[i]+(0.5*h) , y[i]+(0.5*h*k2[i]) );

k4[i]:=fungsi( x[i]+h , y[i]+k3[i]*h );

y[i+1]:=y[i]+((k1[i]+2*k2[i]+2*k3[i]+k4[i])*h)/6;

x[i+1]:=x[i]+h;

//mengeluarkan pada stringgrid

stringgrid1.cells[0,i]:=inttostr(i);

stringgrid1.cells[1,i]:=floattostr(x[i]);

stringgrid1.cells[2,i]:=floattostr(y[i]);

stringgrid1.Cells[3,i]:=floattostr(k1[i]);

stringgrid1.cells[4,i]:=floattostr(k2[i]);

stringgrid1.cells[5,i]:=floattostr(k3[i]);

stringgrid1.cells[6,i]:=floattostr(k4[i]);

stringgrid1.cells[7,i]:=floattostr(y[i+1]);

label8.caption:='nilai h sebesar '+floattostr(h)+

' dan hasil integral sebesar = ' + floattostr(y[i+1]);

end;

stringgrid1.cells[0,n+1]:=inttostr(n+1);

stringgrid1.cells[1,n+1]:=floattostr(x[n]+h);

stringgrid1.cells[2,n+1]:=floattostr(y[n+1]);

stringgrid1.RowCount:=n+2;

stringgrid1.ColCount:=8;

//row penamaan

stringgrid1.cells[0,0]:='iterasi';

stringgrid1.cells[1,0]:='x[i]';

stringgrid1.cells[2,0]:='y[i]';

stringgrid1.Cells[3,0]:='k1[i]';

stringgrid1.cells[4,0]:='k2[i]';

stringgrid1.cells[5,0]:='k3[i]';

stringgrid1.cells[6,0]:='k4[i]';

stringgrid1.cells[7,0]:='y[i+1]';

end;

//RK orde Tinggi

procedure TForm1.Button4Click(Sender: TObject);

var

x0,xt,n,i,k:integer;

x,y,k1,k2,k3,k4,k5,k6:array [1..100] of real;

h:real;

begin

x0:=strtoint(edit1.text);

xt:=strtoint(edit2.text);

x[1]:=strtofloat(edit3.text);

y[1]:=strtofloat(edit4.text);

n:=strtoint(edit5.text);

h:=(xt-x0)/n;

for i:=1 to n do

begin

k1[i]:=fungsi(x[i],y[i]);

k2[i]:=fungsi( x[i]+h/4 , y[i]+(h*k1[i])/4 );

k3[i]:=fungsi( x[i]+h/4 , y[i]+(h*k1[i])/8+(h*k2[i])/8 );

k4[i]:=fungsi( x[i]+h/2 , y[i]-h*k2[i]*0.5+h*k3[i] );

k5[i]:=fungsi( x[i]+(3*h)/4 , y[i]+(3*h*k1[i])/16+(9*h*k4[i])/16 );

k6[i]:=fungsi( x[i]+h , y[i]-(3*h*k1[i])/7+(2*h*k2[i])/7

+(12*h*k3[i])/7- (12*h*k4[i])/7+(8*h*k5[i])/7 );

y[i+1]:=y[i]+((k1[i]+2*k2[i]+2*k3[i]+k4[i])*h)/6;

x[i+1]:=x[i]+h;

//mengeluarkan pada stringgrid

stringgrid1.cells[0,i]:=inttostr(i);

stringgrid1.cells[1,i]:=floattostr(x[i]);

stringgrid1.cells[2,i]:=floattostr(y[i]);

stringgrid1.Cells[3,i]:=floattostr(k1[i]);

stringgrid1.cells[4,i]:=floattostr(k2[i]);

stringgrid1.cells[5,i]:=floattostr(k3[i]);

stringgrid1.cells[6,i]:=floattostr(k4[i]);

stringgrid1.cells[7,i]:=floattostr(k5[i]);

stringgrid1.cells[8,i]:=floattostr(k6[i]);

stringgrid1.cells[9,i]:=floattostr(y[i+1]);

label8.caption:='nilai h sebesar '+floattostr(h)+

' dan hasil integral sebesar = ' + floattostr(y[i+1]);

end;

stringgrid1.cells[0,n+1]:=inttostr(n+1);

stringgrid1.cells[1,n+1]:=floattostr(x[n]+h);

stringgrid1.cells[2,n+1]:=floattostr(y[n+1]);

stringgrid1.RowCount:=n+2;

stringgrid1.ColCount:=10;

//row penamaan

stringgrid1.cells[0,0]:='iterasi';

stringgrid1.cells[1,0]:='x[i]';

stringgrid1.cells[2,0]:='y[i]';

stringgrid1.Cells[3,0]:='k1[i]';

stringgrid1.cells[4,0]:='k2[i]';

stringgrid1.cells[5,0]:='k3[i]';

stringgrid1.cells[6,0]:='k4[i]';

stringgrid1.cells[7,0]:='k3[i]';

stringgrid1.cells[8,0]:='k4[i]';

stringgrid1.cells[9,0]:='y[i+1]';

end;

No comments:

Powered by Blogger.