Professional Documents
Culture Documents
Listing C PDB
Listing C PDB
METNUM 8
Nama
: SANTO
NPM
: 140310080029
: 13.00-15.30 WIB
Asisten
:Andria
LABORATORIUM KOMPUTASI
JURUSAN FISIKA
FMIPA UNPAD
1. METODE EULER
a)
/*PROGRAM PDB EULER A
by : SANTO (140310080029)*/
#include<stdio.h>
#include<conio.h>
#include<math.h>
void judul()
{
printf("\t\t============\n");
printf("\t\tMETODE EULER\n");
printf("\t\t============\n\n");
}
float df(float t, float y)
{
return -20*y+7*exp(-0.5*t);
}
main()
{
int i,j;
float h[10],t,t1,to,yo,n,y,n_h;
judul();
printf("\nINPUTAN :\n");
printf("---------\n\n");
printf("Masukkan nilai t awal (to)\t: ");scanf("%f",&to);
printf("Masukkan nilai t akhir\t\t: ");scanf("%f",&t1);
printf("Masukkan nilai y awal (yo)\t: ");scanf("%f",&yo);
printf("Masukkan Banyaknya h\t\t: ");scanf("%f",&n_h);
for(j=1;j<=n_h;j++)
{
printf("==>h [%d] : ",j);scanf("%f",&h[j]);
}
printf("\nTABEL DATA :\n");
printf("-----------\n\n");
for(j=1;j<=n_h;j++)
{
t=to;
y=yo;
n=(t1-to)/h[j];
printf(">>h[%d] = %g<<\n",j,h[j]);
printf("================\n");
printf("n\t\tt\t\t\ty\n");
printf("----------------------------------------------------------------\n");
for(i=1;i<=n;i++)
{
y=y+h[j]*df(t,y);
t+=h[j];
printf("%d\t\t%f\t\t%f\n",i,t,y);
}
printf("\n");
printf("====================================================
=============\n");
printf("UNTUK h = %g ==> HASILNYA : %f",h[j],y);
printf("\n\n");
}
getch();
}
TAMPILAN :
b)
#include<stdio.h>
#include<conio.h>
#include<math.h>
void judul()
{
printf("\t\t============\n");
printf("\t\tMETODE EULER\n");
printf("\t\t============\n\n");
}
main()
{
int i,j;
float h[10],t,t1,to,yo,n,y,n_h;
judul();
printf("\nINPUTAN
:\n");
printf("---------\n\n");
for(j=1;j<=n_h;j++)
{
t=to;
y=yo;
n=(t1-to)/h[j];
printf(">>h[%d] = %g<<\n",j,h[j]);
printf("================\n");
printf("n\t\tt\t\t\ty\n");
printf("----------------------------------------------------------------\n");
for(i=1;i<=n;i++)
{
y=y+h[j]*df(t,y);
t+=h[j];
printf("%d\t\t%f\t\t%f\n",i,t,y);
}
printf("\n");
printf("==========================================================
=======\n");
getch();
}
TAMPILAN:
c)
#include<stdio.h>
#include<conio.h>
#include<math.h>
void judul()
{
printf("\t\t============\n");
printf("\t\tMETODE EULER\n");
printf("\t\t============\n\n");
}
main()
{
int i,j;
float h[10],t,t1,to,yo,n,y,n_h;
judul();
printf("\nINPUTAN
:\n");
printf("---------\n\n");
for(j=1;j<=n_h;j++)
{
t=to;
y=yo;
n=(t1-to)/h[j];
printf(">>h[%d] = %g<<\n",j,h[j]);
printf("================\n");
printf("n\t\tt\t\t\ty\n");
printf("----------------------------------------------------------------\n");
for(i=1;i<=n;i++)
{
y=y+h[j]*df(t,y);
t+=h[j];
printf("%d\t\t%f\t\t%f\n",i,t,y);
}
printf("\n");
printf("==========================================================
=======\n");
getch();
}
TAMPILAN:
2. METODE RUNGE-KUTTA 4
#include<stdio.h>
#include<conio.h>
#include<math.h>
void judul()
{
printf("\t\t==================\n");
printf("\t\tRUNGE KUTTA ORDE 4\n");
printf("\t\t==================\n\n");
}
main()
{
int i,j;
float h[10],t,t1,to,yo,n,y,n_h,k1,k2,k3,k4;
judul();
printf("\nINPUTAN
:\n");
printf("---------\n\n");
printf("Masukkan nilai t awal (to)\t: ");scanf("%f",&to);
printf("Masukkan nilai t akhir\t\t: ");scanf("%f",&t1);
printf("Masukkan nilai y awal (yo)\t: ");scanf("%f",&yo);
printf("Masukkan Banyaknya h\t\t: ");scanf("%f",&n_h);
for(j=1;j<=n_h;j++)
{
printf("==>h [%d] : ",j);scanf("%f",&h[j]);
}
for(j=1;j<=n_h;j++)
{
t=to;
y=yo;
n=(t1-to)/h[j];
printf(">>h[%d] = %g<<\n",j,h[j]);
printf("================\n");
printf("n\t\tt\t\t\ty\n");
printf("----------------------------------------------------------------\n");
for(i=1;i<=n;i++)
{
k1=h[j]*df(t,y);
k2=h[j]*df(t+h[j]/2,y+k1/2);
k3=h[j]*df(t+h[j]/2,y+k2/2);
k4=h[j]*df(t+h[j],y+k3);
y=y+(k1+2*k2+2*k3+k4)/6;
t+=h[j];
printf("%d\t\t%f\t\t%f\n",i,t,y);
}
printf("\n");
printf("==========================================================
=======\n");
printf("UNTUK h = %g ==> HASILNYA : %f",h[j],y);
printf("\n\n");
}
getch();
}
TAMPILAN:
GRAFIK:
1. METODE EULER
y = 4.6524e-17.62x
0.02
0.04
0.06
0.08
0.1
0.12
1.4
1.2
y
1
0.8
0.6
0.4
0.2
0
0
3
t
y = 0.6031e-1.059x
0.1
0.12
4
3.5
3
y
2.5
2
1.5
1
0.5
0
0
0.02
0.04
0.06
t
0.08
ANALISA
Pada hasil percobaan persamaan diferensial biasa (PDB) ini, dapat dilihat
bahwa untuk setiap metodenya memiliki solusi yang berbeda. Dimana, melalui
perbandingan data antara kedua metodenya pada PDB
menghasilkan sebuah solusi yang berbeda secara signifikan untuk step (h) iterasi
sebesar 0,01. Dengan metode Euler solusi yang dihasilkan adalah 0.839774,
sedangkan dengan metode Runge Kutta-4 solusinya adalah 0.969581. Terlihat
bahwa metode RK-4 lebih akurat solusinya untuk h=0,01. Hal ini, dapat
dijelaskan dengan perbandingan pada metode Euler pada h=0,001 yang
menghasilkan solusi 0.956956 atau hampir sebanding dengan besarnya solusi
pada metode RK-4 dengan h=0,01.
Oleh karena itu, dapat kita tentukan bahwa untuk persoalan PDB ini,
metode Runge-Kutta 4 lebih akurat hasil solusinya daripada metode Euler.
dimana, tergantung pada pengambilan step (h) iterasi pada penyelesaian secara
numeriknya. Selain itu, untuk membuktikan hasil data pada percobaan ini, telah
disajikan dalam bentuk grafik.
KESIMPULAN
Berdasarkan percobaan ini, dapat kita simpulkan bahwa penyelesaian PDB
(persamaan diferensial biasa) secara numerik berarti menghitung nilai fungsi di
xr+1 = xr + h, dengan h adalah ukuran langkah (step) setiap iterasinya. Selain itu,
dapat kita lihat bahwa metode Runge-Kutta orde 4 lebih akurat hasil solusinya
dibandingkan metode Euler. Hal ini terlihat pada data yang telah disajikan
maupun grafik setiap metodenya.