• Tidak ada hasil yang ditemukan

Praktikum Fisika Komputasi

N/A
N/A
Protected

Academic year: 2021

Membagikan "Praktikum Fisika Komputasi"

Copied!
41
0
0

Teks penuh

(1)

Praktikum Fisika Komputasi

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

)

n x0 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

D

e

e

r

r

e

e

t

t

T

T

a

a

y

y

l

l

o

o

r

r

(2)

Praktikum Fisika Komputasi

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; }

(3)

Praktikum Fisika Komputasi

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

(4)

Praktikum Fisika Komputasi

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

)

(

x

x

3

x

2

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

A

k

k

a

a

r

r

-

-

a

a

k

k

a

a

r

r

d

d

a

a

r

r

i

i

P

P

e

e

r

r

s

s

a

a

m

m

a

a

a

a

n

n

(5)

Praktikum Fisika Komputasi

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>

(6)

Praktikum Fisika Komputasi

#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

)

(

x

x

3

x

2

x

f

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

// Compiler : Visual C++

(7)

Praktikum Fisika Komputasi

#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;

(8)

Praktikum Fisika Komputasi

}

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

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!.

(9)

Praktikum Fisika Komputasi

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 :

...

)

(

x

a

n

x

n

a

n1

x

n1

a

n2

x

n2

a

n2

x

n3

f

misal n=3 maka didapatkan polinom orde-3 :

f

(

x

)

a

n

x

n

a

n1

x

n1

a

n2

x

n2

a

n2

x

n3

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

)

(

)

(

)

(

b

n

x

b

n1

x

b

n2

x

3 2 1    n n n n

b

b

b

b

dimana,

n n

a

b

x

b

a

b

n1

n1

n

x

b

a

b

n2

n2

n1

x

b

a

b

n3

n3

n2

Nilai

b

n3

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

a

n

,

a

n1

,

a

n2

,

a

n3

diganti dengan nilai

b

n,

b

n1

,

b

n2

.

2 1   n n n

b

b

b

x

)

(

)

(

c

n

x

c

n1

x

2 1   n n n

c

c

c

dimana,

n n

b

c

x

c

b

c

n1

n1

n

x

c

b

c

n2

n2

n1

+

+

(10)

Praktikum Fisika Komputasi

Nilai dari

c

n2

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

)

(

x

x

3

x

2

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<<" = ";

(11)

Praktikum Fisika Komputasi

}

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];

(12)

Praktikum Fisika Komputasi

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

(13)

Praktikum Fisika Komputasi

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 :

(14)

Praktikum Fisika Komputasi

1) Buatlah program komputer untuk menyelesaikan masalah gerak peluru. Dimana sebuah

peluru ditembakkan dengan kecepatan awal V

0

= 100 m/s dan sudut elevasi

= 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

atau bisa ditulis menjadi polinom orde-2 yaitu :

x

x

a

y

2 2

dimana,

1 3 2 0 2

1

.

10

)

cos

(

2

 

m

v

g

a

1

tan

1

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.

(15)

Praktikum Fisika Komputasi

I

I

I

I

I

I

I

I

N

N

T

T

E

E

G

G

R

R

A

A

L

L

D

D

A

A

N

N

T

T

U

U

R

R

U

U

N

N

A

A

N

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

, sehingga

luas masing-masing pita dapat dinyatakan :

x

x

f

L

i

i

(

)

Karena antara x = a dan x = b terdapat n buah pita maka luas seluruhnya menjadi :

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

PRAKTIKUM MINGGU 3

I

I

n

n

t

t

e

e

g

g

r

r

a

a

l

l

d

d

a

a

n

n

T

T

u

u

r

r

u

u

n

n

a

a

n

n

(16)

Praktikum Fisika Komputasi

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

seperti diperlihatkan dalam

gambar 3.2 .

Dari gambar 3.2 maka luas pita ke-i adalah :

)]

(

)

(

[

2

1

1 

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

x

f

x

f

x

x

f

x

f

x

x

f

x

n

f

x

n

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

f

x

f

x

f

x

f

b

x

f

a

f

x

A

n

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

x

i

x

i+1

f(x

i

)

f(x

i+1

)

Pita ke-i

(17)

Praktikum Fisika Komputasi

#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

(18)

Praktikum Fisika Komputasi

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

(19)

Praktikum Fisika Komputasi

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 = -

x dan x

i+2

di x =

x. Sehingga nilai integral di bawah kurva f(x)

yaitu :

dx

a

x

a

x

a

A

x x i

   

(

1

0

)

2 2 1

selanjutnya dengan penurunan secara matematik akan didapatkan bahwa :

)]

(

)

(

4

(

[

3

1

2 1 1   

i

i

i i

x

f

x

f

x

f

x

A

Maka luas semua pasangan pita adalah :

)]

(

)

(

4

(

[

3

1

3 2 1

f

x

f

x

x

f

x

A

...

)]

(

)

(

4

(

[

3

1

5 4 3

x

f

x

f

x

f

x

)]

(

)

(

4

(

[

3

1

1 2 n n n

f

x

f

x

x

f

x

atau

...

)

(

4

)

(

4

)

(

4

)

(

[

3

1

8 6 2 1

x

f

x

f

x

f

x

f

x

A

)]

(

...

)

(

2

)

(

2

)

(

2

f

x

3

f

x

5

f

x

7

f

x

n

PRAKTIKUM :

1) Membuat program komputer untuk menghitung integral dengan metode Simpson.

Dimana fungsi yang akan dicari integralnya adalah :

f(x) = 6 – 6x

5

(20)

Praktikum Fisika Komputasi

//*******************************************************

//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

{

(21)

Praktikum Fisika Komputasi

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.

(22)

Praktikum Fisika Komputasi

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

)

(

)

(

)

(

x

h

f

x

hf

'

x

h

2

f

''

x

h

3

f

'''

x

f

...

)

(

6

1

)

(

2

1

)

(

)

(

)

(

x

h

f

x

hf

'

x

h

2

f

''

x

h

3

f

'''

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

(23)

Praktikum Fisika Komputasi

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;

(24)

Praktikum Fisika Komputasi

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 //*****************

(25)

Praktikum Fisika Komputasi

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

[

)

(

e

ct/ m

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

[

)

(

e

ct/ m

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.

(26)

Praktikum Fisika Komputasi

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

sin(

0

)

,

4

km

r

untuk

e

t

B

B

x

(

1

2

)

t

,

4

km

r

untuk

e

C

e

C

x

1t 2t

,

4

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

x

dx

x

x

C

x

f

(

)

4

5

2

2

5

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

)

(

x

x

2

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

f

'

(

x

)

4

x

5

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

(27)

Praktikum Fisika Komputasi

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1

i

(

,

)

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;

(28)

Praktikum Fisika Komputasi

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

)

,

(

)

(

'

x

h

f

x

y

h

f

x

y

h

f

persamaan ini dapat dinyatakan dalam bentuk iterasi :

2 1

y

f

(

x

,

y

)

h

1

2

f

'

(

x

,

y

)

h

y

i

i

Persamaan ini disebut sebagai iterasi Euler orde 2.

(29)

Praktikum Fisika Komputasi

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;

(30)

Praktikum Fisika Komputasi

}

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.

(31)

Praktikum Fisika Komputasi

4.3 Metode Runge-Kutta

Persamaan umum iterasi Runge-Kutta adalah :

)

,

,

(

1

y

f

x

y

h

y

n

n

n n

dimana

m m n n

y

h

a

k

a

k

a

k

x

f

(

,

,

)

1 1

2 2

...

n n

x

x

h

1

dengan

)

,

(

1

hf

x

n

y

n

k

1 11 1 2

hf

(

x

p

h

,

y

q

k

k

n

n

)

,

(

2 21 1 22 2 3

hf

x

p

h

y

q

k

q

k

k

n

n

...

...

...

1 1 , 1 2 2 , 1 1 1 , 1 1

,

...

(

n m n m m m m m m

hf

x

p

h

y

q

k

q

k

q

k

k

4.3.1 Runge-Kutta orde 1

Jika diambil m = 1 maka akan menghasilkan iterasi Runge-Kutta orde 1 yaitu :

1 1 1

y

a

k

y

n

n

)

,

(

1 1 n n n n

y

a

hf

x

y

y

1

karena

f

(

x

n

,

y

n

,

h

)

a

1

k

1

dan

k

1

hf

(

x

n

,

y

n

)

. Dengan mengambil

a

1

1

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

y

a

k

a

k

y

n

n

dimana

)

,

(

1

hf

x

n

y

n

k

)

,

(

1 11 1 2

hf

x

p

h

y

q

k

k

n

n

jadi dalam hal ini kita perlu menentukan nilai-nilai dari

a

1

,

a

2

,

p

1

,

dan

q

11

. Dengan

melakukan perhitungan matematis maka didapatkan nilai dari konstanta tersebut seperti

dijelaskan di bawah ini.

a) Metode Heun

PRAKTIKUM MINGGU 6

P

(32)

Praktikum Fisika Komputasi

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

y

k

k

y

n

n

dimana

)

,

(

1

hf

x

n

y

n

k

)

,

(

1 2

hf

x

h

y

k

k

n

n

b) Metode Raltson

Dalam metode ini diambil nilai dari konstanta :

3 1 1

a

a

2

23 4 3 11 1

q

p

Sehingga persamaan iterasi Runge-Kutta orde 2 menjadi :

)

2

(

1 2 3 1 1

y

k

k

y

n

n

dimana

)

,

(

1

hf

x

n

y

n

k

)

,

(

34 34 1 2

hf

x

h

y

k

k

n

n

c) Metode Poligon

Dalam metode ini diambil nilai dari konstanta :

0

1

a

a

2

1

2 1 11 1

q

p

Sehingga persamaan iterasi Runge-Kutta orde 2 menjadi :

2 1

y

k

y

n

n

dimana

)

,

(

1

hf

x

n

y

n

k

)

,

(

12 12 1 2

hf

x

h

y

k

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 :

(33)

Praktikum Fisika Komputasi

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; }

(34)

Praktikum Fisika Komputasi

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;

(35)

Praktikum Fisika Komputasi

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.

(36)

Praktikum Fisika Komputasi

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

Referensi

Dokumen terkait

Untuk mencari solusi persamaan diferensial biasa dengan syarat awal dapat dilakukan dengan metode Euler. Berikut ini kita akan membahasa satu persatu dari ke dua

Selain persamaan diferensial linear orde nonhomogen, fungsi Green juga dapat menyelesaikan persamaan Euler-Cauchy orde dua, dengan mengubah terlebih dahulu

Pada artikel ini dibahas metode iterasi variasional yang memberikan solusi dual berbentuk deret pada persamaan diferensial orde dua dengan nilai batas yang ditentukan yang

merupakan solusi dari persamaan diferensial.. 3) Kurang memahami ciri-ciri dari jenis persamaan diferensial orde satu yaitu persamaan diferensial separabel, homogen,

Berdasarkan studi kepustakaan yang dilakukan diperoleh kesimpulan bahwa, untuk mencari solusi hampiran dari persamaan diferensial biasa orde satu , dengan kondisi awal , dengan metode

CPMK CLO - 1 Mampu memahami dan menghitung solusi persamaan diferensial Orde 2 ILO-1 CLO - 2 Mampu memahami dan menghitung solusi persamaan diferensial Orde Tinggi ILO-1 CLO - 3 Mampu

4.2 Menentukan Formula Transformasi Laplace dengan Metode Dekomposisi Adomian Pada Persamaan Diferensial Linier Orde Satu Solusi eksak dari persamaan diferensial linier orde satu pada

Persamaan Diferensail Biasa Orde Tinggi Bentuk umum persamaan diferensial biasa orde tinggi : Misalkan dimana adalah solusi dari persamaan diferensial : Dengan nilai awal :