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;