Diberdayakan oleh Blogger.

Halaman

Poligon Integral

Senin, 12 April 2010


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

begin

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

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

end;

//BUTTON BERISI METODE POLIGON MODIFIKASI

procedure TForm1.Button1Click(Sender: TObject);

var

x0,xt,n,i:integer;

x,y,xstngah,ystngah,xYstngah:array [1..100] of real;

h:real;

begin

x0:=strtoint(edit1.text);

xt:=strtoint(edit2.text);

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

x[2]:=0;

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

n:=strtoint(edit5.text);

h:=(xt-x0)/n;

for i:=1 to n do

begin

ystngah[i]:=y[i]+(fungsi(x[i],y[i])*h)/2;

xstngah[i]:=(x[i+1]+x[i])/2;

xYstngah[i]:=fungsi(xstngah[i],ystngah[i]); //Yi+stngah aksen

y[i+1]:=y[i]+xYstngah[i]*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(fungsi(x[i],y[i]));

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

stringgrid1.cells[5,i]:=floattostr(xYstngah[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;

end;

Heun Integral dengan N korektor

untuk korektor sembarang. Butuh 99 korektor bisa....
he...3x ndak tw bener apa gak, Cek Out.....


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

begin

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

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

end;

//button berisi metode heun dengan n korektor

procedure TForm1.Button1Click(Sender: TObject);

var

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

x,y,teta1,teta2,y0i,yi:array [1..100] of real;

h:real;

begin

stringgrid1.Refresh;

x0:=strtoint(edit1.text);

xt:=strtoint(edit2.text);

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

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

n:=strtoint(edit5.text);

nkorektor:=strtoint(edit6.Text);

h:=(xt-x0)/n;

bar:=0;

for i:=1 to n do

begin

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

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

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

teta2[i]:=fungsi(x[i+1],y0i[i]);

for k:=1 to nkorektor do

begin

bar:=bar+1;

y[i+1]:=y[i]+((teta1[i]+teta2[i])*h)/2;

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

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

teta2[i]:=fungsi(x[i+1],y[i+1]);

end;

bar:=bar+1;

//mengeluarkan pada stringgrid

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

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

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

stringgrid1.Cells[3,bar-nkorektor]:=floattostr(teta1[i]);

stringgrid1.cells[4,bar-nkorektor]:=floattostr(y0i[i]);

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

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

bar:=bar-1;

end;

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

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

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

stringgrid1.RowCount:=bar+2;

end;

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;

Metode Iterasi Jacobi

Sabtu, 03 April 2010

hampir sama dengan iterasi Gauss-Seidel
akan tetapi variable yang diiterasi tidak langsung digunakan.
Berikut codingnya:



Metode Iterasi Jacobi
procedure TForm1.Button1Click(Sender: TObject);
var
n,i,j,k,bar,iterasi,maxit:integer;
a:array [1..100,1..100]of real;
x,xlama,y:array [1..100]of real;
sum,e:real;
begin
n:=stringgrid1.RowCount-1;
maxit:=strtoint(edit2.text);

//memasukkan matrix a dan c
for i:=1 to n do
for j:=1 to n+1 do
begin
a[i,j]:=strtofloat(stringgrid1.cells[j,i]);
end;
//menghitung x[i]
e:=1;iterasi:=0;
while (e>0.001) or (iterasi<>i then
sum:=sum-y[j]*a[i,j];

xlama[i]:=x[i];
x[i]:=sum/a[i,i];
e:=abs((x[i]-xlama[i])/x[i]);
end;
for k:=1 to n do
begin
y[k]:=x[k];
stringgrid2.cells[k,iterasi]:=floattostr(y[k]);
stringgrid2.cells[k,0]:='x'+inttostr(k);
end;

stringgrid2.cells[0,iterasi]:=inttostr(iterasi);
end;
stringgrid2.RowCount:=iterasi+1;
end;



Metode Jacobi pada kasus ini bila dibandingkan dengan metode Gauss-Seidel memberikan hasil kekonvergensian yang berbeda. Pada iterasi kedua Jacobi telah memberikan hasil kekonvergenan yang lebih baik dari pada metode Gauss-Seidel.


Sehingga dapat diambil kesimpulan jika ditinjau dari perbandingan Gauss Seidel dan Jacobi:
1. Jacobi lebih cepat menuju kekonvergenan sedangkan Gauss Seidel relative lambat.
2. Iterasi yang dibatasi membuat Gauss Seidal sering kali tidak konvergen.

Gauss-Seidel Iteration dengan Delphi



disederhanakan menjadi:





Alhamdulillah... Selesai juga tugas dari dosen untuk menjawab soal quiz dengan program... Perjuangan sungguh perjuangan.. Tak ada kesuksesan tanpa pengorbanan..



Bismillah...



Metode Iterasi Gauss Seidel

procedure TForm1.Button1Click(Sender: TObject);



var



n,i,j,k,bar,iterasi,maxit:integer;



a:array [1..100,1..100]of real;



x,xlama:array [1..100]of real;



sum,e:real;



begin



n:=stringgrid1.RowCount-1;



maxit:=strtoint(edit2.text);



//memasukkan matrix a dan c



for i:=1 to n do



for j:=1 to n+1 do



begin



a[i,j]:=strtofloat(stringgrid1.cells[j,i]);



end;



//menghitung x[i]



e:=1;iterasi:=0;



while (e>0.001) or (iterasi<100)>



begin



iterasi:=iterasi+1;



for i:=1 to n do



begin



sum:=a[i,n+1];



for j:=1 to n do



if j<>i then



sum:=sum-x[j]*a[i,j];



xlama[i]:=x[i];



x[i]:=sum/a[i,i];



e:=abs((x[i]-xlama[i])/x[i]);



//mengeluarkan hasil iterasi tiap x



stringgrid2.cells[i,iterasi]:=floattostr(x[i]);



stringgrid2.cells[0,iterasi]:=inttostr(iterasi);



stringgrid2.cells[i,0]:='x'+inttostr(i);



end;



stringgrid2.RowCount:=iterasi+1;



end;



end;

LinkWithin

Related Posts Plugin for WordPress, Blogger...
 

© Copyright Ngidup Buat Ngakhirat 2010 -2011 | Design by Herdiansyah Hamzah | Published by Borneo Templates | Powered by Blogger.com.