You are on page 1of 18

PERSAMAAN DIFERENSIAL BIASA

METNUM 8

Nama

: SANTO

NPM

: 140310080029

Hari & tgl Praktikum : SENIN, 15 NOVEMBER 2009


Jam

: 13.00-15.30 WIB

Asisten

:Andria

LABORATORIUM KOMPUTASI
JURUSAN FISIKA
FMIPA UNPAD

LISTING PROGRAM DAN TAMPILAN

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)

/*PROGRAM PDB EULER B


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 1-t*y;
}

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:

c)

/*PROGRAM PDB EULER C


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 exp(-t)-3*y;
}

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:

2. METODE RUNGE-KUTTA 4

/*PROGRAM PDB RK-4 A


by : SANTO (140310080029)*/

#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");
}

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,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]);
}

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++)
{
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

METODE EULER h=0,01


4.5
4
3.5
3
2.5
2
1.5
1
0.5
0

y = 4.6524e-17.62x

0.02

0.04

0.06

0.08

0.1

0.12

METODE EULER h=0,1


1.6
y = -0.0282x4 + 0.3295x3 - 1.2324x2 + 1.286x + 0.9978

1.4
1.2
y

1
0.8
0.6
0.4
0.2
0
0

3
t

METODE EULER h=0,1


0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0

y = 0.6031e-1.059x

0.1

0.12

2. METODE RUNGE-KUTTA ORDE 4

METODE RK-4 h=0,01


4.5
y = 4.7373e-16.24x

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.

You might also like