P. 1
laporan praktikum metode numerik

laporan praktikum metode numerik

|Views: 1,561|Likes:
Published by SAFRIADI

More info:

Published by: SAFRIADI on Jun 20, 2010
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOC, PDF, TXT or read online from Scribd
See more
See less

03/21/2013

pdf

text

original

BAB I PENDAHULUAN 1.1. Latar Belakang.

Dalam permasalahan non-linier, terutama permasalahan yang mempunyai hubungan fungsi eksponensial dalam pembentukan polanya dapat dianalisis secara eksperimental maupun teoritis. Salah satu bagian dari analisa teoritis adalah dengan melakukan komputasi dengan metode numerik. Metode numerik dalam komputasi akan sangat membatu dalam menyelesaikan permasalahan-permasalahan yang rumit diselesaikan secara aritmatika. Metode numerik akan sangat membantu setiap penyelesaian permasalahan apabila secara matematis dapat dibentuk suatu pola hubungan antar variabel/parameter. Hal ini akan menjadi lebih baik jika pola hubungan yang terbentuk dapat dijabarkan dalam bentuk fungsi. Ada sejumlah metode numerik yang dapat digunakan untuk menyelesaikan persamaan non-linear. Metode numerik digunakan untuk menyelesaikan persoalan dimana perhitungan secara analitik tidak dapat digunakan. Metode numerik ini berangkat dari pemikiran bahwa permasalahan dapat diselesaikan dengan menggunakan pendekatan-pendekatan yang dapat dipertanggung-jawabkan secara analitik. Metode numerik ini disajikan dalam bentuk algoritma-algoritma yang dapat dihitung secara cepat dan mudah. Pendekatan yang digunakan dalam metode numerik merupakan pendekatan analisis matematis. Sehingga dasar pemikirannya tidak keluar jauh dari dasar pemikiran analitis, hanya saja pemakaian grafis dan teknik perhitungan yang mudah merupakan pertimbangan dalam pemakaian metode numerik. Dan dalam laporan praktikum ini digunakan bahasa pemograman Min GW. Dimana MinGW atau Minimalist GNU for Windows adalah paket program pemrograman berbasis GNU yang dapat dijalankan di dalam sistem operasi Windows. Di dalam paket ini sudah meliputi program GCC sendiri.

1.2. Tujuan Praktikum

Pembuatan laporan ini walau awalnya sebagai tugas mata kuliah Metode Numerik sebenarnya juga sangat membantu penulis dan untuk memahami metode Iterasi, Deret Taylor, Bisection, Regula Falsi, Newton Raphson, metode eliminasi Gauss - Jordan, Cramer, Decomposisi LU, metode Eliminasi Gaus, Jacobi, Seidel, Trapesium, Titik Tengah ini lebih baik 1.3. Manfaat Praktikum Manfaat dari laporan serta program yang dibuat kelompok antara lain : 1. Membantu memahami lebih lanjut penyelesaian sistem persamaan linier dengan metode eliminasi Gauss-Jordan. 2. Membantu pengguna yang ingin menyelesaikan sistem persamaan linier. 3. Membantu mempelajari langkah-langkah yang dilakukan untuk menyelesaikan sistem persamaan linier.

BAB II PEMBAHASAN

II.1 Deret Tailor
Pada umumnya fungsi-fungsi yang bentuknya kompleks dapat disederhanakan menjadi fungsi hampiran dalam bentuk fungsi polinomial yang lebih sederhana. Fungsi polinomial lebih mudah dipahami kelakuannya. Apabila kita melakukan pekerjaan hitungan dengan menggunakan fungsi yang sesungguhnya, maka akan kita dapatkan hasil solusi eksak (solusi sejati). Tetapi bila kita melakukan pekerjaan hitungan dengan menggunakan fungsi hampiran, maka akan kita dapatkan hasil solusi hampiran (solusi pendekatan). Perbedaan antara solusi eksak dan solusi hampiran terletak pada adanya galat pada solusi hampiran. Galat pada solusi numerik harus dihubungkan dengan seberapa teliti polinomial dalam menghampiri fungsi yang sesungguhnya. Biasanya dalam menghampiri fungsi yang sesungguhnya, orang menggunakan apa yang disebut dengan deret Taylor.

II.1.1 Definisi Deret Taylor
Andaikan suatu fungsi f (x) dan turunannya, yaitu f '(x), f "(x), f '''(x),..., f (n) (x) kontinu dalam selang a,b], dan [ , ] 0 x ∈ a b , maka untuk nilai x disekitar 0 x (Gambar 3.1) f (x) dapat diekspansikan diperluas) ke dalam deret Taylor sebagai,

II.1.2 Algoritma algoritma global untuk penyelesaian semua masalah yang menggunakan deret Taylor dengan input X. 1. n = 0 2. pembilang = 1 3. penyebut = 1 4. hasil = 0 5. suku = turunan(n) * pembilang 6. hasil = hasil + suku 7. Tambahkan nilai n dengan 1 8. pembilang = pembilang * X 9. penyebut = penyebut * n / untuk mendapatkan Xk+1 = Xk * X / untuk mendapatkan faktorial ke n / menyatakan turunan ke – n / X0 = 1 / 0! = 1 / hasil keseluruhan / penyebut/hitung nilai dari suku ke n

10. Ulangi terus langkah ke 4 – 8 sampai keadaan tertentu Dalam perhitungan menggunakan deret Taylor dimana fungsi diturunkan terus sampai tak hingga , maka diperlukan adanya sebuah pemotongan pada keadaan tertentu yang menyatakan kapan perhitungan tersebut harus berhenti . Keadaan tertentu yang dipakai biasanya ditentukan oleh nilai dari suku. II.2 Metode Bisection ( Bagi Dua ) Misalkan suatu fungsi f (x) kontinu dalam interval tertutup [a,b], f (a) ∗ f (b) < 0 dan c = 1/2( a + b ) , dimana c ∈[a,b] . Interval baru yang dipilih selalu [a,c] atau [c,b]. Interval yang diambil untuk iterasi berikutnya adalah subsinterval yang di dalamnya dimungkinkan terdapat akar, namun hal ini bergantung pada apakah f (a) ∗ f (c) < 0 atau f (c) ∗ f (b) < 0. Perhatikanlah proses penentuan interval baru di bawah ini,

Interval dengan seterusnya cara

baru dibagi dua lagi yang sama. Begitu sampai ukuran interval

yang baru sudah sangat kecil dan hal ini tentu saja sesuai dengan toleransi kesalahan yang diberikan. Kriteria berhentinya iterasi dapat dipilih dari salah satu tiga kriteria di bawah ini :

Lebar interval baru: − < ε r r a b , yang dalam hal ini ε adalah nilai toleransi lebar interval yang mengapit akar eksak.

Nilai fungsi di akar hampiran: f (c) ≈ 0 dalam hal ini δ adalah galat relatif

Galat relatif hampiran akar : hampiran yang diinginkan. II.2.1 Algoritma Metode Bisection

Asumsi awal yang harus diambil adalah: ‘menebak’ interval awal [a,b] dimana f(x) adalah kontinu padanya, demikian pula harus terletak ‘mengapit’ (secara intuitif) nilai akar a, sedemikian rupa sehingga: f (a) × f (b) £ 0 Algoritma Bisection (f,a,b,akar,e,iter,itmax,flag)
1. 2. 3. 4. 5. 6.

Tebak harga interval [a,b]; tentukan e; dan itmax Set f0 = f(a); iter = 0; flag = 0; Tentukan atau hitung akar = c := (a + b)/2; iter = iter + 1; Jika f(a)·f(c) £ 0 maka b = c jika tidak a = c dan f0 = f(a); Jika (b – a) £ e maka flag = 1 jika iter > itmax maka flag = 2; Jika flag = 0 ulangi ke nomor 3;

7.

Akar persamaan adalah: akar = (a + b)/2, sebagai akar terbaru; Selesai.

8.

II.3 Metode Iterasi Mengatur kembali fungsi f(x) = 0 sedemikian hingga x berada pada ruas kiri persamaan : x = g(x). Trasformasi ini dapat dilakukan dengan manipulasi aljabar atau penambahan sederhana x ke kedua ruas persamaan, misal : x2 + 2x - 3 = 0  2x = x2 + 3 

Sin x = 0 akan dimasukkan dalam bentuk persamaan x = g(x) dengan menambahkan pada kedua ruas : x = sin x + x. dimana persamaan x = g(x) dapat memperkirakan sebuah harga x, sebagai fungsi dari x. Jadi dengan adanya tebakan awal xi, maka dapat dihitung suatu taksiran baru xi+1 yang dapat dinyatakan : Xi+1 = g(x)

Seperti rumus iterasi lain, maka kesalahan aproksimasinya :

100 % II.3.1 Algoritma Metode Iterasi

1. 2. 3. 4. 5. 6.

Masukkan matrik A, dan vektor B beserta ukurannya n Tentukan batas maksimum iterasi max_iter Tentukan toleransi error ε Tentukan nilai awal dari xi, untuk I = 1 s/d n Simpan xi dalam si, untuk I = 1 s/d n Untuk i = 1 s/d n hitung:

iterasi iterasi+1 Bila iterasi lebih dari max_iter atau tidak terdapat ei < ε untuk I = 1 s/d n maka proses dihentikan dari penyelesaiannya adalah xi untuk I = 1 s/d n Bila tidak maka ulangi langkah (5).
7. 8.

II.4 Metode Regula Falsi Regula Falsi adalah algoritma pencarian akar yang menggabungkan ciri-ciri dari metode bagi dua dan metode secand.

Seperti metode bagi-dua, metode regula falsi dimulai dengan dua titik awal a0 dan b0 sedemikian sehingga f(a0) dan f(b0) berlawanan tanda. Berdasarkan teorema nilai antara, ini berarti fungsi f memiliki akar dalam selang [a0, b0]. Metode ini kemudian berlanjut dengan menghasilkan berturut-turut selang [ak, bk] yang semuanya berisi akar f. Pada iterasi ke-k, bilangan dihitung. Seperti yang diterangkan di bawah, ck adalah akar dari garis sekan melalui (ak, f(ak)) dan (bk, f(bk)). Jika f(ak) dan f(ck) memiliki tanda yang sama, maka kita menetapkan ak+1 = ck dan bk+1 = bk. Jika tidak, kita menetapkan ak+1 = ak dan bk+1 = ck. Proses ini diteruskan hingga akar dihampiri dengan cukup baik.

II.4.1 ALGORITMA Algoritma RegulaFalsi (f,a,b,akar,e,iter,itmax,flag) 1. Tebak harga interval [a,b]; tentukan e; dan itmax 2. Set xold = 2*b-a; iter = 0; flag = 0; 3. Tentukan atau hitung akar = c = b – f(b) [(b – a)/(f(b) – f(a)); iter = iter + 1; 4. Jika f(b)·f(c) £ 0 maka a = c jika tidak b = c; 5. Jika abs(c – xold) £ e maka flag = 1 atau jika iter > itmax maka flag = 2 atau jika tidak maka iter = iter + 1 dan akar = c; 6. Jika flag = 0 ulangi ke nomor 3; 7. Selesai. II.5 Metode Newton Raphson Metode Newton Raphson adalah metode pendekatan yang menggunakan satu titik dan mendekatinya dengan memperhatikan slope atau gradien pada titik tersebut. Titik pendekatan ke n+1 dituliskan dengan :

II.5.1 ALGORITMA

Algoritma Metode Newton Raphson : 1. Definisikan fungsi f(x) dan fB1B(x) 2. Tentukan toleransi error (e) dan iterasi maksimum (n) 3. Tentukan nilai pendekatan awal xB0B 4. Hitung f(xB0B) dan fB1B(xB0B) 5. Untuk iterasi I = 1 s/d n atau |f(xi)| e ≥ Hitung f(xBiB) dan fB1B(xBiB) 6. Akar persamaan adalah nilai xi yang terakhir diperoleh. II.6 Metode Secand Masalah yang di dapat dalam metode Newton Raphson adalah terkadang sulit mendapatkan turunan pertama, yakni f’(x). sehingga dengan jalan pendekatan :

Didapat :

Persamaan di atas memang memerlukan 2 nilai taksiranawal x, tetapi karena f(x) tidak membutuhkan perubahan tanda diantara taksiran  maka secand bukan metode akolade.

II.6.1 Algoritma Metode Secant 1. Definisikan fungsi F(x)
2. Definisikan torelansi error (e) dan iterasi maksimum (n)

3. Masukkan dua nilai pendekatan awal yang di antaranya terdapat akar yaitu x0

dan x1, sebaiknya gunakan metode tabel atau grafis untuk menjamin titik pendakatannya adalah titik pendekatan yang konvergensinya pada akar persamaan yang diharapkan. 4. Hitung F(x0) dan F(x1) sebagai y0 dan y1 5. Untuk iterasi I = 1 s/d n atau |F(xi)|
xi +1 = xi − yi xi − xi −1 yi − yi −1

hitung yi+1 = F(xi+1) 6. Akar persamaan adalah nilai x yang terakhir.

II.7 Metode Eliminasi Gauss Adalah metode yang paling awal dikembangkan dan banyak digunakan dalam penyelesaian sistem persamaan linier, prosedur penyelesaian dari metode ini adalah mengurangi sistem persamaan ke dalam bentuk segitiga atas, sehingga salah satu dari persamaan-persamaan tersebut hanya mengandung satu bilangan tak diketahui, dan setiap persamaan berikutnya hanya terdiri dari satu tambahan bilangan tak diketahui baru. Bentuk segitiga diselesaikan dengan penambahan dan pengurangan dari beberapa persamaan, setelah persamaan tersebut dikalikan dengan suatu faktor (konstan). Prosedur hitungan metode eliminasi Gauss, yaitu:

 a11 a  21 a 31 

a12 a 22 a 32

a11 a13 | b1   a 23 | b2  →  0  0 a 33 | b3   

a12 a22 0

a13 a23 a33

b3'' '' a33 | b1  ' ' (b2 − a 23 x3 ) '  | b2  → x2 = ' a 22 ''  | b3  (b − a12 x 2 − a13 x3 ) x1 = 1 a11 x3 =

II.8 Metode Eliminasi Gauss Jordan Berbagai metode dapat dilakukan untuk mencari penyelesaian sistem persamaan linier, diantaranya dengan menggunakan metode eliminasi Gauss Jordan. metode ini hampir sama dengan metode eliminasi gauss. hanya berbeda pada langkah-langkanya saja. Pada Eliminasi Gauss atau Gauss Jordan, sistem persamaan harus dirubah terlebih dahulu kedalam bentuk matriks. Setelah terbentuk menjadi matriks, barulah dapat di selesaikan dengan metode Gauss atau Gauss Jordan. Misalkan kita mempunyai tiga persamaan linier yang akan kita cari penyelesaiannya:

Ketiga persamaan tersebut bisa kita bentuk menjadi matriks :

Setelah terbentuk matriks seperti itu, dapat kita proses dengan menggunakan eliminasi gauss jordan. Iterasi Pertama: Baris pertma dibuat sedemikian rupa agar kolom pertama barus pertama bernilai 1. Dalam persamaan tersebut sudah bernilai satu. Jika dalam persoalan lain bukan 1 maka harus dibagi

dengan dirinya sendiri kemudian kolom yang lain juga di bagi elemen tersebut. elemen tersebut biasa disebut elemen pivot. Hal ini merupakan proses normalisasi. Setelah itu baris ke-dua dikondisikan agar kolom pertama bernilai 0, jadi 3 harus di 0-kan. yaitu dengan cara dikurangi dengan 3xBaris pertama yang baru. begitu juga kolom lainnya pada baris ke-dua, dikurang 3xBaris pertama. Seperti halnya baris ke-dua, baris ke-tiga harus dikurangi 1xBaris pertama yang baru, agar kolom pertama baris ke-tiga yang bernilai 1 menjadi 0. Sehingga menjadi :

Iterasi Ke-dua: Seperti halnya di baris pertama, pada baris ke-dua kolom ke-dua harus dinormalisasikan atau dibuat agar menjadi 1. yaitu dengan membagi semua elemen di baris ke-dua dengan bilangan -2. Setelah itu pada baris pertama kolom kedua direduksi agar menjadi 0, caranya dikurangi 1xBaris ke-dua yang baru. Begitu juga dengan baris ke tiga, dikurangi -2xbaris ke-dua yang baru agar -2 pada baris ke-tiga menjadi 0. Sehingga menjadi :

Iterasi Ke-tiga: Caranya tentu sama dengan itersi-iterasi sebelumnya. namun kini melibatkan baris ke-tiga dan juga kolom ke-tiga. Baris ke-tiga tidak perlu dinormalisasi lagi karena elemen pivot baris ke-tiga sudah bernilai 1. Baris pertama dikurangi 1xBaris ketiga yang baru. Baris kedua dikurangi -2xBaris ketiga yang baru.

Sehingga menjadi :

Selesai sudah proses eliminasi gauss jordan. penyelesaian dari sistem persamaan tersebut sudah bisa dilihat langsung dari matriks diatas. yaitu x1=3; x2=-1; x3=1; 1.1. Metode Dekomposisi LU Jika matriks A singular maka ia dapat difaktorkan menjadi matriks segitiga bawah L (Lower) dan matriks segitiga atas (Upper) : Dalam matriks, ditulis sebagai berikut :

Pada matriks segitiga bawah L, semua elemen diagonal adalah 1, sedangkan pada matriks U tidak ada aturan khusus pada elemen diagonalnya. Penyelesaian Ax = b dengan metode dekomposisi LU adalah sebagai berikut : 

1.2. Metode Jacobi Didalam metode ini, nilai x1 yang dihitung dari persamaan pertama tidak digunakan untuk menghitung nilai x2 dengan persamaan kedua. Demikian juga nilai x2 tidak digunakan untuk mencari x3, sehingga nilai-nilai tersebut tidak dimanfaatkan. Dapat dikatakan juga bahwa tidak ada ketergantungan antara nilai yang 1 dengan yang lainnya. Rumus umumnya yaitu :

1.3. Metode Gauss Seidel Didalam metode Jacobi, nilai x1 yang dihitung dari persamaan pertama tidak digunakan untuk menghitung nilai x2 dengan persamaan kedua. Demikian juga nilai x2 tidak digunakan untuk mencari x3, sehingga nilai-nilai tersebut tidak dimanfaatkan. Sebenarnya nilai-nilai baru tersebut lebih baik dari nilai-nilai yang lama. Di dalam metode Gauss-Seidel nilainilai tersebut dimanfaatkan untuk menghitung variabel berikutnya. Adapun rumus umum yang digunakan yaitu :

1.12. Metode Cramer 1.13. Metode Segiempat 1.14. Metode Trapesium 1.15. Metode Titik Tengah

BAB III HASIL PERCOBAAN

1.1. Deret Tailor
#include <iostream> #include <cstdlib> #include <conio.h> #include <stdio.h> #include <math.h> #include "faktorial.h" #define e 2.718281828 #define error_limit 0.00000001 /* 8-digit maksimal, lebih overflow */ using namespace std; int main( ) { FILE *stream; int j; double exact, ex, ex1, x, i; double fact; double Ee, Ea; char lagi;

do { //clrscr(); stream = fopen("error-komputasi.txt", "w+"); cout << "\n\nMencari Kesalahan Komputasi\n\n"; cout << "===========================\n\n"; cout << "Persamaan Matematika Approksimasi\n"; cout << "---------------------------------\n\n"; cout << "e^x=1+(x/faktorial(x))+......\n\n"; cout << "\nBerapa Nilai x awal = "; cin >> x; i = 0.0; j = 0; fact = 0.0; Ea = 0.0; /* Penghitungan e^x */ exact = pow(e,x); printf("\nNilai yang didekati adalah %.9f\n", exact); cout << "\nTekan Enter untuk melanjutkan .........\n"; getch(); ex1 = exact; printf("\n\t----------------------------------------------------------\n"); printf("\tIterasi ke-\tAproksimasi\tEe\t\tEa\n"); printf("\t------------------------------------------------------------\n\n"); fprintf(stream,"\n\t------------------------------------------------------------\n");

fprintf(stream,"\tIterasi ke-\tAproksimasi\tEe\t\tEa\n"); fprintf(stream,"\t------------------------------------------------------------\n\n"); do { j++; if (i != 0.0) { fact += pow(x,i)/factorial(i); } ex = 1 + fact; Ee = ((exact-ex)/exact)*100; if(i != 0.0) { Ea = ((ex-ex1)/ex)*100; printf("\t\t%d\t%.9f\t%.9f\t%.9f\n", j, ex, Ee, Ea); fprintf(stream,"\t\t%d\t%.9f\t%.9f\t%.9f\t\n", j, ex, Ee, Ea); ex1 = ex; } else { printf("\t\t%d\t%.9f\t%.8f\t%.5f\n", j, ex, Ee, Ea); fprintf(stream,"\t\t%d\t%.9f\t%.9f\t%.9f\t\n", j, ex, Ee, Ea); ex1 = ex; } i++; } while(fabs(Ee) > error_limit); printf("\n\t------------------------------------------------------------\n\n"); fprintf(stream,"\n\t------------------------------------------------------------\n\n");

printf("\nNilai e^%.2f = %.9f didekati dengan x = %.2f ", x, exact, x); printf("dalam %d iterasi", j); printf("\n\nDengan Nilai Approksimasi = %.9f", ex); printf("\n\nDengan Error Relatif absolut sebesar = %.9f", fabs(Ee)); fprintf(stream,"\nNilai e^%.2f = %.9f didekati dengan x = %.2f ", x,exact, x); fprintf(stream,"dalam %d iterasi", j); fprintf(stream,"\n\nDengan Nilai Approksimasi = %.9f", ex); fprintf(stream,"\n\nDengan Error Relatif absolut sebesar = %.9f",fabs(Ee)); fclose(stream); cout << "\n\n\nCoba lagi dengan Nilai x berbeda (y/t) ? "; cin >> lagi; // clrscr(); } while(lagi != 't'); return 0; } int factorial(int); int factorial(int x) { int i, p=1; for(i=1; i<=x; i++) { p*=i; } return(p); }

1.2. Metode Iterasi
#include <iostream.h> #include <stdlib.h> #include <conio.h> #include <stdio.h> #include <math.h> #define error_limit 0.00000001 main() { FILE *iterasi; int i; double fx, g1x, x, xi, x0; char lagi; do { //clrscr(); iterasi = fopen("iterasi.txt", "w+"); do { cout << "Metode Iterasi x = g(x)\n"; cout << "=======================\n\n"; //Persamaan, konversinya dan turunannya cout << "f(x) = x^3 - 9*x^2 + 18x - 6 = 0\n\n";

cout << "g(x) = -(x^3/18) + x^2/2 + 1/3\n\n"; cout << "g'(x) = -(x^2/6) + x\n\n"; cout << "Bila berulang berarti Nilai g'(x) > 1\n\n"; cout << "Masukkan Nilai x Asumsi = "; g1x = (-pow(x,2)/6)+ x; printf("\nx = %.3f\tg'(x) = %.6f\n\n", x, abs(g1x)); cout << "\nTekan Enter ........."; getch(); } while(abs(g1x) >= 1); x0 = x; i = 0; printf("\n\t--------------------------------------------\n"); printf("\tIterasi ke-\tx = g(x)\tf(x)\n"); printf("\t--------------------------------------------\n\n"); fprintf(iterasi, "\n\t--------------------------------------------\n"); fprintf(iterasi, "\tIterasi ke-\tx = g(x)\tf(x)\n"); fprintf(iterasi, "\t--------------------------------------------\n\n"); do { /* rumus xi = g(x) = -(x^3)/18 + x^2/2 +(1/3) */ xi = -pow(x,3)/18 + pow(x,2)/2 + 0.3333333333; fx = pow(xi,3) - 9*pow(xi,2) + 18*xi - 6; cin >> x;

printf("\t\t%d\t%.8f\t%.8f\n", i+1, xi, fx); fprintf(iterasi,"\t\t%d\t%.8f\t%.8f\n", i+1, xi, fx); x = xi; i++; }while(fabs(fx) > error_limit); printf("\n\t--------------------------------------------\n\n"); fprintf(iterasi, "\n\t--------------------------------------------\n\n"); printf("\nDengan tebakan awal x = %.3f", x0); printf(" diperoleh\n"); printf("\nAproksimasi Akar Persamaan adalah x = %.10f\n", x); printf("\nError Hasil Aproksimasi adalah f(x) = %.14f\n", fabs(fx)); fprintf(iterasi,"\nDengan tebakan awal x = %.3f", x0); fprintf(iterasi," diperoleh\n"); fprintf(iterasi,"\nAproksimasi Akar Persamaan adalah x = %.10f\n", x); fprintf(iterasi,"\nError Hasil Aproksimasi adalah f(x) = %.10f\n", fabs(fx)); fclose(iterasi); cout << "\n\nCoba lagi dengan x awal yang berbeda (y/t) ? "; }while(lagi != 't'); return 0; } cin >> lagi;

1.3. Metode Bisection ( Bagi Dua )
#include <stdio.h> #include <conio.h> #include <math.h> /* Prototipe fungsi dan deklarasi variabel global */ double fungsi(double k); int main() { double a,b,c,e; double E; do {//clrscr(); printf("Masukkan batas bawah (a) : "); printf("Masukkan batas atas (b) : "); } while(fungsi(a)*fungsi(b)> 0 ); printf("\n a\tc\tb\tf(a)\tf(b)\tf(c)\tGalat\n"); E=(b-a); do { c = (a+b)/2; printf("%.4lf\t%.4lf\t%.4lf\t%.4lf\t%.4lf\t%.4lf\t%.6lf\n",a,c,b,fungsi(a),fungsi(b), fungsi(c),E); if ( fungsi(a)*fungsi(c) <0) { E=(b-c); b = c; } else { E=(c-a); a = c; }} while(E >= e); printf("\n\n nilai akarnya x = %lf dan nilai f(x) = %lf", c, fungsi(c)); printf("\n\nTekan sembarang tombol"); getch(); } /* Fungsi*/ double fungsi(double k) { double f; scanf("%lf",&a); scanf("%lf",&b);

printf("Masukkan Nilai Batas Toleransi (e) : "); scanf("%lf",&e);

f=exp(k)-5*pow(k,2); return (f); }

1.4. Metode Regula Falsi 1.5. Metode Newton Raphsom 1.6. Metode Iterasi 1.7. Metode Cramer 1.8. Metode Dekomposisi LU 1.9. Metode Gauss 1.10. Metode Gauss Jordan 1.11. Metode Jacobi 1.12. Metode Seidel 1.13. Metode Segiempat 1.14. Metode Trapesium 1.15. Metode Titik Tengah

BAB IV ANALISA HASIL PERCOBAAN

1.1. Deret Tailor
#include <iostream> #include <cstdlib> #include <conio.h> #include <stdio.h> #include <math.h> #include "faktorial.h" #define e 2.718281828 #define error_limit 0.00000001 /* 8-digit maksimal, lebih overflow */ using namespace std; int main() { FILE *stream; int j; double exact, ex, ex1, x, i; double fact; double Ee, Ea; char lagi;

Pendeklarasian fungsi-fungsi yang ada didalam program

Fungsi utama yang mendeklarasikan tipetipe variable dari fungsi yang akan digunakan.

do { //clrscr(); stream = fopen("error-komputasi.txt", "w+"); cout << "\n\nMencari Kesalahan Komputasi\n\n"; cout << "=====================\n\n"; cout << "Persamaan Matematika Approksimasi\n"; cout << "------------------------------------------\n\n"; cout << "e^x=1+(x/faktorial(x))+......\n\n"; cout << "\nBerapa Nilai x awal = "; cin >> x; i = 0.0; j = 0; fact = 0.0; Ea = 0.0; /* Penghitungan e^x */ exact = pow(e,x); printf("\nNilai yang didekati adalah %.9f\n", exact); cout << "\nTekan Enter untuk melanjutkan .........\n"; getch(); ex1 = exact; printf("\n\t-----------------------------------------------\n"); printf("\tIterasi ke-\tAproksimasi\tEe\t\tEa\n"); printf("\t------------------------------------------------\n\n"); fprintf(stream,"\n\t---------------------------------------\n");

Pointer stream menunjukkan tempat untuk menyimpan error komputasi. Membuat persamaan untuk fungsi. Dan inputan nilai awal. Yang inputan awal tersebut akan langsung diuji.

Nilai ex1 = nilai exact yaitu ex. Lalu akan tampil perintah dari printf ke layar, dan fprintf ke txt (stream). Dan nilai j bertambah setingkat demi setingkat.

fprintf(stream,"\tIterasi ke-\tAproksimasi\tEe\t\tEa\n"); fprintf(stream,"\t---------------------------------------\n\n"); do { j++; if (i != 0.0) { fact += pow(x,i)/factorial(i); } ex = 1 + fact; Ee = ((exact-ex)/exact)*100; if(i != 0.0) { Ea = ((ex-ex1)/ex)*100; printf("\t\t%d\t%.9f\t%.9f\t%.9f\n", j, ex, Ee, Ea); fprintf(stream,"\t\t%d\t%.9f\t%.9f\t%.9f\t\n", j, ex, Ee, Ea); ex1 = ex; } else {printf("\t\t%d\t%.9f\t%.8f\t%.5f\n", j, ex, Ee, Ea); fprintf(stream,"\t\t%d\t%.9f\t%.9f\t%.9f\t\n", j, ex, Ee, Ea); ex1 = ex; } i++; } while(fabs(Ee) > error_limit); printf("\n\t-------------------------------------------------\n\n");

Menentukan nilai suku/orde dari deret tailor. Dan fungsi untuk mencari nilai error dari 1 suku ke suku yang lain.

Maka jika nilai dari Ee sudah lebih besar dari nilai error limit yg telah ditentukan, maka pencarian akan berhenti. Tapi jika Ee < error limit yg ditentukan, maka akan terus mencari sampai Ee > error limit.

fprintf(stream,"\n\t---------------------------------------------\n\n"); printf("\nNilai e^%.2f = %.9f didekati dgn x = %.2f ", x, exact, x); printf("dalam %d iterasi", j); printf("\n\nDengan Nilai Approksimasi = %.9f", ex); printf("\n\nDengan Error Relatif absolut sebesar = %.9f", fabs(Ee)); fprintf(stream,"\nNilai e^%.2f =%.9f didekati dg x=%.2f ",x,exact,x); fprintf(stream,"dalam %d iterasi", j); fprintf(stream,"\n\nDengan Nilai Approksimasi = %.9f", ex); fprintf(stream,"\n\nDg Error Relatif absolut sbsr=%.9f"fabs(Ee)); fclose(stream); cout << "\n\n\nCoba lagi dengan Nilai x berbeda (y/t) ? "; cin >> lagi; // clrscr(); } while(lagi != 't'); return 0; } int factorial(int); int factorial(int x) { int i, p=1; for(i=1; i<=x; i++) { p*=i;

Fungsi dari faktorial

} return(p); }

1.2. Metode Iterasi
#include <iostream.h> #include <stdlib.h> #include <conio.h> #include <stdio.h> #include <math.h> #define error_limit 0.00000001 main() { FILE *iterasi; int i; double fx, g1x, x, xi, x0; char lagi; do { //clrscr(); iterasi = fopen("iterasi.txt", "w+"); do { cout << "Metode Iterasi x = g(x)\n"; cout << "=======================\n\n"; Tipe variable yang digunakan Fungsi yang digunakan dalam program

//Persamaan, konversinya dan turunannya cout << "f(x) = x^3 - 9*x^2 + 18x - 6 = 0\n\n"; cout << "g(x) = -(x^3/18) + x^2/2 + 1/3\n\n"; cout << "g'(x) = -(x^2/6) + x\n\n"; cout << "Bila berulang berarti Nilai g'(x) > 1\n\n"; cout << "Masukkan Nilai x Asumsi = "; g1x = (-pow(x,2)/6)+ x; printf("\nx = %.3f\tg'(x) = %.6f\n\n", x, abs(g1x)); cout << "\nTekan Enter ........."; getch(); } while(abs(g1x) >= 1); x0 = x; i = 0; printf("\n\t--------------------------------------------\n"); printf("\tIterasi ke-\tx = g(x)\tf(x)\n"); printf("\t--------------------------------------------\n\n"); fprintf(iterasi, "\n\t--------------------------------------------\n"); fprintf(iterasi, "\tIterasi ke-\tx = g(x)\tf(x)\n"); fprintf(iterasi, "\t--------------------------------------------\n\n"); do { /* rumus xi = g(x) = -(x^3)/18 + x^2/2 +(1/3) */ Pengetesan nilai awal terhadap persamaan yang telah ditentukan. Sampai hasil yang didapat tidak melebihi dari nilai error yang telah ditentukan. Dan setelah selesai pencarian, maka hasilnya akan ditampilkan. cin >> x; Tampilan utama pada program. Dan persamaan dari metode yang digunakan didalamnya.

xi = -pow(x,3)/18 + pow(x,2)/2 + 0.3333333333; fx = pow(xi,3) - 9*pow(xi,2) + 18*xi - 6; printf("\t\t%d\t%.8f\t%.8f\n", i+1, xi, fx); fprintf(iterasi,"\t\t%d\t%.8f\t%.8f\n", i+1, xi, fx); x = xi; i++; }while(fabs(fx) > error_limit); printf("\n\t--------------------------------------------\n\n"); fprintf(iterasi, "\n\t--------------------------------------------\n\n"); printf("\nDengan tebakan awal x = %.3f", x0); printf(" diperoleh\n"); printf("\nAproksimasi Akar Persamaan adalah x = %.10f\n", x); printf("\nError Hasil Aproksimasi adalah f(x) = %.14f\n", fabs(fx)); fprintf(iterasi,"\nDengan tebakan awal x = %.3f", x0); fprintf(iterasi," diperoleh\n"); fprintf(iterasi,"\nAproksimasi Akar Persamaan adalah x = %.10f\n", x); fprintf(iterasi,"\nError Hasil Aproksimasi adalah f(x)=%.10f\n",fabs(fx)); fclose(iterasi); cout <<"\n\nCoba lagi dengan x awal yang berbeda (y/t) ?";cin>>lagi; }while(lagi != 't'); return 0; Untuk menampilkan hasil dari pencarian yang telah dilakukan .Dan untuk memutuskan mencoba lagi atau tidak. Pengecekan hasil yang didapat pada fx dengan nilai error limit. Dengan nilai awal yang telah di inputkan di awal.

}

1.3. Metode Bisection ( Bagi Dua )
#include <stdio.h> #include <conio.h> #include <math.h> /* Prototipe fungsi dan deklarasi variabel global */ double fungsi(double k); int main() { double a,b,c,e; double E; do {//clrscr(); printf("Masukkan batas bawah (a) : "); printf("Masukkan batas atas (b) : "); printf("Masukkan Nilai Batas Toleransi (e) : "); } while(fungsi(a)*fungsi(b)> 0 ); printf("\n a\tc\tb\tf(a)\tf(b)\tf(c)\tGalat\n"); E=(b-a); do { c = (a+b)/2; printf("%.4lf\t%.4lf\t%.4lf\t%.4lf\t%.4lf\t%.4lf\t%.6lf\n", a,c,b,fungsi(a),fungsi(b), fungsi(c),E); if ( fungsi(a)*fungsi(c) <0) { E=(b-c); b = c; } else { E=(c-a); a = c; }} while(E >= e); printf("\n\n nilai akarnya x = %lf dan nilai f(x) = %lf", c, fungsi(c)); printf("\n\nTekan sembarang tombol"); Pemasukan nilai yang diinput pada fungsi : f(a)*f(c)<0 scanf("%lf",&a); scanf("%lf",&b); scanf("%lf",&e); Perintah tampilan awal pada program. Dimana fungsi yang digunakan yaitu f(a)*f(b)>0. Tipe variable yang digunakan Deklarasi fungsi yangdigunakan.

getch(); } /* Fungsi*/ double fungsi(double k) { double f; f=exp(k)-5*pow(k,2); return (f); } Fungsi yang digunakan dalam program.

BAB V PENUTUP

DAFTAR PUSTAKA

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->