tugas prokom 2

9
Fahmi Atriadi – Tugas II Komputasi Proses Resume Program 1. Buatlah Routine dengan menggunakan metode penyetenghan interval, newton raphson, dan secant untuk menghitung persamaan di bawah ini: a. x 6 – x – 1 = 0 b. e x – 1/x -1 = 0 Deadline tanggal dikumpulkan : 20 September 2010

Upload: fahmi-atriadi

Post on 23-Jun-2015

182 views

Category:

Documents


7 download

DESCRIPTION

Pengen bisa matlab, sampai bisa minimal kayak pak song..amiin

TRANSCRIPT

Page 1: tugas prokom 2

Fahmi Atriadi – Tugas II Komputasi Proses

Resume Program

1. Buatlah Routine dengan menggunakan metode penyetenghan interval, newton raphson, dan secant untuk menghitung persamaan di bawah ini:

a. x6 – x – 1 = 0 b. ex – 1/x -1 = 0

Deadline tanggal dikumpulkan : 20 September 2010

Page 2: tugas prokom 2

if f(xl)*f(xr)<0 selisih = abs((xr-xl)/xr); k=0; while (k < iter_max) & selisih >= xtol k = k+1; xm = (xl+xr)/2; fm = f(xm); if f(xm)*f(xl)<=0 xr = xm; else xl = xm; end selisih = abs((xl-xr)/xr); endnilai_akar = xmtoleransi = selisihiterasi = ky=0;else disp('Akar tidak diapit')end

Fahmi Atriadi – Tugas II Komputasi Proses

Resume Program

a. Metode Penyetengahan Interval

Metode ini memerlukan batas kiri(xl) dan kanan(xr) dalam setiap tahap perulangan akan membuat salah satu batas bergeser ke tengah bila perkalian nilai fungsinya (f(xl)*f(xr))selalu < 0. Karena dengan syarat seperti itu kita akan bisa semakin mendekati nilai x pembuat nol (akarnya) ketika kita menemukan nilai (f(x)*f(xr)) 0 (bila xl yang bergeser) atau (f(x)*f(xl)) 0 (bila xr yang bergeser), dengan syarat seperti ini kita bisa menghentikan program dan mengambil nilai akar hampirannya (x). Penghentian juga bisa dilakukan terhadap x terhadap xtol. Dalam program ini saya menggunakan toleransi terhadap nilai x bukan terhadap nilai fungsinya. Berikut programnya saya lampirkan:

Bila pada awal program dijalan terjadi perkalian nilai fungsi yang >= 0 maka program terpaksa harus diulang karena akar tidak diapit oleh kedua batas tersebut. Dalam program di atas akan muncul disp(‘Akar tidak diapit’) maka program akan berhenti.

Nilai untuk persamaan nomor 1 (polinom) dengan menggunakan metode ini bisa saya dapatkan dengan baik asalkan memenuhi persyaratan perkalian fungsi yang sudah saya sebutkan sebelumnya. Sedangkan untuk persamaan nomor 2 saya bisa mendapatkan kekonvergenan dalam interval -2 sampai dengan 2. Nilai akarnya yang dihasilkan adalah 0.8065 sehingga nilai fungsinya mendekati nol dengan nilai 1.2846e-004 (1.2846 x 10-4).

Deadline tanggal dikumpulkan : 20 September 2010

Page 3: tugas prokom 2

Fahmi Atriadi – Tugas II Komputasi Proses

b. Metode Newton Raphson

Untuk metode Newton Raphson ini saya membuat 2 main program : NR_polinom dan newton. Letak perbedaannya yaitu penyelesaian turunannya. Untuk NR_polinom, penyelesaiannya dikerjakan secara otomatis. Saya menyertakan sub program yang mengeksekusi penyelesaian turunan pertama dari fungsi yang terdefinisi dalam bentuk matriks koefisien persamaan fungsi yang dicari. Berikut saya lampirkan program NR_polinom dan program dalam menurunkan fungsi persamaan:

1. Program NR_Polinom

Deadline tanggal dikumpulkan : 20 September 2010

clc;clear alldisp(' Bismillahirrahmanirrahiim')disp(' Program Matlab untuk mencari akar persamaan fungsi Polinom')disp(' Dengan menggunakan metode Newton Raphson')fsc = input(' Masukkan koefisien persamaan polinom dalam bentuk Matriks 1xn [. . .] = ');x0 = input(' Masukkan nilai tebakkan awal, x0 = ');xtol = input(' Masukkan nilai toleransi yang diinginkan, xtol = ');iter_max = input(' Masukkan jumlah iterasi maksimal yang diinginkan,iterasi Maksimum = ');% Contoh input :% fsc = [1 0 0 0 0 -1 -1];% x0 = -2 ;% xtol = 1e-5% iter_max = 1000;koef_pers_awal = [fsc]jumlah_akar_pembuat_nol_max = size (koef_pers_awal,2);akar_final = 0;iterasi = 0 ;nilai_fungsi_akar_final = 0;for jumlah_akar_pembuat_nol=1:jumlah_akar_pembuat_nol_max-1 nilai_pers_fungsi_baru=x0; flag=1; koef_pers_turunan=turunan(koef_pers_awal); pangkat_tertinggi_variabel_fungsi_awal=size(koef_pers_awal,2); pangkat_tertinggi_variabel_fungsi_turunan=size(koef_pers_turunan,2); while flag==1 nilai_pers_fungsi_awal=nilai_pers_fungsi_baru; fx=0; dfx=0; syarat_perulangan_penghitungan_fx_dfx=1;

Page 4: tugas prokom 2

Fahmi Atriadi – Tugas II Komputasi Proses

2. Program Turunan

Dilihat dari kedua program di atas bahwa program ini hanya terbatas kepada persamaan polinom yang biasa. Karena proses penurunannya hanya di setting untuk persamaan seperti axn+bxn-1 + . . . + c. Oleh karena itu saya membuat persamaan untuk metode Newton Raphson 2 buah. Untuk program kedua, penyelesaian turunan di- setting secara manual. Berikut potongan program yang menyatakan hal ini :

Deadline tanggal dikumpulkan : 20 September 2010

while syarat_perulangan_penghitungan_fx_dfx==1 jumlah_max_diturunkan=pangkat_tertinggi_variabel_fungsi_awal-1; for i=1:pangkat_tertinggi_variabel_fungsi_awal fx=fx+koef_pers_awal(i)*nilai_pers_fungsi_awal^jumlah_max_diturunkan; jumlah_max_diturunkan=jumlah_max_diturunkan-1; end jumlah_max_diturunkan=pangkat_tertinggi_variabel_fungsi_turunan-1; for i=1:pangkat_tertinggi_variabel_fungsi_turunan dfx=dfx+koef_pers_turunan(i)*nilai_pers_fungsi_awal^jumlah_max_diturunkan; jumlah_max_diturunkan=jumlah_max_diturunkan-1; end if dfx==0 nilai_pers_fungsi_awal=nilai_pers_fungsi_awal+1; else syarat_perulangan_penghitungan_fx_dfx=0; end end iterasi = iterasi + 1; nilai_pers_fungsi_baru = nilai_pers_fungsi_awal - fx/dfx; if iterasi >= iter_max flag=0; elseif abs(nilai_pers_fungsi_baru-nilai_pers_fungsi_awal)<=xtol flag=0; akar_final(jumlah_akar_pembuat_nol)=nilai_pers_fungsi_baru nilai_fungsi_akar_final(jumlah_akar_pembuat_nol)=fx; toleransi =abs(nilai_pers_fungsi_baru-nilai_pers_fungsi_awal) iterasi_ke = iterasi end end end

function rumus_turunan=turunan(koef_pers_awal)banyaknya_penurunan_max=size((koef_pers_awal),2)-1;rumus_turunan=0;for i=1:size((koef_pers_awal),2)-1 rumus_turunan(i)=banyaknya_penurunan_max*koef_pers_awal(i); banyaknya_penurunan_max=banyaknya_penurunan_max-1;end

function [akar,toleransi,iterasi] = newton(f,g,x,xtol,iter_max)fa = inline (f);fb = inline (g);. . . .

end

Page 5: tugas prokom 2

Fahmi Atriadi – Tugas II Komputasi Proses

fa didefinisikan sebagai fungsi yang akan dicari persamaan akarnya sedangkan fb didefinisikan sebagai persamaan hasil turunan fa. Nah, dengan adanya program ini kita bisa menyelesaikan persoalan exponen di atas asalkan g diketahui. Oleh karena itu kekurangan dari program ini adalah bahwa kita diharuskan mengetahui turunan dari fa. Untuk persoalan sederhana mungkin kita akan mudah menemukan turunannya, tetapi untuk persoalan yang semakin kompleks maka harus dibayar dengan kesulitan yang lebih besar pula.

Yang perlu diperhatikan dalam menggunakan metode newton raphson adalah nilai dari fungsi turunan bila nilai x dimasukkan. Bila nilai tersebut sama dengan 0 maka program mesti diulang dengan mengganti x awalnya.

Nilai akar yang didapat untuk 1 dari 2 persamaan di atas cukup mudah ditemukan dengan menggunakan metode ini. Untuk persamaan polinom biasa saya lebih suka menyelesaikan dengan NR_polinom karena saya tidak perlu repot – repot dalam mencari nilai turunannya. Termasuk untuk persoalan polinom (nomor 1), saya menggunakan program tersebut.Sedangkan untuk persamaan exponen, saya menggunakan program newton karena saya mengalami kesulitan dalam membuat program fungsi seperti ini sehingga bisa dicarikan turunannya secara otomatis. Untungnya persamaan exponen tersebut mudah dicarikan turunannya. Namun, tetap saya tidak bisa menemukan akar pembuat nolnya karena saya selalu menemukan kedivergenan dalam pencarian akar tersebut.

Deadline tanggal dikumpulkan : 20 September 2010

Page 6: tugas prokom 2

function [akar,toleransi,iterasi] = secant(f,x,x2,xtol,iter_max)fa = inline (f);xb = x2 -(fa(x2)*(x2-x))/(fa(x2)-fa(x));i = 1 ;disp(' Bismillahirrahmanirrahiim')disp(' Program Matlab untuk mencari akar persamaan fungsi ')disp(' Dengan menggunakan metode Penyetengahan Interval')fprintf('akar = %.10f dengan toleransi %.22f pada iterasi ke - g\n',xb,((xb-x)/xb)^2,i)while ((xb-x)/xb)^2 > xtol & i<=iter_max; i = i + 1; x = x2; x2 = xb; xb = x2 -(fa(x2)*(x2-x))/(fa(x2)-fa(x)); akar = xb; toleransi = ((xb-x)/xb)^2 ; iterasi = i ; fprintf('akar = %.10f dengan toleransi %.22f pada iterasi ke –%g\n', xb,((xb-x)/xb)^2,iterasi)endend

Fahmi Atriadi – Tugas II Komputasi Proses

c. Metode Secant

Metode ini tidak jauh berbeda dari newton raphson. Hanya saja metode ini punya kelebihan tersendiri dibandingkan metode newton raphson. Hal ini dikarenakan metode secant tidak memerlukan fungsi turunan dari fungsi yang ingin dicarikan akarnya. Sebagai gantinya kita wajib menyertakan 2 tebakan dalam definisi yang kita berikan di awal. Tebakan tersebut akan digunakan dalam pencarian selisih nilai fungsi unsur tebakan ke-2 dengan nilai fungsi unsur tebakan ke-1. Kemudian selisih antara tebakan ke - 2 dengan tebakan ke – 1 akan digunakan sebagai pengali nilai fungsi untuk tebakan 2. Nah, kedua selisih ini digunakan sebagai hampiran nilai turunan bila kita menggunakan metode newton raphson. Berikut program yang saya buat sebagai gambaran uraian di atas :

Cukup jelas perbedaan program ini dengan program metode newton raphson. Kita tidak perlu takut dengan pembagi dari turunan yang bernilai 0 karena kita tidak menggunakan persamaan turunan dan tentunya kita bisa menentukan tebakan(x dan x2) semau kita agar pembagi tidak nol. Akan tetapi tetap dalam menentukan tebakan sebaiknya mendekati nilai akar yang dicari agar proses lebih cepat.

Dalam pencarian nilai akar untuk persamaan polinom (nomor 1) seperti metode – metode lainnya bisa digunakan dengan baik sehingga bisa menghasilkan nilai akar. Sedangkan untuk persamaan nomor 2 saya mendapatkan bahwa kedivergenan terjadi.

Kesimpulan :

1. Metode paling baik dari ketiga program di atas dalam menghitung fungsi exponen adalah metode penyetengahan interval karena merupakan metode yang tidak mengalami error (kedivergenan) pada interval [-2,2]

Deadline tanggal dikumpulkan : 20 September 2010

Page 7: tugas prokom 2

Fahmi Atriadi – Tugas II Komputasi Proses

2. Bila menggunakan program newton raphson yang nilai turunannya sama dengan nol, silakan coba dengan menggunakan metode secant untuk mendapatkan hasil yang hampiran pembagi tersebut sehingga tujuan masih bisa tetap tercapai.

3. Gunakan program newton untuk persamaan polinom biasa

Deadline tanggal dikumpulkan : 20 September 2010