Diktat Fiskom PDF
Diktat Fiskom PDF
I DERET TAYLOR
1.1 Deret Taylor
Deret Taylor memegang peranan yang sangat penting dalam analisis numerik.
Dengan deret Taylor kita dapat menentukan nilai suatu fungsi di titik x jika nilai fungsi di
titik x0 yang berdekatan dengan titik x diketahui.
Uraian deret Taylor disekitar xo dinyatakan dengan f(x) yaitu :
f ( x)
f ( n ) ( x0 )
( x x0 ) n ..(1.1)
n!
f ( n ) ( x0 )
dn f
dx n
dimana,
x x0
...(1.2)
f (0) ( x0 ) f ( x0 ) (1.3)
f ( x)
f ( n ) (0) n
x ..(1.4)
n!
dimana,
f ( n ) (0)
dn f
dx n
x 0
...(1.5)
f ( x x0 )
f ( n ) ( x0 ) n
( x) ..(1.7)
n!
f ( x)
f ( n ) (0) n
( x) ...........(1.8)
n!
Contoh :
Hitunglah deret Mac Laurin untuk Sin(x)
Avid-06
Fisika Komputasi
Jawab :
f(x)
= sin(x)
f(0)
= 0
f1(x) = cos(x)
f1(0)
= 1
11
11
f (x) = -sin(x)
f (0) = 0
f111(x) = -cos(x)
f111(0) = -1
f1V(x) = sin(x)
f1V(0) = 0
fV(x) = cos(x)
fV(0)
= 1
f ( x)
f ( n ) (0) n
( x)
n!
f ( 0) (0) x 0 f (1) (0) x1 f (11) (0) x 2 f (111) (0) x 3 f (1V ) (0) x 4 f (V ) (0) x 5
...
0!
1!
2!
3!
4!
5!
...
0! 1!
2!
3!
4!
5!
x3 x5 x7
...
3! 5! 7!
Latihan :
1. Buat deret Mac Laurin untuk fungsi cos(x) dan tan(x)
2. Buat deret Taylor untuk ex di sekitar x=0
Avid-06
Fisika Komputasi
if (m>1 )
del= fabs(sinx-s);
sinx=s;
}
cout << "Jumlah suku = "<<m <<endl;
cout << "sin(x)
Avid-06
Fisika Komputasi
Latihan :
1. Buatlah program komputer dari deret MacLaurin untuk fungsi exp(x) :
exp( x) 1 x
x 2 x3
...
2! 3!
cos( x) 1
Avid-06
x2 x4 x6
...
2! 4! 6!
Fisika Komputasi
II AKAR-AKAR PERSAMAAN
Akar suatu persamaan merupakan titik potong fungsi f(x) dengan sumbu x :
f(x)
x0
x
akar f(x)
V
1
V(t)
x=?
Fisika Komputasi
f(x)
x0
f(x2)
f(x1)
x0
x
x2
x1
x0
xa
xa dan xb terletak
berseberangan terhadap titik
potong x0
xa berada di sebelah kiri x0
xb berada di sebelah kanan x0
x
xb
Fisika Komputasi
catatan :
Bila kita menentukan suatu arah dan sampai batas daerah tertentu tidak ditemukan
titik potong (x0), maka kita coba sekali lagi untuk arah yang berlawanan
Contoh :
Tentukan titik potong f(x) terhadap sumbu x. Dimana bentuk persamaan f(x) :
f(x) = x3-11x2 + 39x 45
untuk 0 x 6,
h 0.75
xn
f(xn)
xn-h
5,25
5,25
1,265
4,5
4,5
-1,25
Dari tabel f(5,25) x f(4,5) < 0 , sehingga titik potong terletak antara x = 4,5 dan x
= 5,25
2.2 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,dan
bila yang dilibatkan sampai suku dengan turunan kedua maka disebut iterasi NewtonRapshon orde-2, dan seterusnya. Uraian deret Taylor di sekitar x0 dinyatakan :
f ( x)
f ( n ) ( x0 )
( x x0 ) n
n!
f ( 0) ( x0 ) x 0 f (1) ( x0 )( x x0 )1 f (11) ( x0 )( x x0 ) 2
...
0!
1!
2!
orde -1
orde -2
Avid-06
Fisika Komputasi
x n 1 x n
f ( xn )
..(2.2)
f ' ( xn )
Persamaan 2.2 disebut dengan persamaan iterasi Newton-Rapshon orde-1. Nilai xn+1 dapat
dicari dari xn (suatu titik dapat dicari dari titik sebelumnya). Jadi bila suatu titik awal x0
diketahui maka dengan persamaan 2.2 dapat dicari x1, x2, dan seterusnya sampai
ditemukan akar dari persamaan atau fungsi yang bersangkutan (nilai x yang menyebabkan
f(x) = 0). Penentuan x0 memegang peranan yang amat penting karena cepat lambatnya
penentuan akar ditentukan oleh pengambilan titik awal x0. Penentuan titik awal x0 harus
ditentukan sedekat mungkin dengan akar sehingga mengurangi banyaknya iterasi. Hal ini
dapat dilakukan dengan metode memperkirakan letak akar (sub bab 2.1).
Contoh :
Tentukanlah akar f(x) = x3 11x2 + 39x 45 dengan metode Newton-Rapshon
orde-1.
Jawab :
f1(x) = 3x2 22x + 33
misal kita ambil titik awal x0 = 6
n
xn
f(xn)
f1(xn)
xn+1
6,000
9,000
15,000
5,400
5,400
2,304
7,680
5,100
5,100
0,441
4,830
5,009
5,009
0,036
4,070
5,000
5,000
0,000
4,000
5,000
Dari tabel diatas dapat dilihat untuk ketelitian 3 angka dibelakang koma x 4 = x5 =
5,000. Dan nilai f(x) = 0,000. Jadi akar dari f(x) adalah x = 5,000
2.2.2 Metode Newton -Rapshon orde-2
Jika kita melibatkan sampai suku dengan turunan kedua pada uraian deret Taylor
maka akan menghasilkan iterasi Newton Rapshon orde-2. Penurunan persamaannya dapat
ditentukan dengan cara berikut ini. Dari persamaan umum deret Taylor (pers. 1.1)
f ( x)
f ( n ) ( x0 )
( x x0 ) n
n!
f ( 0) ( x0 ) x 0 f (1) ( x0 )( x x0 )1 f (11) ( x0 )( x x0 ) 2
0!
1!
2!
dengan mensubstitusi x dengan xn+1, dan x0 dengan xn didapatkan
Avid-06
Fisika Komputasi
f 11 ( xn )( xn 1 xn ) 2
f ( xn1 ) f ( xn ) f ( xn )( xn1 xn )
2!
1
x n 1 xn
f ( xn )
f 1 ( xn )
Sehingga
f 11 ( xn )( xn 1 xn ) 2
0 f ( xn ) f ( xn )( xn 1 xn )
2
1
f ( xn )
1
f ( xn )
f 11 ( xn ) f ( x n )
0 f ( xn ) f ( xn )( xn 1 xn )
( xn1 xn )
2 f 1 ( xn )
1
1
f ( xn ) f 11 ( xn )
0 f ( xn ) ( xn 1 xn ) f ( xn )
2 f 1 ( xn )
x n 1 x n
f ( xn )
f ( x n ) f '' ( x n )
'
f ( xn )
2 f ' ( xn )
x n 1 x n
f ( xn )
.(2.3)
f ( x n ) f '' ( x n )
'
f ( xn )
2 f ' ( xn )
xn
6,000
5,167
F(xn)
9,000
f1(xn)
15,000
f11(xn)
14,000
xn+1
5,167
2
3
4
Avid-06
Fisika Komputasi
2. Satu mole gas ideal suhunya 3000 K, volumenya diperbesar pada suhu tetap
(isotermis). Berapa liter volume gas ideal tersebut pada saat tekanannya 15 atmosfer.
(tetapan gas universal 0,0823 l atm/mole 0K )
jawab:
Persamaan gas ideal :
PV = n R T
Diket :
N = 1 mole
R = 0,0823 l atm / mole 0 K
T = 300 0 K
P = n R T / V = 1. 0,0823 . 300/ V = 24,69 / V
Jika dimisalkan P = f(x) dan V = x maka f(x) = 24,69/x
f(x)
P1=15
f(x)1=15
x
1
x =?
V1=?
24,69
24,69
15 atau f ( x)
15
V
x
sehingga f 1 ( x)
24,69
x2
x n 1 x n
f ( xn )
f ' ( xn )
misal x0 = 1,5
n
0
xn
f(xn)
f1(xn)
xn+1
1,500
1
2
Avid-06
10
Fisika Komputasi
I 0 Sin 2
dimana,
I0 = intensitas cahaya yang datang
= k b sin
k = bilangan gelombang = 2/ ; sin = / D
b = lebar celah
= sudut antara normal pada celah dengan arah sinar yang menjadi pusat
perhatian
Jika I/I0 disubstitusi menjadi y dan disubstitusi menjadi x maka :
sin 2 x
x2
sin 2 x
0,5
x2
f(x)
x1
y1=1/2
0 x=?
Untuk mendapatkan titik potong f(x) dengan sumbu x maka dipakai iterasi NewtonRapshon orde-1.
Avid-06
11
Fisika Komputasi
f ( x)
sin 2 x
0,5
x2
2 sin 2 x sin 2 x
f ( x)
x3
x2
1
misal x0 = 1,25
n
0
xn
f1(xn)
f(xn)
xn+1
1,250
1
2
1,392
kb sin b sin
2
5,9.10 4
sin 1,392.
.0,4
2.3 Akar Akar Dari Polinom
Bentuk Umum Polinom adalah :
f ( x) an x n an1 x n1 an2 x n2 ... a1 a0 ..(2.4)
contoh :
f ( x) x 3 11x 2 33x 45
polinom orde 3
f ( x) x 2 2 x 8
polinom orde - 2
Avid-06
12
Fisika Komputasi
3.Selang satu baris dari deretan koefisien tersebut buat garis lurus sebagai garis
penjumlahan.
bn
5.Kalikan x dengan bn dan letakkan hasilnya diatas garis penjumlahan tepat di bawah an-1.
Jumlahkan an-1 dengan hasil kali tadi dan letakkan hasilnya di bawah garis penjumlahan,
satu kolom dengan an-1. Beri nama hasil penjumlahan tadi dengan bn-1
an
bn
an1
an2 ... a0
x.bn
a n 1 ( x.bn )
bn 1
6.Kalikan x dengan bn-1 dan letakkan hasilnya diatas garis penjumlahan di bawah an-2.
Jumlahkan an-2 dengan hasil kali tadi dan letakkan hasilnya di bawah garis penjumlahan,
satu kolom dengan an-2. Beri nama hasil penjumlahan tadi dengan bn-2
an
bn
an1
an 2
...
x.bn 1
a0
bn1
a n 2 ( x.bn 1 )
bn 2
7.Lakukan operasi yang sama untuk koefisien-koefisien yang lain sehingga di bawah garis
penjumlahan akan didapatkan deretan :
an
an1
an2
a n 3
bn1
bn2
bn3
+
13
Fisika Komputasi
dimana,
bn
an
bn1 an1 bn x
bn2 an2 bn1 x
bn3 an3 bn2 x
Nilai bn 3 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 an , an1 , an2 , an3 diganti dengan nilai bn, bn1 , bn2 .
bn
bn1
bn2
(cn x) (cn1 x)
cn
cn1
cn 2
dimana,
cn b n
cn1 bn1 cn x
cn2 bn2 cn1 x
Nilai dari c n 2 merupakan nilai turunan dari persamaan f(x) pada x yang bersangkutan.
Contoh :
Misalkan kita memiliki persamaan polinom orde 3 yaitu :
f ( x) x 3 11x 2 39 x 45
Tentukan nilai fungsi dan turunannya untuk x=2
Jawab :
-Secara Analitik :
Untuk x = 2 maka f(2) = -3 dan f1(2) = 7
-Dengan Pembagian Sintetik maka hasilnya adalah :
2
-11
39
-45
-18
42
-9
21
-3
-9
21
14
-7
Avid-06
14
Fisika Komputasi
Jadi didapatkan nilai f(x) pada x=2 adalah 3, sedangkan nilai turunannya adalah 7. Hasil
ini sama dengan hasil yang didapatkan secara analitik.
Soal :
1. Tentukan akar dari persamaan : f(x) = x3 6x2 + 11x 6
2. Tentukan akar dari persamaan : f(x) = x2 - 2x 8
catatan : gunakan metode Iterasi Newton Rapshon orde 1 dan orde-2
f ( x) x 3 11x 2 39 x 45
( x 3)( x 3)( x 5)
Persamaan tersebut mempunyai akar ganda di x=3 dan akar tunggal di x=5. Untuk
menyelesaikan masalah akar ganda maka kita memakai langkah-langkah berikut. Untuk
suatu polinom orde n, yaitu fn(x) maka langkah-langkah mencari akar adalah :
1.Tentukan akar fn(x) paling kanan dengan metode Newton-Rapshon. Misalkan akar
tersebut adalah x = x1
2.Bagi fn(x) dengan (x-x1), hasilnya polinom yang ordenya lebih rendah 1 tingkat yaitu :
fn-1(x)
3.Tentukan akar paling kanan fn-1(x) dengan Newton-Rapshon. Misalkan akar tersebut
adalah x=x2
4.Bagi fn-1(x) dengan (x-x2). Hasilnya adalah polinom yang ordenya lebih rendah 2
tingkat dari semula yaitu fn-2(x)
5.Langkah diteruskan sampai didapatkan polinom orde-1
contoh :
f ( x) x 3 11x 2 39 x 45
( x 3)( x 3)( x 5) polinom orde 3
15
Fisika Komputasi
f ( x) ( x 3) polinom orde - 1
Adapun langkah langkah membagi suatu polinom orde-n dengan polinom orde -1
adalah :
1.Tuliskan koefisien-koefisien dari polinom semula
an
an-1 an-2 a0
bn-1 bn-2 b0
b0 = 0 = nilai fungsi
3.Ubah bn menjadi an-1, bn-1 menjadi an-2, b1 menjadi a0
Setelah langkah ke-3 maka akan didapatkan koefisien-koefisien polinom baru yang
ordenya 1 tingkat lebih rendah yaitu :
an-1 an-2 a0
Jika langkah tersebut dilanjutkan sampai didapatkan koefisien-koefisien polinom orde1, maka akar terakhir akan didapatkan dari polinom orde 1 ini.
Contoh :
f ( x) x 3 11x 2 39 x 45 orde - 3
Langkah-langkah :
1. a3
1
a2 a1
a0
2. 5
-11 39 -45
1 -11
39
-45
-30
45
1 -6
x=5
3. f ( x) x 2 6 x 9 orde - 2
sehingga a2 = 1
a1 = -6
a0 = 9
Ulangi langkah-langkah tsb :
1
1 -6
2. 3
1 -6
-9
1 -3
x=3
3. f ( x) x 3 orde - 1
sehingga a1 = 1
Avid-06
16
Fisika Komputasi
a0 = -3
Jadi akar-akar dari fungsi tsb adalah :
x1 = 5
x2 = 3
x3 = 3
f ( x) x 3 11x 2 39 x 45
//**********************************************************************************
// 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>
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;
//*****************************
y[n]=x-fx/dx; //rumus Newton Rapshon orde-1
cout.width(15);
//tampilkan 15 digit
17
Fisika Komputasi
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>
#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;
Avid-06
18
Fisika Komputasi
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;
//*****************************
y[n]=x-fx/dx;
selisih=fabs(y[n]-x);
f ( x) x 3 11x 2 39 x 45
// **********************************************************************
// Menghitung akar dari fungsi dengan Newton Rapshon orde-2
// iterasi dibatasi oleh selisih antar 2 nilai yg berurutan
// Compiler : Visual C++
// **********************************************************************
#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
Avid-06
19
Fisika Komputasi
{
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;
d2=6*x-22;
//*****************************
pen=d1-d2*fx/(2*d1);
y[n]=x-fx/pen;
cout.width(10);
cout << setiosflags(ios::left);
cout << n;
cout.width(15);
cout << setiosflags(ios::left);
cout << y[n];
selisih=fabs(y[n]-x);
cout.width(15);
cout << setiosflags(ios::left);
cout << selisih;
cout << endl<<endl;
}
cout << "Jumlah iterasi = "<<n <<endl;
cout << "Akar
Latihan :
1) Buatlah program komputer untuk menghitung persoalan gas ideal. Dimana 1 mole gas
ideal yang suhunya 3000 K volumenya diperbesar pada suhu tetap. Berapa liter volume
gas tersebut ketika tekanannya 15 atmosfir (tetapan gas universal 0,0823 l.atm/mole0 K).
Petunjuk :
pV = nRT
Dimana, n=1 mole, R=0.0823 l.atm/mole0K, dan T=3000K. 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
Avid-06
20
Fisika Komputasi
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 :
I 0 Sin 2
1
kb sin . Jika kita mensubstitusikan
2
sin 2 x
x2
untuk mendapatkan nilai dimana I/I0 = 0.5 maka persamaan tersebut diubah menjadi :
sin 2 x
0.5
x2
Dengan memakai iterasi Newton-Rapshon maka solusi persamaan ini akan dapat dicari.
Buatlah programnya!.
Avid-06
21
Fisika Komputasi
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
}
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);
Avid-06
22
Fisika Komputasi
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];
}
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++
Avid-06
23
Fisika Komputasi
//******************************************************************************
#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];
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;
}
Avid-06
24
Fisika Komputasi
Latihan :
1) Buatlah program komputer untuk menyelesaikan masalah gerak peluru. Dimana sebuah
peluru ditembakkan dengan kecepatan awal V0 = 100 m/s dan sudut elevasi = 450.
Percepatan grafitasi g = 9,8 m/dt 2 .Tentukan berapa jauh peluru akan melayang di udara.
Petunjuk :
Persamaan lintasan peluru dinyatakan dengan :
y
g
x 2 (tan ) x
2
2(v0 cos )
y a2 x 2 a1 x
dimana,
a2
g
1.10 3 m 1
2(v0 cos ) 2
a1 tan 1
a0 0
Dengan memakai iterasi Newton-Rapshon yang dikombinasikan dengan metode
pembagian Sintetik maka solusi permasalahan diatas akan dapat dicari. Buat program
komputernya.
Avid-06
25
Fisika Komputasi
I f ( x)dx ...(3.1)
a
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.
Pita ke-i
Pita ke-1
f(x)
Pita ke-n
Li f ( xi )x ....(3.2)
Karena antara x = a dan x = b terdapat n buah pita maka luas seluruhnya menjadi :
n
L f ( xi )x ...(3.3)
i 1
untuk x sangat sempit (x 0) maka persamaan (3.3) adalah persamaan integral seperti
yang dirumuskan dalam persamaan (3.1). Metode untuk menghitung integral seperti yang
disebutkan di atas dikenal dengan metode Persegi Panjang.
Avid-06
26
Fisika Komputasi
f(xi)
f(xi+1)
Pita ke-i
f(x)
Pita ke-n
Pita ke-1
xi xi+1
Ai
1
x[ f ( xi ) f ( xi 1 )]
2
1
1
1
x[ f ( x1 ) f ( x2 )] x[ f ( x2 ) f ( x3 )] ... x[ f ( xn ) f ( xn1 )]
2
2
2
karena f(x1) = f(a) dan f(xn+1) = f(b) maka persamaan tersebut menjadi :
1
x[ f (a) 2 f ( x2 ) 2 f ( x3 ) 2 f ( x4 ) ... 2 f ( xn ) f (b)] (3.4)
2
contoh :
Jika diketahui panas jenis suatu zat seperti tabel berikut ini :
Avid-06
t ( 0C )
c (kkal/kg 0C)
-100
0,11904
-50
0,12486
0,13200
50
0,14046
100
0,15024
150
0,16134
200
0,17376
27
Fisika Komputasi
Tentukan panas yg diperlukan untuk memanaskan 1 kg zat dari 1000C - 200 0C.
Jawab:
a) Metode Persegi Panjang
n
f(xn)
50
0,11904
50
0,12486
50
0,13200
50
0,14046
50
0,15024
50
0,16134
Luas(Ln)
Jumlah
a) Metode Trapesium
n
f(xn)
f(xn+1)
Luas(Ln)
50
0,11904
0,12486
6,0975
50
0,12486
0,13200
6,4215
50
0,13200
0,14046
6,8115
50
0,14046
0,15024
7,2675
50
0,15024
0,16134
7,7895
50
0,16134
0,17376
8,3775
Jumlah
42,7650
28
Fisika Komputasi
#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;
while (fabs(delt)>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)
{
//***************************
fx=6-6*pow(x,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
cout<< pita;
Avid-06
29
Fisika Komputasi
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.
f(x)
4
f(x) = 4
x
0
5
2) Coba buat program komputer untuk menghitung integral dari fungsi :
Avid-06
30
Fisika Komputasi
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
Ai
(a
x 2 a1 x a0 )dx ....(3.6)
1
1
a 2 x 3 a1 x 2 a0 x
3
2
-x
2
a 2 x 3 2a0 x ..(3.7)
3
f ( xi 1 ) a0 (3.9)
f ( xi 2 ) a2 (x) 2 a1 (x) a0 ...(3.10)
f ( xi ) 2 f ( xi 1 ) f ( xi 2 )
..(3.11)
2x 2
a1
f ( xi 2 ) f ( xi )
.(3.12)
2x
a0 f ( xi 1 ) ..(3.13)
Avid-06
31
Fisika Komputasi
1
Ai x[ f ( xi 4 f ( xi 1 ) f ( xi 2 )] (3.14)
3
Maka luas semua pasangan pita adalah :
1
A x[ f ( x1 4 f ( x2 ) f ( x3 )]
3
1
x[ f ( x3 4 f ( x4 ) f ( x5 )] ...
3
1
x[ f ( xn 2 4 f ( xn1 ) f ( xn )] ....(3.15)
3
atau
1
A x[ f ( x1 ) 4 f ( x2 ) 4 f ( x6 ) 4 f ( x8 ) ...
3
2 f ( x3 ) 2 f ( x5 ) 2 f ( x7 ) ... f ( xn )] (3.16)
contoh :
1)Jika diketahui panas jenis suatu zat seperti tabel berikut ini :
t ( 0C )
c (kkal/kg 0C)
-100
0,11904
-50
0,12486
0,13200
50
0,14046
100
0,15024
150
0,16134
200
0,17376
Tentukan panas yang diperlukan untuk memanaskan 1 kg zat dari 1000C sampai
200 0C.
Jawab:
n
f(xn)
f(xn+1)
f(xn+2)
Luas(Ln)
50
0,11904
0,12486
0,13200
12,5080
50
0,13200
0,14046
0,15024
14,0680
50
0,15024
0,16134
0,17376
16,1560
Jumlah
42,7320
32
Fisika Komputasi
sisi pendeknya tegak lurus kawat. Panjang persegi panjang 30 cm, lebar 8 cm.
Jarak salah satu sisi panjang persegi panjang ke kawat adalah 1 cm ( 0 = 4 .
10-7 weber/amp.m)
1 cm
8 cm
L
30 cm
dr
pita = dA = Ldr
Jawab :
Besar flux magnet :
d B.dA
Ambil suatu pita sejajar dengan kawat berarus panjang L = 30 cm, dan lebarnya
dr. Maka luas pita dA = L.dr. Sehingga flux magnet yang menembus pita ini adalah :
0 i
2 r
Maka
0 i
iL dr
L dr 0
2 r
2 r
0 iL 0,091
dr
2 0,01r
3.1.5 Program komputer metode Simpson
1) Membuat program komputer untuk menghitung integral dengan metode Simpson.
Dimana fungsi yang akan dicari integralnya adalah :
f(x) = 6 6x5
Adapun program komputernya adalah seperti berikut ini :
//*******************************************************
//Menghitung integral dengan metode Simpson
//Compiler : Visual C++
//*******************************************************
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
void main()
{
double eps=1e-5;
Avid-06
33
Fisika Komputasi
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)
{
//***************************
fx=6-6*pow(x,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
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
Avid-06
34
Fisika Komputasi
Latihan :
1) Coba buat program yang sama seperti pada latihan untuk metode Trapesium.
Bandingkan hasilnya.
3.2 DIFERENSIAL
Diferensial atau sering disebut turunan dapat dihitung dengan memakai uraian
deret Taylor. Jika uraian deret Taylor di sekitar x dinyatakan dengan f(x+h) dan f(x-h).
Dimana masing-masing dinyatakan dengan persamaan :
1
1
f ( x h) f ( x) hf ' ( x) h 2 f '' ( x) h 3 f ''' ( x) ...
2
6
..(3.17)
1
1
f ( x h) f ( x) hf ' ( x) h 2 f '' ( x) h 3 f ''' ( x) ... .......(3.18)
2
6
3.2.1 Turunan Pertama
Avid-06
35
Fisika Komputasi
Jika kita mengambil selisih antara kedua persamaan tersebut (3.17 dan 3.18) maka
akan didapatkan :
f ' ( x)
f ( x h) f ( x h) 1 2 '''
h f ( x) ... ..........(3.19)
2h
6
Dari persamaan (3.19) jika kita mengambil nilai 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 :
f ' ( x)
f ( x h) f ( x h)
..(3.20)
2h
f '' ( x)
f ( x h) 2 f ( x ) f ( x h) 1 2
h f
12
h2
IV
( x) ...
....(3.21)
Bila h sangat kecil maka suku dengan h pangkat 2 atau lebih bisa diabaikan. Sehingga
akan didapatkan persamaan Turunan Kedua dari f(x) yaitu :
f '' ( x)
f ( x h) 2 f ( x ) f ( x h)
(3.22)
h2
Kedua metode untuk mencari turunan diatas disebut dengan metode Beda Sentral
(central difference).
Contoh :
1.Tentukan turunan pertama dari fungsi y = x2 saat x = 1
jawab :
f ' ( x)
f ( x h) f ( x h)
2h
a)Secara analitik
dy
dx
2x 2
x 1
36
Fisika Komputasi
h=1
hn+1 = hn / 2
hn
f(x+h)
f(x-h)
f1(x) =f(x+h)-f(x-h)/2h
1,00
4,0000
0,0000
2,00
0,50
2,2500
0,2500
2,00
0,25
1,5625
0,5625
2,00
dy
dx
2x 1 3
x 1
hn+1 = hn / 2
hn
f(x+h)
f(x-h)
f1(x) =f(x+h)-f(x-h)/2h
1,00
6,0000
0,0000
3,00
0,50
3,7500
0,7500
3,00
Turunan Kedua :
a)Secara analitik
dy
dx
2
x 1
hn+1 = hn / 2
hn
f(x)
f(x+h)
f(x-h)
f11(x)
1,00
6,0000
0,0000
2,00
0,50
3,7500
0,7500
2,00
37
Fisika Komputasi
f(x) = x2 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;
}
Avid-06
38
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) = x3 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
//*****************
Avid-06
39
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 :
v(t )
gm
[1 e ct / m ]
c
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 :
v(t )
gm
[1 e ct / m ]
c
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.
Avid-06
40
Fisika Komputasi
d 2x
dx
r
km 0............................................................................(4.1)
2
dt
dt
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 :
f ' ( x) 4 x 5
solusi secara analisis matematik dari persamaan ini adalah :
df ( x)
4x 5
dx
f ( x) 4 x 5 dx 2 x 2 5x C
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 :
f ( x) 2 x 2 5 x 6
misal kita masukkan nilai x = 2 maka solusi dari persamaan diferensial tersebut adalah :
f (2) 12
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.
Avid-06
41
Fisika Komputasi
f ( x h) f ( x ) f ' ( x ) h
1 ''
1
f ( x)h 2 f ' ' ' ( x)h 3 ...
2
3
f ( x h) f ( x) f ' ( x)h
dimana dalam Persamaan Diferensial Biasa f ' ( x) dapat ditulis menjadi :
f ' ( x) f ( x, y)
sehingga persamaan diatas menjadi :
f ( x h) f ( x) f ( x, y)h
persamaan ini bisa ditulis dalam bentuk iterasi :
yi 1 yi f ( x, y)h..............................................................................(4.2)
persamaan ini sering disebut dengan iterasi Euler orde 1. Jika kita menentukan syarat
awal adalah titik (x0,y0) dan kita menginginkan solusi persamaan diferensial di titik xp
maka kita harus membagi selang antara x0 dan xp menjadi n buah pita yang masingmasing lebarnya h sehingga diperoleh titik-titik x0, x1, x2, xp.
Dari syarat awal yaitu titik (x0,y0) maka dengan rumus iterasi Euler kita dapat
menentukan y1 dengan absis x1 = x0 + h. Selanjutnya dari titik (x1,y1) kita dapat
menentukan y2 dengan absis x2 = x1 + h. Demikian seterusnya sampai didapatkan yp yang
absisnya adalah xp. Dengan demikian nilai yp merupakan solusi dari persamaan diferensial
pada titik xp.
Contoh :
Hitunglah solusi persamaan diferensial berikut pada x = 2:
dy
4 x 5 ,dimana syarat awal (x0,y0) = (1,1)
dx
Jawab :
Jika kita membagi antara x=1 dan x=2 menjadi 10 pita maka lebar masing-masing
pita (h) adalah :
Avid-06
42
Fisika Komputasi
x 2 x1 2 1
0.1
pita
10
yi 1 yi f ( x, y)h
y1 y0 (4.x0 5).h 1 (4.1 5).0,1 1 0.9 1.9
xi
yi
f(x,y)
yi+1
1.9
1.1
1.9
9.4
2.84
1.2
2.84
9.8
3.82
1.3
3.82
10.2
4.84
1.4
4.84
10.6
5.9
1.5
5.9
11.0
7.00
1.6
7.00
11.4
8.14
1.7
8.14
11.8
9.32
1.8
9.32
12.2
10.54
1.9
10.54
12.6
11.8
10
2.0
11.8
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0
V(t) 14.3 26.4 37.3 47.3 56.8 65.8 74.4 82.6 90.4 97.7
Berapa panjang jalan x yang ditempuh sampai dengan detik ke 5. Jika mula-mula (t0)
benda berada pada posisi x = 3.7
Jawab :
dx
v(t )
dt
Iterasi Euler orde 1 :
xi 1 xi v(t )h
Avid-06
h 0.5 detik
43
Fisika Komputasi
x1 x0 v(t )h
Saat i = 0 ,
ti
xi
v(t)
xi+1
0.5
3.7
14.3
10.85
1.0
10.85
26.4
24.05
1.5
24.05
37.3
42.70
2.0
42.70
47.3
66.35
2.5
66.35
56.8
94.75
3.0
94.75
65.8
127.65
3.5
127.5
74.4
164.85
4.0
164.85
82.6
206.15
4.5
206.15
90.4
251.35
5.0
251.35
97.7
dy
y
dx
pada saat x = 2 dan syarat awal adalah (0,1)
2.Tentukan solusi persamaan diferensial :
f (x) = x2 + 2
44
Fisika Komputasi
#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;
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 (x0,y0) = (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.
4.2.3 Metode Euler orde 2
Avid-06
45
Fisika Komputasi
Dari uraian deret Taylor untuk f(x+h), jika kita menyertakan suku-suku dengan h
pangkat 2 maka akan didapatkan persamaan :
46
Fisika Komputasi
dx=4;
//*************************
y=y+fx*delx+dx*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;
}
cout<<endl;
y2=y;
}
cout<<"Nilai Fungsi di x= "<<x2<<"
cout<<endl;
adalah : "<<y;
Coba jalankan program tersebut dan berikan masukan syarat awal (x0,y0) = (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.
yn1 y n f ( xn , y n , h).......................................................................................(4.5)
dimana
f ( xn , y n , h) a1k1 a2 k 2 ... am k m
h xn1 xn
dengan
k1 hf ( xn , y n )
k 2 hf ( xn p1h, y n q11k1
k3 hf ( xn p2 h, y n q21k1 q22k 2 )
...
...
...
47
Fisika Komputasi
y n1 y n hf ( xn , y n )
4.3.2 Runge-Kutta orde 2
Jika diambil m = 2 maka akan menghasilkan iterasi Runge-Kutta orde 2 yaitu :
k1 hf ( xn , y n )
k 2 hf ( xn p1h, y n q11k1 )
jadi dalam hal ini kita perlu menentukan nilai-nilai dari a1 , a2 , p1 , dan q11 . Untuk
mendapatkan nilai dari konstanta-konstanta tersebut maka pertama-tama kita lihat uraian
deret Taylor sampai orde 2 yaitu :
f ( x h) f ( x) f ( x, y)h 1
f ( x, y) f y ( x, y) f ( x, y) h 2 ....................(4.9)
2 x
Jika dinyatakan dengan rumus iterasi maka persamaan (4.8) menjadi :
1
f x ( xn , y n ) f y ( xn , y n ) f ( xn , y n ) h 2 ......................(4.10)
2
untuk k2 jika diuraikan dalam deret Taylor akan menjadi :
y n1 y n f ( xn , y n )h
k 2 f ( xn , y n ) f x ( xn , y n ) p1h f y ( xn , y n )q11k1 h
f y ( xn , y n ) f ( xn , y n )a2 q11h 2
a2 q11 h 2 .................................................................................................(4.11)
Avid-06
48
Fisika Komputasi
a1 a2 1........................................................................................................(4.12)
a2 p1 1 2 ..........................................................................................................(4.13)
a2 q11 1 2 .........................................................................................................(4.14)
a) Metode Heun
Dalam metode ini diambil nilai dari konstanta :
a1 a2
p1 q11 1
Sehingga persamaan iterasi Runge-Kutta orde 2 menjadi :
yn1 y n 1 2 k1 1 2 k 2 .....................................................................................(4.15)
dimana
k1 hf ( xn , y n )
k 2 hf ( xn h, y n k1 )
b) Metode Raltson
Dalam metode ini diambil nilai dari konstanta :
a1
a2 2 3
p1 q11 3 4
Sehingga persamaan iterasi Runge-Kutta orde 2 menjadi :
k1 hf ( xn , y n )
k 2 hf ( xn 3 4 h, y n 3 4 k1 )
c) Metode Poligon
Dalam metode ini diambil nilai dari konstanta :
a1 0
p1 q11
a2 1
1
yn1 y n k 2 ...................................................................................................(4.17)
dimana
k1 hf ( xn , y n )
k 2 hf ( xn 1 2 h, y n 1 2 k1 )
Contoh :
Avid-06
49
Fisika Komputasi
dy
4x 5
dx
dimana syarat awal (x0,y0) = (1,1)
Jawab :
Jika kita membagi antara x=1 dan x=2 menjadi 10 pita maka lebar masing-masing
pita (h) adalah :
h
x 2 x1 2 1
0.1
pita
10
y n1 y n 1 2 k1 1 2 k 2
dimana
k1 hf ( xn , y n )
k 2 hf ( xn h, y n k1 )
sehingga :
y1 y0 12 k1 12 k 2
k1 0.1.(4.x0 5) 0.1(4.1 5) 0.9
k 2 0.1.(4.( x0 h) 5) 0.1(4.(1 0.1) 5) 0.1(9.4) 0.94
jadi
y1 y0 12 k1 12 k 2 1 12 (0.9) 12 (0.94)
Avid-06
xi
yi
k1
k2
yi+1
0.9
0.94
1.92
1.1
1.92
0.94
0.98
2.88
1.2
2.88
0.98
1.02
3.88
1.3
3.88
1.02
1.06
4.92
1.4
4.92
1.06
1.10
6.00
1.5
6.00
1.10
1.14
7.12
1.6
7.12
1.14
1.18
8.28
1.7
8.28
1.18
1.22
9.48
1.8
9.48
1.22
1.26
10.72
1.9
10.72
1.26
1.30
12.00
50
Fisika Komputasi
51
Fisika Komputasi
} //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;
}
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<<"
cout <<endl;
cout<<"Banyaknya iterasi = "<<n;
cout<<endl;
adalah : "<<yy;
Coba jalankan program tersebut dan berikan masukan syarat awal (x0,y0) = (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
52
Fisika Komputasi
adalah : "<<yy;
}
Avid-06
53
Fisika Komputasi
Coba jalankan program tersebut dan berikan masukan syarat awal (x0,y0) = (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.
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
54
Fisika Komputasi
{
x=xx+delx/2;
y=yy+k[i]/2;
}
} //for
xx=xx+delx;
yy=yy+k[2]; //iterasi runge-kutta orde 2 - Poligon
} //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<<"
cout <<endl;
cout<<"Banyaknya iterasi = "<<n;
cout<<endl;
adalah : "<<yy;
Coba jalankan program tersebut dan berikan masukan syarat awal (x0,y0) = (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.
k1 hf ( xn , y n )
k 2 hf ( xn 1 2 h, y n 1 2 k1 )
k3 hf ( xn h, y n k1 2k 2 )
4.3.5 Program Komputer Runge -Kutta orde 3
Avid-06
55
Fisika Komputasi
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++
//**************************************************************************************
#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):
Avid-06
56
Fisika Komputasi
{
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)
{
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<<"
cout <<endl;
cout<<"Banyaknya iterasi = "<<n;
cout<<endl;
adalah : "<<yy;
Coba jalankan program tersebut dan berikan masukan syarat awal (x0,y0) = (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.
k1 hf ( xn , y n )
k 2 hf ( xn 1 2 h, y n 1 2 k1 )
k3 hf ( xn 1 2 h, y n 1 2 k 2 )
k 4 hf ( xn h, y n k 3 )
Avid-06
57
Fisika Komputasi
58
Fisika Komputasi
{
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;
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<<"
cout <<endl;
cout<<"Banyaknya iterasi = "<<n;
cout<<endl;
adalah : "<<yy;
Coba jalankan program tersebut dan berikan masukan syarat awal (x0,y0) = (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.
Avid-06
59
Fisika Komputasi
ax by cz k
Dimana
x,y,z
= variabel
a,b,c
= koefisien
= konstanta
Sedangkan yang dimaksud dengan Sistem persamaan Linear adalah beberapa persamaan
linear yang saling berhubungan dimana banyaknya koefisien, variabel, dan konstanta
adalah sama. Agar sistem persamaan linear tersebut dapat dicari solusinya (dapat dihitung
nilai variabelnya) maka banyaknya persamaan dalam sistem persamaan linear harus sama
dengan banyaknya variabel. Contoh sistem persamaan linear :
x 3y z 7
4 x 4 y 3z 15
5x 8 y 2 z 25
Atau persamaan diatas bisa ditulis :
x1 3x2 x3 7
4 x1 4 x2 3x3 15
5x1 8x2 2 x3 25
Tampak dalam sistem persamaan linear diatas banyaknya persamaan dan variabel adalah
sama yaitu 3.
Secara umum sistem persamaan linear dinyatakan dengan :
..........................................................
am1 x1 am 2 x2 am3 x3 ... amn xn bm
Sistem persamaan linear tersebut terdiri dari m persamaan dan n variabel. Persamaan
linear tersebut akan dapat diselesaikan jika jumlah m = n. Penyelesaian persaman linear
Avid-06
60
Fisika Komputasi
adalah mencari nilai xi (i = 1,2,...,n). Sistem persamaan linear (5.1) dapat dinyatakan
dalam bentuk matrik yaitu :
a11
a
21
...
a m1
a12
a 22
...
am2
... a1n x1 b1
... a 2 n x 2 b2
..........................................................(5.2)
... ... ... ...
... a mn x n bm
a11
a
A = 21
...
a m1
a12
a 22
...
am2
... a1n
x1
b1
b
... a 2 n
x2
, x=
, dan B = 2
...
...
... ...
... a mn
xn
b m
Matrik A disebut matrik koefisien atau matrik Jacobian. Vektor x disebut sebagai
vektor variabel dan vektor B disebut sebagai vektor Konstanta.
Augmented Matrix (matrik perluasan) adalah perluasan dari matrik koefisien A dengan
menambahkan vektor B pada kolom terakhir dari matrik A.
Augmented (A) = [A B]
Sehingga Augmented Matrik dari persamaan linear simultan (5.2) dapat dituliskan :
a11
a
21
...
a m1
a12
a 22
...
am2
... a1n
... a 2 n
... ...
... a mn
b1
b2
.........................................................................(5.3)
...
bm
Contoh permasalahan yang dapat dinyatakan dalam bentuk sistem persamaan linear
misalnya :
Contoh 1 :
Seorang pembuat boneka ingin membuat 2 macam boneka yaitu boneka A dan
boneka B. Kedua boneka tersebut dibuat dengan menggunakan 2 macam bahan yaitu kain
dan kancing. Andaikan boneka A memerlukan 10 meter kain dan 6 kancing sedangkan
boneka B memerlukan 8 meter kain dan 8 kancing maka hitunglah berapa buah boneka A
dan boneka B yang dapat dihasilkan jika kita memiliki 82 meter kain dan 62 kancing.
Masalah ini dapat dimodelkan dengan menyatakan :
x1 = jumlah boneka A
Avid-06
61
Fisika Komputasi
x2 = jumlah boneka B
Sehingga untuk setiap bahan (kain dan kancing) dapat dinyatakan persamaan :
10 untuk boneka A + 8 untuk boneka B = 82 --- > kain
6 untuk boneka A + 8 untuk boneka B = 62 --- > kancing
Persamaan diatas dapat dinyatakan dengan :
10 x1 + 8 x2 = 82
6 x1 + 8 x2 = 62
Penyelesaian dari persamaan tersebut adalah nilai x1 dan x2 yang memenuhi kedua
persamaan diatas. Ada beberapa metode yang dapat dipakai untuk mencari solusi dari
sistem persamaan linear. Metode metode ini akan dijelaskan pada sub bab berikutnya.
Teorema 5.1
Suatu sistem persamaan linear mempunyai penyelesaian tunggal bila memenuhi
syarat-syarat sebagai berikut :
- bentuk sistem persamaan linear bujursangkar, dimana jumlah persamaan linear sama
dengan jumlah variabel bebas
- sistem persamaan linear bersifat non-homogen, yaitu minimal ada satu nilai vektor
konstanta B tidak nol atau ada bn 0
- determinan dari matrik koefisien A tidak sama dengan nol
Untuk menyelesaikan permasalahan-permasalahan sistem persamaan linear dapat
dilakukan dengan menggunakan metode-metode analitik seperti pemakaian metode grafis,
aturan Crammer, atau invers matrik. Metode-metode tersebut dapat dilakukan dengan
mudah apabila jumlah variabel dan jumlah persamaannya di bawah 4, tetapi bila
ukurannya besar maka metode-metode diatas menjadi sulit dilakukan, sehingga
pemakaian metode numerik menjadi suatu alternatif yang banyak digunakan. Metode
numerik yang dapat digunakan untuk menyelesaikan permasalahan sistem persamaan
linear antara lain :
- metode Eliminasi Gauss
- metode Eliminasi Gauss-Jordan
- Metode Iterasi Gauss-Seidal
5.2 Metode Eliminasi Gauss
Metode Eliminasi Gauss merupakan metode yang dikembangkan dari metode
eliminasi, yaitu menghilangkan atau mengurangi jumlah variabel sehingga dapat
diperoleh nilai dari suatu variabel. Untuk menggunakan metode Eliminasi Gauss ini,
terlebih dahulu bentuk matrik diubah menjadi Augmented Matrik sebagai berikut :
Avid-06
62
Fisika Komputasi
a11
a
21
...
a m1
a12
a 22
...
am2
... a1n
... a 2 n
... ...
... a mn
b1
b2
.........................................................................(5.4)
...
bm
Metode Eliminasi Gauss adalah suatu metode dimana Augmented matrik (5.4) pada
bagian kiri diubah menjadi matrik segitiga atas atau segitiga bawah dengan menerapkan
Operasi Baris Elementer (OBE).
a11 a12
a
21 a 22
a31 a32
... ...
a n1 a n 2
a13
a 23
a33
...
a n3
...
...
...
...
...
a1n
a2n
a3n
...
a nn
b1
b2
b3
...
bn
c11 c12
0 c
22
0
0
... ...
0
0
c13
c 23
c33
...
0
...
...
...
...
...
c1n
c2n
c3n
...
a nn
d1
d 2
d3
...
d n
xn
dn
c nn
xn 1
1
cn1,n 1
(d n 1 cn 1,n xn )
.................................
x2
1
(d 2 c23 x3 c24 x4 ... c2 n xn )
c22
x1
1
(d1 c12 x2 c13 x3 ... c1n xn )
c11
Operasi Baris Elementer adalah (OBE) adalah suatu operasi perubahan nilai elemen
matrik berdasarkan barisnya, tanpa mengubah matriknya. OBE pada baris ke i+k dengan
dasar baris ke i dapat ditulis :
aik, j aik, j c.a i,j
Dimana c adalah konstanta pengali yang diambil dari perbandingan antara nilai a ik,i dan
a i,i
Contoh :
Selesaikan sistem persamaan linear berikut ini :
x1 x2 x3 6
x1 2 x2 x3 2
Avid-06
63
Fisika Komputasi
2 x1 x2 2 x3 10
Jawab :
Augmented matrik dari sistem persamaan linear tersebut adalah :
1 1 1 6
1 2 1 2
2 1 2 10
Lakukan OBE sebagai berikut :
1
6
1 1
B2 B2 B1 0 1 2 4
B3 B3 2 B1 0 1 0 2
6
1 1 1
0 1 2 4
B3 B3 B2 0 0 2 6
Sehingga didapat penyelesaian yaitu :
x3
6
3
2
1
x2 (4 (2)(3)) 2
1
1
x1 (6 2 3) 1
1
5.2.1 Algoritma Metode Eliminasi Gauss
Adapun algoritma dari metode Eliminasi Gauss adalah :
1.Masukkan matrik A dan vektor B beserta ukurannya
2.Buat Augmented Matrik [A|B], namakan dengan A
3.Untuk baris ke-i dimana i=1 sampai n, perhatikan apakah nilai ai,i sama dengan nol.
Jika Ya :
Tukarkan baris ke-i dengan baris i+k n, dimana ai+k,i tidak sama dengan nol, bila tidak
ada berarti perhitungan tidak bisa dilanjutkan dan proses dihentikan tanpa penyelesaian
Jika tidak : lanjutkan
4.Untuk baris ke-j, dimana j = i+1 sampai n, Lakukan Operasi Baris Elementer OBE :
- hitung c
a j, i
a i, i
64
Fisika Komputasi
5.Hitung nilai xi, untuk i = n sampai 1 (bergerak dari baris ke-n sampai baris ke-1)
xi
1
(b i a i, j1 x i 1 a i, j 2 x i 2 ... a i,n x n )
a i,i
65
Fisika Komputasi
for (j=i+1;j<=n;j++)
{
//operasi baris elementer
c= A[j][i]/A[i][i];
for (k=1;k<=n+1;k++)
{
A[j][k]=A[j][k]-c*A[i][k];
}
}
}
}
//tampilkan matrik hasil operasi baris elementer
for (i=1;i<=n;i++)
{
for (j=1;j<=n+1;j++)
{
cout<<"A["<<i<<j<<"] = "<<A[i][j];
cout <<endl;
}
cout<<endl;
}
//hitung variabel X
for (i=n;i>=1;i--)
{
if (i==n)
{
X[i]=A[i][n+1]/A[i][i];
}
else
{
X[i]=A[i][n+1];
for (j=i+1;j<=n;j++)
{
X[i]=X[i]-A[i][j]*X[j];
}
X[i]=X[i]/A[i][i];
}
}
//tampilkan X
for (i=1;i<=n;i++)
{
cout<<"X["<<i<<"] = "<<X[i]<<endl;
}
}
Cobalah jalankan program tersebut dan kemudian cobalah untuk menyelesaikan masalah
sistem persamaan linear berikut ini :
x1 x2 x3 6
x1 2 x2 x3 2
2 x1 x2 2 x3 10
Berikut ini adalah hasil eksekusi program untuk masalah tersebut diatas :
Ukuran Matrik : 3
Avid-06
66
Fisika Komputasi
Matrik A :
A[11] = 1
A[12] = 1
A[13] = 1
A[21] = 1
A[22] = 2
A[23] = -1
A[31] = 2
A[32] = 1
A[33] = 2
Vektor B :
B[1] = 6
B[2] = 2
B[3] = 10
A[11] = 1
A[12] = 1
A[13] = 1
A[14] = 6
A[21] = 0
A[22] = 1
A[23] = -2
A[24] = -4
A[31] = 0
A[32] = 0
A[33] = -2
A[34] = -6
X[1] = 1
X[2] = 2
X[3] = 3
a11 a12
a
21 a 22
a31 a32
... ...
a n1 a n 2
a13
a 23
a33
...
a n3
...
...
...
...
...
a1n
a2n
a3n
...
a nn
b1
b2
b3
...
bn
1
0
...
0
0
1
0
...
0
0
0
1
...
0
...
...
...
...
...
0
0
0
...
1
d1
d 2
d3
...
d n
Penyelesaian dari sistem persamaan linear ini adalah nilai d1,d2,d3,...,dn dan atau :
x1 = d1 , x2 = d2 , x3 = d3 , ..., xn = dn
Cara yang digunakan untuk mendapatkan matrik diagonal dalam metode Gauss Jordan
adalah sama seperti metode Gauss yaitu dengan menerapkan Operasi Baris Elementer
(OBE).
Contoh :
Selesaikan sistem persamaan linear berikut ini :
Avid-06
67
Fisika Komputasi
x1 x2 3
2 x1 4 x2 8
Jawab :
Augmented matrik dari sistem persamaan linear tersebut adalah :
1 1 3
2 4 8
1 1 3
B2 B2 2B1 0 2 2
1 1 3
B2 B2 2
0 1 1
B1 B1 B2 1 0 2
0 1 1
x1 2
x2 1
5.3.1 Algoritma Metode Eliminasi Gauss Jordan
Dari uraian diatas maka dapat dibuat algoritma dari metode Gauss Jordan seperti
berikut ini :
1.Masukkan matrik A dan vektor B beserta ukurannya
2.Buat Augmented Matrik [A|B], namakan dengan A
3.Untuk baris ke-i dimana i=1 sampai n, perhatikan apakah nilai ai,i sama dengan nol.
Jika Ya :
Tukarkan baris ke-i dengan baris i+k n, dimana ai+k,i tidak sama dengan nol, bila tidak
ada berarti perhitungan tidak bisa dilanjutkan dan proses dihentikan tanpa penyelesaian
Jika tidak : lanjutkan
Jadikan nilai diagonalnya menjadi satu, dengan cara untuk setiap kolom k dimana k = 1
sampai n+1, hitung ai ,k
ai ,k
a i ,i
4.Untuk baris ke-j, dimana j = i+1 sampai n, Lakukan Operasi Baris Elementer OBE :
- hitung c a j ,i
-untuk kolom k dimana k = 1 sampai n+1 hitung
a j ,k a j ,k c.ai ,k
Avid-06
68
Fisika Komputasi
69
Fisika Komputasi
}
}
else
{
c=A[i][i];
for (kol=1;kol<=n+1;kol++) //elemen diagonal dibuat 1
{
A[i][kol]=A[i][kol]/c;
}
for (brs=1;brs<=n;brs++)
{
//operasi baris elementer
if (brs!=i)
{
c=A[brs][i];
for (kol=1;kol<=n+1;kol++)
{
A[brs][kol]=A[brs][kol]-c*A[i][kol];
}
}
}
}
}
//tampilkan matrik hasil operasi baris elementer
for (i=1;i<=n;i++)
{
for (j=1;j<=n+1;j++)
{
cout<<"A["<<i<<j<<"] = "<<A[i][j];
cout <<endl;
}
cout<<endl;
}
//hitung variabel X
for (i=1;i<=n;i++)
{
X[i]=A[i][n+1];
}
//tampilkan X
for (i=1;i<=n;i++)
{
cout<<"X["<<i<<"] = "<<X[i]<<endl;
}
}
Eksekusilah program tersebut dan kemudian cobalah untuk menyelesaikan masalah sistem
persamaan linear berikut ini :
x1 x2 3
2 x1 4 x 8
Berikut ini adalah hasil eksekusi program untuk masalah tersebut diatas :
Ukuran Matrik : 2
Matrik A :
A[11] = 1
A[12] = 1
A[21] = 2
Avid-06
70
Fisika Komputasi
A[22] = 4
Vektor B :
B[1] = 3
B[2] = 8
Augmented Matrik
A[11] = 1
A[12] = 1
A[13] = 3
A[21] = 2
A[22] = 4
A[23] = 8
A[11] = 1
A[12] = 0
A[13] = 2
A[21] = 0
A[22] = 1
A[23] = 1
X[1] = 2
X[2] = 1
..........................................................
am1 x1 am 2 x2 am3 x3 ... amn xn bm
Berilah nilai awal untuk setiap xi ( i = 1 sampai n) kemudian sistem persamaan linear
diatas ditulis menjadi :
x1
1
(b1 a12 x2 a13 x3 ... a1n xn )
a11
x2
1
(b2 a 21 x1 a 23 x3 ... a 2 n xn )
a 22
...............................................................
xn
1
(bn a n1 x1 a n 2 x2 ... a nn1 xn 1 )
a nn
71
Fisika Komputasi
nilai xi pada iterasi sebelumnya. Atau proses iterasi akan dihentikan jika sudah didapatkan
selisih antara 2 nilai iterasi berurutan sudah lebih kecil dari suatu toleransi error yang
ditentukan.
Contoh :
Selesaikan sistem persamaan linear berikut ini :
x1 x2 5
2 x1 4 x2 14
Jawab :
Berikan nilai awal : x1 = 0 dan x2 = 0
Susun persamaan menjadi :
x1 5 x2
x2
1
(14 2 x1 )
4
Iterasi 1 :
x1 5 0 5
x2
1
(14 2.5) 1
4
Iterasi 2 :
x1 5 1 4
x2
1
3
(14 2.4)
4
2
Iterasi 3 :
x1 5
x2
3 7
2 2
1
7
7
(14 2. )
4
2
4
Iterasi 4 :
x1 5
x2
7 13
4 4
1
13 15
(14 2. )
4
4
8
Iterasi 5 :
x1 5
Avid-06
15 25
8
8
72
Fisika Komputasi
x2
1
25
31
(14 2. )
4
8
16
Iterasi 6 :
x1 5
x2
31 49
16 16
1
49
63
(14 2. )
4
16
32
Iterasi 7 :
x1 5
x2
63 97
32 32
1
97 127
(14 2. )
4
32
64
Dapat dilihat nilai x1 dan x2 pada iterasi yang ke-7 sudah tidak berbeda jauh dengan nilai
pada iterasi ke-6, sehingga proses iterasi dapat dihentikan dan didapatkan penyelesaian :
x1
97
32
x2
127
64
xi
1
(bi ai , j x j )
a i ,i
j i
ei xi s i
7.Iterasi <-- iterasi + 1
8.Jika iterasi lebih dari max_iter atau terdapat ei < untuk i = 1 sampai n maka proses
dihentikan dan penyelesaiannya adalah xi (i =1 sampai n). Jika tidak , ulangi langkah 5
5.4.2 Program komputer Metode Iterasi Gauss Seidal
Dari algoritma Metode Iterasi Gauss Seidal maka selanjutnya kita dapat
mengimplementasikannnya dalam bentuk program komputer (bahasa Visual C++) :
Avid-06
73
Fisika Komputasi
74
Fisika Komputasi
Eksekusilah program tersebut dan kemudian cobalah untuk menyelesaikan masalah sistem
persamaan linear berikut ini :
x1 x2 5
2 x1 4 x 14
Berikut ini adalah hasil eksekusi program untuk masalah tersebut diatas :
Ukuran Matrik : 2
Matrik A :
A[11] = 1
A[12] = 1
A[21] = 2
A[22] = 4
Vektor B :
B[1] = 5
B[2] = 14
jumlah iterasi = 11
X[1] = 3.00391
X[2] = 1.99805
Soal Latihan :
1.Sebuah balok dengan massa 4 kg didorong dengan gaya 50 N. Di depan balok ini
terdapat balok lain yang massanya 2 kg. Setelah ke dua balok menempel, hitunglah
besar gaya kontak T antara kedua balok dan percepatannya a. Lantai dianggap licin.
4 kg
2 kg
50 N
(a)
4 kg
2 kg
F
(b)
x
y=-x
Gambar 5.1. Ilustrasi Eigen value dan Eigen Vektor
Avid-06
75
Fisika Komputasi
Bagaimanakah hasil pencerminan sebuah vektor yang ada di atas cermin? Misalnya
vektor (0,1) jika dicerminkan pada garis y = -x maka hasilnya adalah vektor (-1,0)
cermin
x
y=-x
Gambar 5.2. Pencerminan vektor (0,1)
cermin
x
y=-x
Gambar 5.2. Beberapa Eigen vektor pada pencerminan
P
1 0
Sedangkan transformasi pencerminan vektor (0,1) seperti diperlihatkan dalam gambar
(5.2) dinyatakan dengan :
0 1 0 1
1 0 1 0
Avid-06
76
Fisika Komputasi
VI I NTERPOLASI
Interpolasi merupakan proses untuk menentukan titik-titik antara dari n buah titik
dengan menggunakan suatu fungsi pendekatan. Ada beberapa metode Interpolasi yaitu :
-Interpolasi Linier
- Interpolasi Kuadratik
- Interpolasi Polinomial
- Interpolasi Lagrange
6.1 Interpolasi Linear
Interpolasi Linear merupakan proses menentukan titik-titik antara dari 2 buah titik
dengan menggunakan fungsi pendekatan yang berbentuk garis lurus
Persamaan garis lurus yang melalui 2 titik P1(x1,y1) dan P2(x2,y2) dapat dinyatakan dengan:
y y1
x x1
y2 y1 x2 x1
Sehingga persamaan dari interpolasi linier adalah :
y y1
y 2
( x x1 ) y1
x2 x1
Contoh :
Hitunglah nilai y untuk titik x = 2.1 yang berada diantara titik (1,1.5) dan (3,2.5)
Jawab :
P1 (1,1.5)
Avid-06
P2 (3,2.5)
77
Fisika Komputasi
x = 2.1
y
y2 y1
( x x1 ) y1
x2 x1
2.5 1.5
(2.1 1) 1.5
3 1
2.05
Jadi titik P3 (2.1,2.05)
Algoritma Interpolasi Linier :
1.Tentukan dua titik P1 dan P2 dengan koordinatnya masing-masing (x1,y1)
dan(x2,y2)
2.Tentukan nilai x dari titik yang akan dicari
3.Hitung nilai y dengan :
y2 y1
( x x1 ) y1
x2 x1
4.Tampilkan nilai titik yang baru Q(x,y)
y
Avid-06
78
Fisika Komputasi
P1 (1,5)
P2 (2,2)
P3 (3,3)
x = 2.5
y y1
Avid-06
( x x2 )( x x3 )
( x x1 )( x x3 )
( x x1 )( x x2 )
y2
y3
( x1 x2 )( x1 x3 )
( x2 x1 )( x2 x3 )
( x3 x1 )( x3 x2 )
79
Fisika Komputasi
y 5
(2.5 2)(2.5 3)
(2.5 1)(2.5 3)
(2.5 1)(2.5 2)
2
3
(1 2)(1 3)
(2 1)(2 3)
(3 1)(3 2)
2
Jadi titik P4 (2.5,2)
Algoritma Interpolasi Kuadratik :
1.Tentukan 3 titik input P1(x1,y1), P2(x2,y2) dan P3(x3,y3)
2.Tentukan nilai x dari titik yang akan dicari
3.Hitung nilai y dari titik yang dicari menggunakan rumus dari interpolasi kuadratik:
y y1
( x x2 )( x x3 )
( x x1 )( x x3 )
( x x1 )( x x2 )
y2
y3
( x1 x2 )( x1 x3 )
( x2 x1 )( x2 x3 )
( x3 x1 )( x3 x2 )
y a0 a1 x a2 x 2 ... an1 x n1
Masukkan nilai dari setiap titik ke dalam persamaan polynomial di atas dan diperoleh
persamaan simultan dengan n persamaan dan n variabel bebas:
n1
y1 a0 a1 x1 a2 x1 ... an1 x1
2
n1
y2 a0 a1 x2 a2 x2 ... an1 x2
2
n1
y3 a0 a1 x3 a2 x3 ... an1 x3
.................................................
2
n1
yn a0 a1 xn a2 xn ... an1 xn
2
Penyelesaian persamaan simultan di atas adalah nilai-nilai a0, a1, a2, a3, , an yang
merupakan nilai-nilai koefisien dari fungsi pendekatan polynomial yang akan digunakan.
Dengan memasukkan nilai x dari titik yang dicari pada fungsi polinomialnya, akan
diperoleh nilai y dari titik tersebut.
Contoh :
Hitunglah nilai y untuk titik x = 3 yang berada diantara titik (3.2,22), (2.7,17.8),
(1,14.2), dan (4.8,38.3)
Jawab :
80
Fisika Komputasi
1
J 1
...
1
x1
x2
x3
...
xn
x1 2
2
x2
2
x3
...
2
xn
...
...
...
...
...
n 1
x1
n 1
x2
n 1
x3
...
n 1
xn
y1
y2
y3
...
yn
81
Fisika Komputasi
y ai x i
i 0
y yi
i 1
j i
(x x j )
( xi x j )
Jika untuk 3 titik ( n =3) maka uraian dari fungsi Polinomial diatas adalah :
y y1
( x x2 )( x x3 )
( x x1 )( x x3 )
( x x1 )( x x2 )
y2
y3
( x1 x2 )( x1 x3 )
( x2 x1 )( x2 x3 )
( x3 x1 )( x3 x2 )
y yi
i 1
j i
(x x j )
( xi x j )
Avid-06
82
Fisika Komputasi
VII R EGRESI
Regresi adalah sebuah metode untuk mendapatkan fungsi pendekatan dari
sekumpulan titik-titik data. Ada beberapa metode Regresi yaitu :
- Regresi Linier
- Regresi Eksponensial
- Regresi Polinomial
7.1 Regresi Linear
Regresi Linear adalah metode untuk mendapatkan fungsi pendekatan yang
berbentuk linear dari sekumpulan titik data (xn,yn).
Fungsi linear merupakan fungsi yang berbentuk garis lurus yang dinyatakan dengan
persamaan :
y mx c
N xn yn xn yn
n 1 n 1
m n 1
2
N
N
2
N xn xn
n 1
n 1
c y mx
y
n 1
x
n 1
Contoh :
Avid-06
83
Fisika Komputasi
yn
0.5
2.5
2.0
4.0
3.5
6.0
5.5
Jawab :
N=7
7
xn 28
n 1
7
x
n 1
n 1
24
x y
140
n 1
119.5
7(119.5) 28(24)
0.8392857
7(140) 282
28
4
7
24
3.428571
7
y 0.8392857 x 0.0714282
Avid-06
84
Fisika Komputasi
n
xn
yn
1 1.0 0.910714
2 1.5 1.33036
3 2.0
1.75
4 2.5 2.16964
5 3.0 2.58929
6 3.5 3.00893
7 4.0 3.42857
8 4.5 3.84821
9 5.0 4.26786
10 5.5
4.6875
11 6.0 5.10714
12 6.5 5.52679
13 7.0 5.94643
14 7.5 6.36607
15 8.0 6.78571
16 8.5 7.20536
17 9.0
7.625
18 9.5 8.04464
19 10.0 8.46429
Algoritma Regresi Linier :
1. Tentukan N titik data yang diketahui dalam (xi,yi) untuk i=1,2,3,,N
2. Hitung nilai m dan c dengan menggunakan persamaan dari regresi linier di atas
3. Tampilkan persamaan fungsi linier
4. Hitung fungsi linier tersebut dalam range x dan step dx tertentu
5. Tampilkan hasil tabel (xn,yn) dari hasil fungsi linier tersebut.
y eax b
Jika kita mengambil nilai log dari fungsi tersebut maka didapatkan :
ln y ln(eaxb )
ln y ax b
Jika dimisalkan :
z ax b
maka :
z ln y
Avid-06
85
Fisika Komputasi
Jadi untuk menentukan fungsi pendekatan eksponensial dalam regresi eksponensial dapat
digunakan metode regresi linear dimana nilai ordinat (y) dari titik diganti dengan z yaitu :
z ln y
Contoh :
Carilah fungsi pendekatan eksponensial dari titik-titik data berikut ini :
xn
1
2
3
4
5
yn
0.5
1.7
3.4
5.7
8.4
zn = ln yn
-0.6931
0.5306
1.2238
1.7405
2.1282
Jawab :
N=5
5
x
n 1
15
n 1
xn 55
2
n 1
4.93
x z
n 1
n n
21.6425
5(21.6425) 15(4.93)
0.685
5(55) 152
15
3.0
5
4.93
0.986
5
y e0.685x 1.069
86
Fisika Komputasi
n
1
2
3
4
5
6
7
8
9
10
xn
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0
5.5
yn
0.6811
0.9593
1.3512
1.9031
2.6805
3.7754
5.3175
7.4895
10.5487
14.8574
n n
xi
ni 1
x n 1
i
i 1
n n2
xi
i 1
...
xi
n 1
i 1
n
i 1
n
n 1
i 1
xi
n2
n 1
i 1
n
i 1
n
x
i 1
...
...
x
i 1
x
i 1
...
...
...
n n
xi yi
i 1
an ni 1
n
2 n 1
n 1
xi
xi yi
an 1
i 1
i 1
n
n
a
n2
2n2
n2
x
x
y
i
i
... i 1
i 1
... a
...
0 n
n
n
xi
yi
i 1
i 1
...
...
xi
2n
Hasil dari model matrik normal tersebut adalah nilai-nilai dari a0,a1,a2,...an.
Contoh :
Carilah fungsi pendekatan polinomial dari titik-titik data berikut ini :
Avid-06
87
Fisika Komputasi
xi
0
1
2
3
4
5
yi
2.1
7.7
13.6
27.2
40.9
61.1
Jawab :
n=6
6
x
i 1
15
x 2.5
152.6
y 25.433
y
i 1
xi yi 585.6
i 1
6
x
i 1
yi 2488.8
xi 225
xi 55
2
i 1
i 1
x
i 1
979
6 15 55 a0 152.6
15 55 225 a 585.6
a2 1.86071
Sehingga persamaan fungsi polinomial dari titik-titik data tersebut adalah :
88
Fisika Komputasi
i
1
2
3
4
5
6
7
8
9
10
xi
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0
5.5
yi
6.69857
10.2041
14.64
20.0062
26.3028
33.5298
41.6871
50.7748
60.7928
71.7411
Avid-06
89
Fisika Komputasi
Avid-06
90