Anda di halaman 1dari 41

Praktikum Fisika Komputasi

1




Uraian deret Taylor disekitar xo dinyatakan dengan f(x) yaitu :

=
n
n
x x
n
x f
x f ) (
!
) (
) (
0
0
) (

dimana,

0
) (
0
) (
x x
n
n
n
dx
f d
x f
=
=
) ( ) (
0 0
) 0 (
x f x f =
jika x
0
= 0 maka persamaan tersebut menjadi deret Mac Laurin yaitu :

=
n
n
x
n
f
x f
!
) 0 (
) (
) (

dimana,

0
) (
) 0 (
=
=
x
n
n
n
dx
f d
f
) 0 ( ) 0 (
) 0 (
f f =
Praktikum :
1)Deret MacLaurin dari fungsi sinus yaitu :

...
! 5 ! 3
) sin(
5 3
+ =
x x
x x
Program komputer dari fungsi sinus tersebut jika dinyatakan dalam bahasa Visual C++
adalah :

//*********************************************************
// Menghitung fungsi sinus dengan deret MacLaurin
// Compiler : Visual C++
//*********************************************************
#include <iostream.h>
#include <math.h>
void main()
{
PRAKTIKUM MINGGU 1
D De er re et t T Ta ay yl lo or r


Praktikum Fisika Komputasi

2
double eps=1e-5;
double x,sinx,pem,pen,s,del;
int i,j,m,k,tanda;

cout << "Sudut x (derajat) = ";
cin >> x;
x=x/57.3;
cout << "sin(x) = " << sin ( x); //nilai sinus dari fungsi pustaka Visual C++
del=10;
cout <<endl<<endl;
cout << "Menurut Uraian deret Taylor : "<<endl;
m=0;
while (del > eps)
{
m=m+1;
s=0;
j=0;
for (i=1;i<=2*m-1;i++)
{
if (i%2 ==1 ) // atau if ( fmod(i,2) == 1)
{
j=j+1;
if (j % 2 == 0)
tanda = -1;
else
tanda=1;
pem=1;
pen=1;
for (k=1;k<=i;k++)
{
pem=pem*x;
pen=pen*k;
}
s=s+tanda*pem/pen;
}
}

if (m>1 )
del= fabs(sinx-s);
sinx=s;
}

Praktikum Fisika Komputasi

3
cout << "Jumlah suku = "<<m <<endl;
cout << "sin(x) = " << s <<endl;
}

Latihan :
1. Buatlah program komputer dari deret Mac Laurin untuk fungsi exp(x) :
...
! 3 ! 2
1 ) exp(
3 2
+ + + + =
x x
x x
2. Buatlah program komputer dari deret Mac Laurin untuk fungsi cos(x) :
...
! 6 ! 4 ! 2
1 ) cos(
6 4 2
+ + =
x x x
x

























Praktikum Fisika Komputasi

4



2.1 Metode Newton-Rapshon
Penentuan akar-akar suatu persamaan dapat dicari dengan memakai rumus iterasi
Newton Rapshon yang diturunkan dari uraian deret Taylor. Jika hanya dilibatkan sampai
suku dengan turunan pertama maka akan didapatkan iterasi Newton-Rapshon orde-1
yaitu:


) (
) (
'
1
n
n
n n
x f
x f
x x =
+


sedangkan jika kita melibatkan sampai suku dengan turunan kedua maka akan
menghasilkan iterasi Newton Rapshon orde-2 :


) ( 2
) ( ) (
) (
) (
'
' '
'
1
n
n n
n
n
n n
x f
x f x f
x f
x f
x x

=
+

Praktikum :
1) Program komputer iterasi Newton-Rapshon orde 1, dimana persamaan yang dicari
akarnya adalah :
45 39 11 ) (
2 3
+ = x x x x f

//**********************************************************************************
// Menghitung Akar dari Fungsi dengan Metode Newton Rapshon Orde 1
// Iterasi dibatasi hanya sampai 15 kali iterasi
// Compiler : Visual C++
//**********************************************************************************
#include <iostream.h>
#include <math.h> //header untuk fungsi fabs()
#include <iomanip.h> //header untuk widht,setiosflags,...
void main()
{
double y[100];
double x,fx,dx;
int n;
PRAKTIKUM MINGGU 2
A Ak ka ar r- -a ak ka ar r d da ar ri i P Pe er rs sa am ma aa an n


Praktikum Fisika Komputasi

5
cout <<endl;
cout << "Titik awal xo : ";
cin >> y[0];
cout <<endl<<endl;
//cout <<setprecision(2);
for (n=1; n<=15; n++) //hanya 15 iterasi
{

x=y[n-1];
//*****************************
fx=x*(x*x)-11*(x*x)+39*x-45; //persamaan yg akan dicari akarnya
dx=3*(x*x)-22*x+39; // Nilai turunan pertama dari persamaan
//*****************************
y[n]=x-fx/dx; //rumus Newton Rapshon orde-1
cout.width(15); //tampilkan 15 digit
cout <<setiosflags(ios::left); //rata kiri
cout << n ;
cout.width(15);
cout <<setiosflags(ios::left);

cout <<y[n];
cout.width(15);
cout <<setiosflags(ios::left);
cout <<fabs(y[n]-x) ;
cout <<endl<<endl;
}
}

Dalam program diatas iterasi dibatasi hanya sampai 15 iterasi. Sehingga program akan
berhenti begitu 15 iterasi tercapai. Program berikut ini merupakan modifikasi dari
program diatas dimana iterasi akan berhenti jika selisih antara 2 nilai iterasi yang
berturutan lebih kecil atau sama dengan suatu konstanta ( epsilon). Adapun implementasi
dari program tersebut adalah seperti dibawah ini :

//***********************************************************************
// Menghitung akar dari fungsi dengan Newton Rapshon orde-1
// iterasi dibatasi oleh selisih antar 2 nilai iterasi yg berurutan
// Compiler : Visual C++
//***********************************************************************
#include <iostream.h>

Praktikum Fisika Komputasi

6
#include <math.h>
void main()
{
double eps=1e-5; //konstanta (epsilon)
double y[100];
double x,fx,dx,selisih;
int n;
cout <<endl;
cout << "Titik awal xo : ";
cin >> y[0];
cout <<endl<<endl;
n=0;
selisih = 10;
while (selisih >= eps)
{
n=n+1;
x=y[n-1];
//bentuk berikut dpt berubah sesuai bentuk fungsinya
//*****************************
fx=x*(x*x)-11*(x*x)+39*x-45; //Fungsi yg dicari akarnya
dx=3*(x*x)-22*x+39; //Turunan pertama dari fungsi
//*****************************
y[n]=x-fx/dx; //pers. Metode Newton-Rapshon orde-1
selisih=fabs(y[n]-x); //selisih 2 nilai iterasi yg berurutan
}

cout << "Jumlah iterasi = "<<n <<endl;
cout << "Akar = " << y[n] <<endl;
}

2) Program komputer iterasi Newton-Rapshon orde 2, dimana persamaan yang dicari
akarnya adalah :

45 39 11 ) (
2 3
+ = x x x x f

// **********************************************************************
// Menghitung akar dari fungsi dengan Newton Rapshon orde-2
// iterasi dibatasi oleh selisih antar 2 nilai yg berurutan
// Compiler : Visual C++
// **********************************************************************

Praktikum Fisika Komputasi

7
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
void main()
{
double eps=1e-5;
double y[100];
double x,fx,d1,d2,pen,selisih;
int n;
cout <<endl;
cout << "Titik awal xo : ";
cin >> y[0];
cout <<endl<<endl;
n=0;
selisih = 10;
while (selisih >= eps) //iterasi sampai selisih 2 nilai berurutan <= eps
{
n=n+1;
x=y[n-1];
//bentuk berikut dpt berubah sesuai bentuk fungsinya
//*****************************
fx=x*(x*x)-11*(x*x)+39*x-45; //Fungsi yg dicari akarnya
d1=3*(x*x)-22*x+39; //Turunan pertama dari fungsi
d2=6*x-22; //Turunan kedua dari fungsi
//*****************************
pen=d1-d2*fx/(2*d1);
y[n]=x-fx/pen; //pers. Iterasi Newton-Rapshon orde-2
cout.width(10);
cout << setiosflags(ios::left);
cout << n; //tampilkan iterasi ke-n
cout.width(15);
cout << setiosflags(ios::left);
cout << y[n]; //tampilkan nilai iterasi ke-n
selisih=fabs(y[n]-x); //selisih 2 nilai iterasi yg berurutan
cout.width(15);
cout << setiosflags(ios::left);
cout << selisih;
cout << endl<<endl;
}
cout << "Jumlah iterasi = "<<n <<endl;
cout << "Akar = " << y[n] <<endl;

Praktikum Fisika Komputasi

8
}
Latihan :
1) Buatlah program komputer untuk menghitung persoalan gas ideal. Dimana 1 mole gas
ideal yang suhunya 300
0
K volumenya diperbesar pada suhu tetap. Berapa liter volume
gas tersebut ketika tekanannya 15 atmosfir (tetapan gas universal 0,0823 l.atm/mole
0
K).
Petunjuk :
pV = nRT
Dimana, n=1 mole, R=0.0823 l.atm/mole
0
K, dan T=300
0
K. Sehingga :
p = 24.69/V
untuk menentukan berapa volume gas pada saat tekanannya 15 atmosfir maka persamaan
tersebut akan menjadi :
p = 24.69/V -15
Atau jika p disubstitusi menjadi y dan V menjadi x maka :
y = 24.69/x 15
Dengan menggunakan iterasi Newton-Rapshon maka akan dapat ditentukan solusinya.
Buatlah program komputer dari masalah ini.

2) Buatlah program komputer untuk masalah difraksi pada celah. Dimana suatu celah
dengan lebar 0.4 mm disinari dengan cahaya dengan panjang gelombang 5900 A. Pola
difraksi yang terjadi ditangkap oleh sebuah layar yang jaraknya 70 cm dari celah tsb.
Hitung jarak dari tengah-tengah terang pusat sampai intensitas cahaya tinggal nya.
Petunjuk :
Pola difraksi pada celah dinyatakan dengan :

2
2
0
|
| Sin I
I =
dimana, I
0
intensitas cahaya yang datang dan u | sin
2
1
kb = . Jika kita mensubstitusikan
I/I
0
menjadi y dan | menjadi x maka persamaan tersebut akan menjadi

2
2
sin
x
x
y =
untuk mendapatkan nilai dimana I/I
0
= 0.5 maka persamaan tersebut diubah menjadi :
5 . 0
sin
2
2
=
x
x
y
Dengan memakai iterasi Newton-Rapshon maka solusi persamaan ini akan dapat dicari.
Buatlah programnya!.

Praktikum Fisika Komputasi

9
2.2 Pembagian Sintetik
Penentuan nilai dan turunan dari suatu persamaan (Polinom) dapat ditentukan
dengan cara Pembagian Sintetik. Misalkan polinom orde-n dinyatakan dalam bentuk
persamaan seperti berikut ini :

... ) (
3
2
2
2
1
1
+ + + + =

n
n
n
n
n
n
n
n
x a x a x a x a x f
misal n=3 maka didapatkan polinom orde-3 :


3
2
2
2
1
1
) (

+ + + =
n
n
n
n
n
n
n
n
x a x a x a x a x f
Untuk mencari nilai fungsi dan turunannya pada suatu nilai x tertentu maka dapat
ditentukan dengan Pembagian Sintetik. Adapun caranya adalah :


3 2 1 n n n n
a a a a x
) ( ) ( ) (
2 1
x b x b x b
n n n


3 2 1 n n n n
b b b b
dimana,

n n
a b =
x b a b
n n n
+ =
1 1

x b a b
n n n 1 2 2
+ =
x b a b
n n n 2 3 3
+ =
Nilai
3 n
b merupakan nilai dari fungsi f(x) pada x yang bersangkutan. Sedangkan untuk
menentukan nilai dari turunan dari fungsi f(x) tersebut adalah dengan meneruskan
pembagian sintetik dimana nilai
3 2 1
, , ,
n n n n
a a a a diganti dengan nilai
2 1 ,
,
n n n
b b b .

2 1 n n n
b b b x
) ( ) (
1
x c x c
n n


2 1 n n n
c c c
dimana,

n n
b c =
x c b c
n n n
+ =
1 1

x c b c
n n n 1 2 2
+ =
+
+

Praktikum Fisika Komputasi

10
Nilai dari
2 n
c merupakan nilai turunan dari persamaan f(x) pada x yang bersangkutan.
Sebagai salah satu contoh misalkan kita memiliki persamaan polinom orde 3 yaitu :
45 39 11 ) (
2 3
+ = x x x x f
Jika kita ingin mencari nilai persamaan dan turunannya pada x=2 dengan Pembagian
Sintetik maka hasilnya adalah :
2 1 -11 39 -45
2 -18 42
1 -9 21 -3

2 1 -9 21
2 14
1 -7 7
Jadi didapatkan nilai f(x) pada x=2 adalah 3, sedangkan nilai turunannya adalah 7.
Tugas selanjutnya adalah bagaimana kita membuat program komputer dari
Pembagian Sintetik ini. Adapun implementasi dari program komputer untuk metode
Pembagian Sintetik ini dinyatakan seperti berikut ini :
//*************************************************************
//Menentukan nilai fungsi dan turunan dengan Metode
//pembagian Sintetik
//Compiler : Visual C++
//*************************************************************
#include <iostream.h>
#include <iomanip.h>
void pemsin(double a[100],int n,double x,double b[100]);
void main()
{
double a[100];
double b[100];
double c[100];
double x;
int i,orde;
cout<<"Orde dari polinom = ";
cin >> orde;
for (i=orde; i>=0; i--)
{
cout<< "a"<<i<<" = ";
cin >>a[i]; //input koefisien dari masing-masing suku

Praktikum Fisika Komputasi

11
}
cout <<endl;
cout << "tentukan titik xo : ";
cin >>x;
cout <<endl<<endl;
pemsin(a,orde,x,b); //panggil fungsi pemsin --->pembagian sintetik
for (i=orde;i>=0;i--)
{
if (i!=0 )
{
cout.width(15); //pesan tempat 15 digit
cout<<setiosflags(ios::left); //tampilkan rata kiri
cout<<i;
cout<<setw(15);
cout<<setiosflags(ios::left);
cout<<b[i];
}
else
{
cout<<setw(15);
cout<<setiosflags(ios::left);
cout<<i;
cout<<setw(15);
cout<<setiosflags(ios::left);
cout<<b[i];
cout<<"Nilai Fungsi";
}
cout <<endl;
}
cout<<endl;
pemsin(b,orde,x,c);
for(i=orde;i>=0;i--)
{
if (i!=1)
{
cout<<setw(15);
cout<<setiosflags(ios::left);
cout<<i;
cout<<setw(15);
cout<<setiosflags(ios::left);
cout<<c[i];

Praktikum Fisika Komputasi

12
}
else
{
cout<<setw(15);
cout<<setiosflags(ios::left);
cout<<i;
cout<<setw(15);
cout<<setiosflags(ios::left);
cout<<c[i];
cout<<" Nilai Turunan";
}
cout <<endl;
}
}
void pemsin(double a[100],int n,double x,double b[100])
{
int j;
b[n]=a[n];
for (j=n-1; j>=0; j--)
{
b[j]=a[j]+x*b[j+1];
}
}
Jika metode Pembagian Sintetik ini kita padukan dengan iterasi Newton-Rapshon dalam
penentuan akar-akar persamaan Polinom maka bentuk program komputer dari Iterasi
Newton-Rapshon akan mengalami perubahan seperti di bawah ini :

//******************************************************************************
//Menentukan Akar dari Polinom dengan Newton-Rapshon dimana
//nilai fungsi dan turunan ditentukan dgn metode Pembagian Sintetik
//Compilar : Visual C++
//******************************************************************************
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
void pemsin(double a[100],int n,double x,double b[100]); //deklarasi fungsi
pembagian sintetik
void main()
{
double eps = 1e-5;
double a[100];

Praktikum Fisika Komputasi

13
double b[100];
double c[100];
double y[100];
double x,fx,dx;
int i,n,orde;
cout<<"Orde dari polinom = ";
cin >> orde;
for (i=orde; i>=0; i--)
{
cout<< "a"<<i<<" = ";
cin >>a[i]; //input koefisien dari masing-masing suku
}
cout <<endl;
cout << "tentukan titik awal xo : ";
cin >>y[0];
cout <<endl<<endl;
n=0;
while (fabs(y[n]-x)>=eps)
{
n=n+1;
x=y[n-1];
pemsin(a,orde,x,b);
fx=b[0];
pemsin(b,orde,x,c);
dx=c[1];
y[n]=x-fx/dx;
}
cout << "Jumlah iterasi : "<<n<<endl;
cout << "Akar : "<<y[n];
cout <<endl;
}
void pemsin(double a[100],int n,double x,double b[100])
{
int j;
b[n]=a[n];
for (j=n-1; j>=0; j--)
{
b[j]=a[j]+x*b[j+1];
}
}
Latihan :

Praktikum Fisika Komputasi

14
1) Buatlah program komputer untuk menyelesaikan masalah gerak peluru. Dimana sebuah
peluru ditembakkan dengan kecepatan awal V
0
= 100 m/s dan sudut elevasi o = 45
0
. Per
cepatan grafitasi g = 9,8 m/dt
2
.Tentukan berapa jauh peluru akan melayang di udara.
Petunjuk :
Persamaan lintasan peluru dinyatakan dengan :
x x
v
g
y ) (tan
) cos ( 2
2
2
0
o
o
+ =
atau bisa ditulis menjadi polinom orde-2 yaitu :
x x a y + =
2
2

dimana,

1 3
2
0
2
10 . 1
) cos ( 2

= = m
v
g
a
o

1 tan
1
= = o a
0
0
= a
Dengan memakai iterasi Newton-Rapshon yang dikombinasikan dengan metode
pembagian Sintetik maka solusi permasalahan diatas akan dapat dicari. Buat program
komputernya.


















Praktikum Fisika Komputasi

15

I II II I I IN NT TE EG GR RA AL L D DA AN N T TU UR RU UN NA AN N

3.1 INTEGRAL
Nilai Integral I dari suatu fungsi f(x) menyatakan luas bidang dibawah fungsi f(x)
antara x=a dan x=b atau ditulis :

}
=
b
a
dx x f I ) (
Ada beberapa metode yang dapat dipakai untuk menghitung integral diantaranya : metode
persegi panjang, metode trapesium, metode Simpson, metode Romberg dll. Berikut ini
akan dijelaskan beberapa metode tersebut.

3.1.1 Metode Persegi Panjang
Dalam metode ini luas bidang dibawah kurva f(x) antara x = a dan x = b dapat
dicari dengan membagi bidang tersebut menjadi n buah pita yang berbentuk persegi
panjang, yang panjangnya f(x
i
) dan lebarnya x A , sehingga










luas masing-masing pita dapat dinyatakan :
x x f L
i i
A = A ) (
Karena antara x = a dan x = b terdapat n buah pita maka luas seluruhnya menjadi :

=
A =
n
i
x xi f L
1
) (

3.1.2 Metode Trapesium
f(x)
a b
y
x
Gambar 3.1 Metode Persegi Panjang
Pita ke-1
Pita ke-n
Pita ke-i
x A
PRAKTIKUM MINGGU 3
I In nt te eg gr ra al l d da an n T Tu ur ru un na an n


Praktikum Fisika Komputasi

16
Dalam metode trapesium ini luas bidang di bawah fungsi f(x) antara x = a dan x =
b dapat dicari dengan membagi bidang antara x = a dan x = b menjadi n buah pita yang
berbentuk trapesium yang masing-masing lebarnya x A seperti diperlihatkan dalam
gambar 3.2 .












Dari gambar 3.2 maka luas pita ke-i adalah :
)] ( ) ( [
2
1
1 +
+ A =
i i i
x f x f x A
Sehingga untuk n buah pita maka luas seluruhnya menjadi :
)] ( ) ( [
2
1
... )] ( ) ( [
2
1
)] ( ) ( [
2
1
1 3 2 2 1 +
+ A + + + A + + A =
n n
x f x f x x f x f x x f x f x A
karena f(x
1
) = f(a) dan f(x
n+1
) = f(b) maka persamaan tersebut menjadi :
)] ( ) ( 2 ... ) ( 2 ) ( 2 ) ( 2 ) ( [
2
1
4 3 2
b f x f x f x f x f a f x A
n
+ + + + + + A =
PRAKTIKUM :
1) Membuat program komputer untuk menghitung integral dengan metode Trapesium.
Dimana fungsi yang akan dicari integralnya adalah :
f(x) = 6 6x
5

Adapun program komputernya adalah seperti berikut ini :

//*******************************************************
//Menghitung integral dengan metode Trapesium
//Compiler : Visual C++
//*******************************************************
f(x)
a b
y
x
Gambar 3.2 Metode Trapesium
x A
x
i
x
i+1
f(x
i
) f(x
i+1
)
Pita ke-i
Pita ke-1
Pita ke-n

Praktikum Fisika Komputasi

17
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
void main()
{
double eps=1e-5;
double trap[100];
double x,x1,x2,delt,delx,pita,fx;
int i;
cout << " Batas bawah : ";
cin >>x1;
cout << " Batas Atas : ";
cin >>x2;
cout <<endl<<endl;
i=0;
delt=100; //delt = selisih antara 2 hasil integral(iterasi) yg berurutan
while (fabs(delt)>eps) //iterasi selama delt lebih besar dari eps
{
i=i+1;
trap[i]=0;
x=x1;
pita=pow(2,i-1); //2^i-1 (pow = pangkat)
delx=(x2-x1)/pita; //pita= jumlah pita
while (x<x2) //delx=lebar masing-masing pita;
{
//***************************
fx=6-6*pow(x,5); //bentuk pers. 6-6x^5
//***************************
//fx=fabs(x); //contoh : pers. garis y=x
//fx=1/x ; //contoh : pers. flux magnet pada kawat berarus
if (x==x1 || x==x2)
trap[i]=trap[i]+fx;
else
trap[i]=trap[i]+2*fx;
x=x+delx;
}
trap[i]=trap[i]*delx/2;
if (i==1)
{
cout<<setw(10); //10 lokasi digit
cout<<setiosflags(ios::left); //rata kiri

Praktikum Fisika Komputasi

18
cout<< pita;
cout<<setw(15);
cout<<setiosflags(ios::left);
cout<< trap[i];
}
else
{
delt=trap[i]-trap[i-1];
cout<<setw(10);
cout<<setiosflags(ios::left);
cout<<pita;
cout<<setw(15);
cout<<setiosflags(ios::left);
cout<<trap[i];
cout<<setw(15);
cout<<setiosflags(ios::left);
cout<<delt;
}
cout<<endl;
}
cout <<endl<<endl;
cout<<"Harga Integrasi : "<<trap[i];
cout <<endl<<endl;
}

Coba jalankan program tersebut dengan batas-batas integral x=0 dan x=1. Bagaimanakah
hasilnya.Jika programnya benar anda akan mendapatkan hasil integrasi = 4.99999761
Latihan :
1) Buatlah program komputer untuk menghitung integral dari fungsi :
f(x) = 4
Eksekusi program tersebut dengan memasukkan batas-batas integrasi x = 0 dan x = 5. Jika
programnya benar maka akan didapatkan hasil integrasi = 20. Program ini mengandung
arti yaitu kita mencari luas segi empat dengan panjang 5 dan lebar 4.




x
f(x)
f(x) = 4 4
0 5

Praktikum Fisika Komputasi

19

2) Coba buat program komputer untuk menghitung integral dari fungsi :
f(x) = 1/x
Coba eksekusi program tersebut dengan batas-batas integrasi adalah x=0.01 dan x=0.09.
Jika programnya benar maka anda akan mendapatkan harga integrasi = 2.19723

3.1.3 Metode Simpson
Jika pada metode Persegi panjang dan Trapesium kita menggunakan kurva yang
berbentuk garis lurus maka pada metode Simpson kita akan memakai kurva yang
berbentuk parabola atau polinom orde dua :
f(x) = a
2
x
2
+ a
1
x + a
0
Untuk menurunkan rumus integrasi maka dimisalkan x
i+1
ditempatkan di x = 0, x
i
ditempatkan di x = -Ax dan x
i+2
di x = Ax. Sehingga nilai integral di bawah kurva f(x)
yaitu :
dx a x a x a A
x
x
i
}
A
A
+
+ + = ) (
0 1
2
2 1

selanjutnya dengan penurunan secara matematik akan didapatkan bahwa :
)] ( ) ( 4 ( [
3
1
2 1 1 + + +
+ + A =
i i i i
x f x f x f x A
Maka luas semua pasangan pita adalah :
)] ( ) ( 4 ( [
3
1
3 2 1
x f x f x f x A + + A =
... )] ( ) ( 4 ( [
3
1
5 4 3
+ + + A + x f x f x f x
)] ( ) ( 4 ( [
3
1
1 2 n n n
x f x f x f x + + A +


atau
... ) ( 4 ) ( 4 ) ( 4 ) ( [
3
1
8 6 2 1
+ + + + A = x f x f x f x f x A
)] ( ... ) ( 2 ) ( 2 ) ( 2
7 5 3 n
x f x f x f x f + + + + +
PRAKTIKUM :
1) Membuat program komputer untuk menghitung integral dengan metode Simpson.
Dimana fungsi yang akan dicari integralnya adalah :
f(x) = 6 6x
5

Adapun program komputernya adalah seperti berikut ini :

Praktikum Fisika Komputasi

20
//*******************************************************
//Menghitung integral dengan metode Simpson
//Compiler : Visual C++
//*******************************************************
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
void main()
{
double eps=1e-5;
double simp[100];
double x,x1,x2,delt,delx,pita,fx;
int i,j;
cout << " Batas bawah : ";
cin >>x1;
cout << " Batas Atas : ";
cin >>x2;
cout <<endl<<endl;
i=0;
delt=100; //delt = selisih antara 2 hasil integral(iterasi) yg berurutan
while (fabs(delt)>eps) //iterasi selama delt lebih besar dari eps
{
i=i+1;
j=0;
simp[i]=0;
x=x1;
pita=2*pow(2,i-1); //2^i-1 (pow = pangkat)
delx=(x2-x1)/pita; //pita= jumlah pita
while (x<x2) //delx=lebar masing-masing pita;
{
//***************************
fx=6-6*pow(x,5); //contoh : bentuk pers. 6-6x^5
//***************************
//fx=fabs(x); //contoh : pers. garis y=x
//fx=1/x ; //contoh : pers. flux magnet pada kawat berarus
j=j+1;
if (x==x1 || x==x2)
simp[i]=simp[i]+fx;
else
{
if (x>x1 && x<x2 && j % 2 ==0) //suku genap

Praktikum Fisika Komputasi

21
simp[i]=simp[i]+4*fx;
if (x>x1 && x<x2 && j % 2 ==1) //suku ganjil
simp[i]=simp[i]+2*fx;
}
x=x+delx;
}
simp[i]=simp[i]*delx/3;
if (i==1)
{
cout<<setw(10); //10 lokasi digit
cout<<setiosflags(ios::left); //rata kiri
cout<< pita;
cout<<setw(15);
cout<<setiosflags(ios::left);
cout<< simp[i];
}
else
{
delt=simp[i]-simp[i-1];
cout<<setw(10);
cout<<setiosflags(ios::left);
cout<<pita;
cout<<setw(15);
cout<<setiosflags(ios::left);
cout<<simp[i];
cout<<setw(15);
cout<<setiosflags(ios::left);
cout<<delt;
}
cout<<endl;
}
cout <<endl<<endl;
cout<<"Harga Integrasi : "<<simp[i];
cout <<endl<<endl;
}

Latihan :
1) Coba buat program yang sama seperti pada latihan untuk metode Trapesium.
Bandingkan hasilnya.


Praktikum Fisika Komputasi

22



3.2 TURUNAN
Uraian deret Taylor di sekitar x dinyatakan dengan f(x+h) dan f(x-h). Dimana
masing-masing dinyatakan dengan persamaan :
... ) (
6
1
) (
2
1
) ( ) ( ) (
' ' ' 3 ' ' 2 '
+ + + + = + x f h x f h x hf x f h x f
... ) (
6
1
) (
2
1
) ( ) ( ) (
' ' ' 3 ' ' 2 '
+ + = x f h x f h x hf x f h x f
Jika kita mengambil selisih antara kedua persamaan tersebut maka akan didapatkan :
... ) (
6
1
2
) ( ) (
) (
' ' ' 2 '

+
= x f h
h
h x f h x f
x f
jika kita mengambil h yang sangat kecil maka suku-suku dengan h pangkat 2 atau lebih
bisa diabaikan. Sehingga akan didapatkan persamaan Turunan Pertama dari suatu fungsi
f(x) yaitu :


h
h x f h x f
x f
2
) ( ) (
) (
'
+
=

Untuk mendapatkan Turunan Kedua dari fungsi f(x) maka kita menjumlahkan kedua
persamaan f(x+h) dan f(x-h). Sehingga didapatkan persamaan yaitu :

... ) (
12
1 ) ( ) ( 2 ) (
) (
2
2
' '

+ +
= x f h
h
h x f x f h x f
x f
iv


Bila h sangat kecil maka suku dengan h pangkat 2 atau lebih bisa diabaikan. Sehingga
akan didapatkan persamaan Turunan Kedua dari f(x) yaitu :


2
' '
) ( ) ( 2 ) (
) (
h
h x f x f h x f
x f
+ +
=
Kedua metode untuk mencari turunan diatas disebut dengan metode Beda Sentral.
PRAKTIKUM :
1) Membuat program komputer untuk menghitung Turunan Pertama dari fungsi. Dimana
fungsi yang dicari turunannya adalah :
PRAKTIKUM MINGGU 4
I In nt te eg gr ra al l d da an n T Tu ur ru un na an n ( (l la an nj ju ut ta an n) )


Praktikum Fisika Komputasi

23
f(x) = x
2
5x
Adapun implementasi program komputernya adalah seperti berikut ini :

//***********************************************************************************
//Menghitung Turunan pertama suatu fungsi dengan metode beda sentral
//compiler : Visual C++
//***********************************************************************************
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
void main()
{
double eps=1e-5;
double z[10];
double fx,del,dx,zz,x,y,h;
int i,n;

cout << " Masukkan nilai x : ";
cin >>y;
cout <<endl<<endl;
h=1;
n=0;
zz=0;
del=10;

while (fabs(del)>=eps) //iterasi selama del lebih besar dari eps
{
n+=1;
for (i=1;i<=2;i++)
{
if (i==1)
x=y+h;
else
x=y-h;

//fx=9.8*68.1*(1-exp(-12.5*x/68.1));
//fx=fx/12.5;
//*****************
fx=x*x-5*x; //fungsi yang dicari turunannya : x^2 - 5x
//*****************
z[i]=fx;
}
dx=(z[1]-z[2])/(2*h);
del=zz-dx;
cout.width(15);
cout<<h;
cout.width(15);
cout<<dx;
cout.width(15);
cout<<del;
cout<<endl;
zz=dx;
h=h/10;
}
cout<<endl;
cout<<"Jumlah iterasi : "<<n<<endl;
cout<<"Turunan pertama dari f(x) : "<<dx;
cout<<endl;
}

Praktikum Fisika Komputasi

24
Coba jalankan (eksekusi) program tersebut. Jika anda masukkan nilai x =1 maka akan
didapatkan hasil turunan pertama adalah 3. Cobalah untuk memasukkan nilai x yang lain
dan lihat hasilnya. Bandingkan dengan perhitungan secara manual.
2) Membuat program komputer untuk menghitung Turunan kedua dari fungsi. Dimana
fungsi yang dicari turunannya adalah :
f(x) = x
3
5x
Adapun implementasi program komputernya adalah seperti berikut ini :
//******************************************************************
//Menghitung Turunan pertama suatu fungsi dengan metode beda sentral
//compiler : Visual C++
//******************************************************************
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
void main()
{
double eps=1e-5;
double z[10];
double fx,del,dx,zz,x,y,h;
int i,n;
cout << " Masukkan nilai x : ";
cin >>y;
cout <<endl<<endl;
h=1;
n=0;
zz=0;
del=10;
while (fabs(del)>=eps) //iterasi selama del lebih besar dari eps
{
n+=1;
for (i=1;i<=3;i++)
{
switch(i)
{
case (1):
{
x=y+h;
break;
}
case(2):
{
x=y;
break;
}
case(3):
{
x=y-h;
break;
}
}

//fx=9.8*68.1*(1-exp(-12.5*x/68.1));
//fx=fx/12.5;
//*****************
fx=x*x*x-5*x; //fungsi yang dicari turunannya : x^3 - 5x
//*****************

Praktikum Fisika Komputasi

25
z[i]=fx;
}
dx=(z[1]-2*z[2]+z[3])/(h*h);
del=zz-dx;
cout.width(15);
cout<<h;
cout.width(15);
cout<<dx;
cout.width(15);
cout<<del;
cout<<endl;
zz=dx;
h=h/10;
}
cout<<endl;
cout<<"Jumlah iterasi = "<<n<<endl;
cout<<"Turunan kedua dari f(x) = "<<dx;
cout<<endl;
}

Coba jalankan (eksekusi) program tersebut. Jika anda masukkan nilai x =2 maka akan
didapatkan hasil turunan pertama adalah 12. Cobalah untuk memasukkan nilai x yang lain
dan lihat hasilnya. Dan bandingkan dengan perhitungan secara manual.
Latihan :
1) Coba buat program komputer untuk menentukan turunan pertama dari suatu masalah
penerjun payung Dimana diketahui persamaan laju penerjun payung setelah payungnya
mengembang adalah :
] 1 [ ) (
/ m ct
e
c
gm
t v

=
dimana g = 9.8 ms
-2
, massa penerjun m = 68.1 kg, hambatan oleh udara c = 12.5 kg.s
-1
.
Ditanyakan berapa percepatan penerjun payung pada saat t = 10 s.
2) Coba buat program komputer untuk menentukan turunan kedua dari suatu masalah
penerjun payung Dimana diketahui persamaan laju penerjun payung setelah payungnya
mengembang adalah :
] 1 [ ) (
/ m ct
e
c
gm
t v

=
dimana g = 9.8 ms
-2
, massa penerjun m = 68.1 kg, hambatan oleh udara c = 12.5 kg.s
-1
.
Ditanyakan berapa percepatan penerjun payung pada saat t = 10 s.







Praktikum Fisika Komputasi

26



4.1 Solusi Persamaan Diferensial dengan syarat awal
Misalkan kita memiliki persamaan diferensial seperti di bawah ini :
0
2
2
= + + km
dt
dx
r
dt
x d
m
secara analisis maka solusi dari persamaan tersebut adalah :
km r untuk t Ae x
t
4 , ) sin(
0
< + =

u e
o

km r untuk e t B B x
t
4 , ) (
2 1
= + =
|

km r untuk e C e C x
t t
4 ,
2 1
2 1
> + =


Sedangkan secara numerik kita tidak akan mendapatkan solusi seperti diatas, tetapi kita
akan mencari solusi pada suatu waktu tertentu. Sehingga diperlukan suatu syarat awal
agar solusi dapat dicari yaitu misalkan pada waktu mula-mula solusi melalui suatu titik
tertentu. Syarat semacam ini diperlukan karena solusi persamaan diferensial dapat
berbeda-beda karena adanya suatu konstanta. Andaikan kita mempunyai persamaan
diferensial :
5 4 ) (
'
+ = x x f
solusi secara analisis matematik dari persamaan ini adalah :
5 4
) (
+ = x
dx
x df


}
+ + = + = C x x dx x x f 5 2 5 4 ) (
2

dapat dilihat bahwa solusinya tidak hanya satu tetapi tergantung dari nilai C. Sedangkan
solusi secara numerik kita menentukan suatu syarat awal terhadap fungsi tersebut
misalnya bahwa solusi persamaan tersebut melalui titik (1,1). Sehingga akan didapatkan
hanya sebuah solusi yaitu :
6 5 2 ) (
2
+ = x x x f
misal kita masukkan nilai x = 2 maka solusi dari persamaan diferensial tersebut adalah :
12 ) 2 ( = f
Jadi dapat disimpulkan bahwa solusi dari persamaan diferensial 5 4 ) (
'
+ = x x f di x = 2
dan syarat awal (1,1) adalah 12. Ada beberapa metode yang dapat diterapkan untuk
mencari solusi dari persamaan diferensial yaitu : metode Euler, Runge-Kutta dll.
4.2 Metode Euler
PRAKTIKUM MINGGU 5
P Pe er rs sa am ma aa an n D Di if fe er re en ns si ia al l B Bi ia as sa a


Praktikum Fisika Komputasi

27
Solusi persamaan diferensial biasa dengan syarat awal dapat dilakukan dengan
meninjau uraian deret Taylor dari f(x+h) disekitar x yaitu :
h x f x f h x f ) ( ) ( ) (
'
+ = +
dimana persamaan diferensial biasa dapat ditulis menjadi :
) , ( ) (
'
y x f x f =
sehingga persamaan diatas menjadi :
h y x f x f h x f ) , ( ) ( ) ( + = +
persamaan ini bisa ditulis dalam bentuk iterasi :
h y x f y y
i i
) , (
1
+ =
+

persamaan ini sering disebut dengan iterasi Euler orde 1. Jika kita menentukan syarat
awal adalah titik (x
0
,y
0
) dan kita menginginkan solusi persamaan diferensial di titik x
p

maka kita harus membagi selang antara x
0
dan x
p
menjadi n buah pita yang masing-
masing lebarnya h sehingga diperoleh titik-titik x
0
, x
1
, x
2
, x
p
.
Dari syarat awal yaitu titik (x
0
,y
0
) maka dengan rumus iterasi Euler kita dapat
menentukan y
1
dengan absis x
1
= x
0
+ h. Selanjutnya dari titik (x
1
,y
1
) kita dapat
menentukan y
2
dengan absis x
2
= x
1
+ h. Demikian seterusnya sampai didapatkan y
p
yang
absisnya adalah x
p
. Dengan demikian nilai y
p
merupakan solusi dari persamaan diferensial
pada titik x
p.

PRAKTIKUM :
1) Membuat program komputer untuk mencari solusi persamaan diferensial biasa dengan
iterasi Euler orde-1. Dimana bentuk persamaan diferensial yang dicari solusinya adalah :
f

(x) = 4x+5
Adapun implementasi program komputernya adalah seperti berikut ini :
//****************************************************************************
//Menghitung Persamaan Diferensial dengan metode Euler orde satu
//compiler : Visual C++
//****************************************************************************
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
void main()
{
double eps=1e-3;
double x,x1,x2,y,y1,y2,fx,delx,delt,pita;
int n;
cout << " Masukkan titik awal (xo,yo) : "; //masukkan nilai xo <spasi> yo
cin >>x1>>y1;
cout << " Masukkan titik akhir (x) : ";
cin >>x2;
cout <<endl<<endl;
n=0;
delt=100;

Praktikum Fisika Komputasi

28
while (fabs(delt)>eps) //iterasi selama delt lebih besar dari eps
{
n+=1;
pita=pow(2,n); //2^n
delx=(x2-x1)/pita;
x=x1;
y=y1;
while (x<x2)
{
//*************************
//fx=y;
fx=4*x+5;
//*************************
y=y+fx*delx; //iterasi Euler orde-1
x=x+delx;
}
if (n==1)
{
cout.width(15);
cout<<pita;
cout.width(15);
cout<<y;
}
else
{
delt=y-y2;
cout.width(15);
cout<<pita;
cout.width(15);
cout<<y;
cout.width(15);
cout<<delt;
}
cout<<endl;
y2=y;
}
cout<<"Nilai Fungsi di "<<x2<<" adalah : "<<y;
cout<<endl;
}

Coba jalankan program tersebut dan berikan masukan syarat awal (x
0
,y
0
) = (1 1), serta
berikan masukan untuk nilai x = 2. Jika programnya berjalan dengan benar maka anda
akan mendapatkan output berupa nilai fungsi di x = 2 adalah 11.999.
Dari uraian deret Taylor untuk f(x+h), jika kita menyertakan suku-suku dengan h
pangkat 2 maka akan didapatkan persamaan :

2
) , ( '
2
1
) , ( ) ( ' h y x f h y x f h x f + = +
persamaan ini dapat dinyatakan dalam bentuk iterasi :

2
1
) , ( '
2
1
) , ( h y x f h y x f y y
i i
+ + =
+

Persamaan ini disebut sebagai iterasi Euler orde 2.
PRAKTIKUM :

Praktikum Fisika Komputasi

29
1) Membuat program komputer untuk mencari solusi persamaan diferensial biasa dengan
iterasi Euler orde-2. Dimana bentuk persamaan diferensial yang dicari solusinya adalah :
f

(x) = 4x+5
Adapun implementasi program komputernya adalah seperti berikut ini :
//***************************************************************************
//Menghitung Persamaan Difrensial dengan metode Euler orde dua
//compiler : Visual C++
//***************************************************************************
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
void main()
{
double eps=1e-3;
double x,x1,x2,y,y1,y2,fx,dx,delx,delt,pita;
int n;

cout << " Masukkan titik awal (xo,yo) : "; //masukkan nilai xo <spasi> yo
cin >>x1>>y1;
cout << " Masukkan titik akhir (x) : ";
cin >>x2;
cout <<endl<<endl;
n=0;
delt=100;

while (fabs(delt)>eps) //iterasi selama delt lebih besar dari eps
{
n+=1;
pita=pow(2,n); //2^n
delx=(x2-x1)/pita;
x=x1;
y=y1;
while (x<x2)
{ //************************
//fx=y; //bentuk fungsi
//dx=y; //turunan
fx=4*x+5;
dx=4;
//*************************
y=y+fx*delx+pow(delx,2)/2; //iterasi Euler orde 2
x=x+delx;
}
if (n==1)
{
cout.width(15);
cout<<pita;
cout.width(15);
cout<<y;
}
else
{
delt=y-y2;
cout.width(15);
cout<<pita;
cout.width(15);
cout<<y;
cout.width(15);
cout<<delt;

Praktikum Fisika Komputasi

30
}
cout<<endl;
y2=y;
}
cout<<"Nilai Fungsi di x= "<<x2<<" adalah : "<<y;
cout<<endl;
}
Coba jalankan program tersebut dan berikan masukan syarat awal (x
0
,y
0
) = (1 1), serta
berikan masukan untuk nilai x = 2. Jika programnya berjalan dengan benar maka anda
akan mendapatkan output berupa nilai fungsi di x = 2 adalah 11.9993.




























Praktikum Fisika Komputasi

31



4.3 Metode Runge-Kutta
Persamaan umum iterasi Runge-Kutta adalah :
) , , (
1
h y x f y y
n n n n
+ =
+

dimana

m m n n
k a k a k a h y x f + + + = ... ) , , (
2 2 1 1


n n
x x h =
+1

dengan
) , (
1 n n
y x hf k =

1 11 1 2
, ( k q y h p x hf k
n n
+ + =
) , (
2 22 1 21 2 3
k q k q y h p x hf k
n n
+ + + =
... ... ...

1 1 , 1 2 2 , 1 1 1 , 1 1
... , (

+ + + + + =
m m m m m n m n m
k q k q k q y h p x hf k
4.3.1 Runge-Kutta orde 1
Jika diambil m = 1 maka akan menghasilkan iterasi Runge-Kutta orde 1 yaitu :

1 1 1
k a y y
n n
+ =
+

) , (
1 1 n n n n
y x hf a y y + =
+
1
karena
1 1
) , , ( k a h y x f
n n
= dan ) , (
1 n n
y x hf k = . Dengan mengambil 1
1
= a maka persamaan
ini sama dengan persamaan iterasi Euler orde-1.
4.3.1 Runge-Kutta orde 2
Jika diambil m = 2 maka akan memberikan iterasi Runge-Kutta orde 2 yaitu :

2 2 1 1 1
k a k a y y
n n
+ + =
+

dimana
) , (
1 n n
y x hf k =
) , (
1 11 1 2
k q y h p x hf k
n n
+ + =
jadi dalam hal ini kita perlu menentukan nilai-nilai dari
11 1 2 1
dan , , , q p a a . Dengan
melakukan perhitungan matematis maka didapatkan nilai dari konstanta tersebut seperti
dijelaskan di bawah ini.
a) Metode Heun
PRAKTIKUM MINGGU 6
P Pe er rs sa am ma aa an n D Di if fe er re en ns si ia al l B Bi ia as sa a ( (l la an nj ju ut ta an n) )


Praktikum Fisika Komputasi

32
Dalam metode ini diambil nilai dari konstanta :
2
1
2 1
= = a a
1
11 1
= = q p
Sehingga persamaan iterasi Runge-Kutta orde 2 menjadi :

2 2
1
1 2
1
1
k k y y
n n
+ + =
+

dimana
) , (
1 n n
y x hf k =
) , (
1 2
k y h x hf k
n n
+ + =
b) Metode Raltson
Dalam metode ini diambil nilai dari konstanta :
3
1
1
= a
3
2
2
= a
4
3
11 1
= = q p
Sehingga persamaan iterasi Runge-Kutta orde 2 menjadi :
) 2 (
2 1 3
1
1
k k y y
n n
+ + =
+

dimana
) , (
1 n n
y x hf k =
) , (
1 4
3
4
3
2
k y h x hf k
n n
+ + =
c) Metode Poligon
Dalam metode ini diambil nilai dari konstanta :
0
1
= a 1
2
= a
2
1
11 1
= = q p
Sehingga persamaan iterasi Runge-Kutta orde 2 menjadi :

2 1
k y y
n n
+ =
+

dimana
) , (
1 n n
y x hf k =
) , (
1 2
1
2
1
2
k y h x hf k
n n
+ + =

PRAKTIKUM :
1) Membuat program komputer untuk mencari solusi persamaan diferensial biasa dengan
iterasi Runge-Kutta orde 2 berdasarkan metode Heun. Dimana bentuk persamaan
diferensial yang dicari solusinya adalah :
f

(x) = 4x+5

Praktikum Fisika Komputasi

33
Adapun implementasi program komputernya adalah seperti berikut ini :
//********************************************************************************************
//Menghitung Persamaan Diferensial dengan metode Runge-kutta orde dua-Heun
//compiler : Visual C++
//********************************************************************************************
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
void main()
{
double eps=1e-3;
double k[4];
double xx,x,x1,x2,yy,y,y1,y2,fx,delx,delt,pita;
int i,n;

cout << " Masukkan titik awal (xo,yo) : "; //masukkan nilai xo <spasi> yo
cin >>x1>>y1;
cout << " Masukkan titik akhir (x) : ";
cin >>x2;
cout <<endl<<endl;
n=0;
delt=100;

while (fabs(delt)>eps) //iterasi selama delt lebih besar dari eps
{
n+=1;
pita=pow(2,n); //2^n
delx=(x2-x1)/pita;
xx=x1;
yy=y1;
while (xx<x2)
{
x=xx;
y=yy;
for (i=1;i<=2;i++)
{
//************************
//fx=y; //bentuk fungsi

fx=4*x+5;

//fx=1-exp(-12.5*x/68.1);
//fx=fx*9.8*68.1/12.5;
//*************************
k[i]=delx*fx;
if (i==1)
{
x=xx+delx;
y=yy+k[i];
}
} //for
xx=xx+delx;
yy=yy+(k[1]+k[2])/2;
} //while
if (n==1)
{
cout.width(15);
cout<<pita;
cout.width(15);
cout<<yy;
}

Praktikum Fisika Komputasi

34
else
{
delt=yy-y2;
cout.width(15);
cout<<pita;
cout.width(15);
cout<<yy;
cout.width(15);
cout<<delt;
}
cout<<endl;
y2=yy;
} //while
cout<<"Nilai Fungsi di x= "<<x2<<" adalah : "<<yy;
cout <<endl;
cout<<"Banyaknya iterasi = "<<n;
cout<<endl;
}
Coba jalankan program tersebut dan berikan masukan syarat awal (x
0
,y
0
) = (1 1), serta
berikan masukan untuk nilai x = 2. Jika programnya berjalan dengan benar maka anda
akan mendapatkan output berupa nilai fungsi di x = 2 adalah 12.

2) Membuat program komputer untuk mencari solusi persamaan diferensial biasa dengan
iterasi Runge-Kutta orde 2 berdasarkan metode Raltson. Dimana bentuk persamaan
diferensial yang dicari solusinya adalah :
f

(x) = 4x+5
Adapun implementasi program komputernya adalah seperti berikut ini :
//**********************************************************************************************
//Menghitung Persamaan Diferensial dengan metode Runge-kutta orde dua-Raltson
//compiler : Visual C++
//**********************************************************************************************
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
void main()
{
double eps=1e-3;
double k[4];
double xx,x,x1,x2,yy,y,y1,y2,fx,delx,delt,pita;
int i,n;

cout << " Masukkan titik awal (xo,yo) : "; //masukkan nilai xo <spasi> yo
cin >>x1>>y1;
cout << " Masukkan titik akhir (x) : ";
cin >>x2;
cout <<endl<<endl;
n=0;
delt=100;

while (fabs(delt)>eps) //iterasi selama delt lebih besar dari eps
{
n+=1;
pita=pow(2,n); //2^n
delx=(x2-x1)/pita;

Praktikum Fisika Komputasi

35
xx=x1;
yy=y1;
while (xx<x2)
{
x=xx;
y=yy;
for (i=1;i<=2;i++)
{
//************************
//fx=y; //bentuk fungsi

fx=4*x+5;

//fx=1-exp(-12.5*x/68.1); //bentuk fungsi
//fx=fx*9.8*68.1/12.5;
//*************************
k[i]=delx*fx;
if (i==1)
{
x=xx+3*delx/4;
y=yy+3*k[i]/4;
}
} //for
xx=xx+delx;
yy=yy+(k[1]+2*k[2])/3; //iterasi runge-kutta orde 2 - Raltson
} //while
if (n==1)
{
cout.width(15);
cout<<pita;
cout.width(15);
cout<<yy;
}
else
{
delt=yy-y2;
cout.width(15);
cout<<pita;
cout.width(15);
cout<<yy;
cout.width(15);
cout<<delt;
}
cout<<endl;
y2=yy;
} //while
cout<<"Nilai Fungsi di x= "<<x2<<" adalah : "<<yy;
cout <<endl;
cout<<"Banyaknya iterasi = "<<n;
cout<<endl;
}

Coba jalankan program tersebut dan berikan masukan syarat awal (x
0
,y
0
) = (1 1), serta
berikan masukan untuk nilai x = 2. Jika programnya berjalan dengan benar maka anda
akan mendapatkan output berupa nilai fungsi di x = 2 adalah 12.


Praktikum Fisika Komputasi

36
3) Membuat program komputer untuk mencari solusi persamaan diferensial biasa dengan
iterasi Runge-Kutta orde 2 berdasarkan metode Poligon. Dimana bentuk persamaan
diferensial yang dicari solusinya adalah :
f

(x) = 4x+5
Adapun implementasi program komputernya adalah seperti berikut ini :
//******************************************************************
//Menghitung Persamaan Diferensial dengan metode Runge-kutta orde dua-Poligon
//compiler : Visual C++
//******************************************************************
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
void main()
{
double eps=1e-3;
double k[4];
double xx,x,x1,x2,yy,y,y1,y2,fx,delx,delt,pita;
int i,n;

cout << " Masukkan titik awal (xo,yo) : "; //masukkan nilai xo <spasi> yo
cin >>x1>>y1;
cout << " Masukkan titik akhir (x) : ";
cin >>x2;
cout <<endl<<endl;
n=0;
delt=100;

while (fabs(delt)>eps) //iterasi selama delt lebih besar dari eps
{
n+=1;
pita=pow(2,n); //2^n
delx=(x2-x1)/pita;
xx=x1;
yy=y1;
while (xx<x2)
{
x=xx;
y=yy;
for (i=1;i<=2;i++)
{
//************************
//fx=y; //bentuk fungsi

fx=4*x+5;

//fx=1-exp(-12.5*x/68.1); //bentuk fungsi
//fx=fx*9.8*68.1/12.5;
//*************************
k[i]=delx*fx;
if (i==1)
{
x=xx+delx/2;
y=yy+k[i]/2;
}
} //for
xx=xx+delx;
yy=yy+k[2]; //iterasi runge-kutta orde 2 - Poligon
} //while

Praktikum Fisika Komputasi

37
if (n==1)
{
cout.width(15);
cout<<pita;
cout.width(15);
cout<<yy;
}
else
{
delt=yy-y2;
cout.width(15);
cout<<pita;
cout.width(15);
cout<<yy;
cout.width(15);
cout<<delt;
}
cout<<endl;
y2=yy;
} //while
cout<<"Nilai Fungsi di x= "<<x2<<" adalah : "<<yy;
cout <<endl;
cout<<"Banyaknya iterasi = "<<n;
cout<<endl;
}

Coba jalankan program tersebut dan berikan masukan syarat awal (x
0
,y
0
) = (1 1), serta
berikan masukan untuk nilai x = 2. Jika programnya berjalan dengan benar maka anda
akan mendapatkan output berupa nilai fungsi di x = 2 adalah 12.

4.3.2 Runge-Kutta orde 3
Rumus iterasi Runge-Kutta orde 3 adalah :
) 4 (
3 2 1 6
1
1
k k k y y
n n
+ + + =
+

dengan
) , (
1 n n
y x hf k =
) , (
1 2
1
2
1
2
k y h x hf k
n n
+ + =
) 2 , (
2 1 3
k k y h x hf k
n n
+ + =
PRAKTIKUM :
1) Membuat program komputer untuk mencari solusi persamaan diferensial biasa dengan
iterasi Runge-Kutta orde 3. Dimana bentuk persamaan diferensial yang dicari solusinya
adalah :
f

(x) = 4x+5
Adapun implementasi program komputernya adalah seperti berikut ini :
//**************************************************************************************
//Menghitung Persamaan Diferensial dengan metode Runge-Kutta orde Tiga
//compiler : Visual C++

Praktikum Fisika Komputasi

38
//**************************************************************************************
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
void main()
{
double eps=1e-3;
double k[4];
double xx,x,x1,x2,yy,y,y1,y2,fx,delx,delt,pita;
int i,n;

cout << " Masukkan titik awal (xo,yo) : "; //masukkan nilai xo <spasi> yo
cin >>x1>>y1;
cout << " Masukkan titik akhir (x) : ";
cin >>x2;
cout <<endl<<endl;
n=0;
delt=100;

while (fabs(delt)>eps) //iterasi selama delt lebih besar dari eps
{
n+=1;
pita=pow(2,n); //2^n
delx=(x2-x1)/pita;
xx=x1;
yy=y1;
while (xx<x2)
{
x=xx;
y=yy;
for (i=1;i<=3;i++)
{
//************************
//fx=y; //bentuk fungsi

fx=4*x+5;

//fx=1-exp(-12.5*x/68.1); //bentuk fungsi
f//x=fx*9.8*68.1/12.5;
//*************************
k[i]=delx*fx;
switch(i)
{
case (1):
{
x=xx+delx/2;
y=yy+k[i]/2;
break;
}
case(2):
{
x=xx+delx/2;
y=yy-k[1]+2*k[2];
break;
}
}

} //for
xx=xx+delx;
yy=yy+(k[1]+4*k[2]+k[3])/6; //iterasi Runge-Kutta orde 3
} //while
if (n==1)

Praktikum Fisika Komputasi

39
{
cout.width(15);
cout<<pita;
cout.width(15);
cout<<yy;
}
else
{
delt=yy-y2;
cout.width(15);
cout<<pita;
cout.width(15);
cout<<yy;
cout.width(15);
cout<<delt;
}
cout<<endl;
y2=yy;
} //while
cout<<"Nilai Fungsi di x= "<<x2<<" adalah : "<<yy;
cout <<endl;
cout<<"Banyaknya iterasi = "<<n;
cout<<endl;
}

Coba jalankan program tersebut dan berikan masukan syarat awal (x
0
,y
0
) = (1 1), serta
berikan masukan untuk nilai x = 2. Jika programnya berjalan dengan benar maka anda
akan mendapatkan output berupa nilai fungsi di x = 2 adalah 11.993.

4.3.2 Runge-Kutta orde 4
Rumus iterasi Runge-Kutta orde 4 adalah :
) 2 2 (
4 3 2 1 6
1
1
k k k k y y
n n
+ + + + =
+

dengan
) , (
1 n n
y x hf k =
) , (
1 2
1
2
1
2
k y h x hf k
n n
+ + =
) , (
2 2
1
2
1
3
k y h x hf k
n n
+ + =
) , (
3 4
k y h x hf k
n n
+ + =
PRAKTIKUM :
1) Membuat program komputer untuk mencari solusi persamaan diferensial biasa dengan
iterasi Runge-Kutta orde 4. Dimana bentuk persamaan diferensial yang dicari solusinya
adalah :
f

(x) = 4x+5
Adapun implementasi program komputernya adalah seperti berikut ini :
//******************************************************************
//Menghitung Persamaan Diferensial dengan metode Runge-Kutta orde Empat

Praktikum Fisika Komputasi

40
//compiler : Visual C++
//******************************************************************
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
void main()
{
double eps=1e-3;
double k[4];
double xx,x,x1,x2,yy,y,y1,y2,fx,delx,delt,pita;
int i,n;

cout << " Masukkan titik awal (xo,yo) : "; //masukkan nilai xo <spasi> yo
cin >>x1>>y1;
cout << " Masukkan titik akhir (x) : ";
cin >>x2;
cout <<endl<<endl;
n=0;
delt=100;

while (fabs(delt)>eps) //iterasi selama delt lebih besar dari eps
{
n+=1; //cacah iterasi
pita=pow(2,n); //2^n
delx=(x2-x1)/pita;
xx=x1;
yy=y1;
while (xx<x2)
{
x=xx;
y=yy;
for (i=1;i<=4;i++)
{
//************************
//fx=y; //bentuk fungsi

fx=4*x+5;

//fx=1-exp(-12.5*x/68.1); //bentuk fungsi
//fx=fx*9.8*68.1/12.5;
//*************************
k[i]=delx*fx;
if(i==1||i==2)
{
x=xx+delx/2;
y=yy+k[i]/2;
}
else
if (i==3)
{
x=xx+delx;
y=yy+k[3];
}

} //for
xx=xx+delx;
yy=yy+(k[1]+2*(k[2]+k[3])+k[4])/6; //iterasi Runge-Kutta orde 4
} //while
if (n==1)
{
cout.width(15);
cout<<pita;

Praktikum Fisika Komputasi

41
cout.width(15);
cout<<yy;
}
else
{
delt=yy-y2;
cout.width(15);
cout<<pita;
cout.width(15);
cout<<yy;
cout.width(15);
cout<<delt;
}
cout<<endl;
y2=yy;
} //while
cout<<"Nilai Fungsi di x= "<<x2<<" adalah : "<<yy;
cout <<endl;
cout<<"Banyaknya iterasi = "<<n;
cout<<endl;
}

Coba jalankan program tersebut dan berikan masukan syarat awal (x
0
,y
0
) = (1 1), serta
berikan masukan untuk nilai x = 2. Jika programnya berjalan dengan benar maka anda
akan mendapatkan output berupa nilai fungsi di x = 2 adalah 12.

Anda mungkin juga menyukai