laporan praktikum metode numerik

33
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,

Transcript of laporan praktikum metode numerik

Page 1: laporan praktikum metode numerik

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,

Page 2: laporan praktikum metode numerik

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.

Page 3: laporan praktikum metode numerik

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,

Page 4: laporan praktikum metode numerik

II.1.2 Algoritma

algoritma global untuk penyelesaian semua masalah yang menggunakan deret Taylor

dengan input X.

1. n = 0 / menyatakan turunan ke – n

2. pembilang = 1 / X0 = 1

3. penyebut = 1 / 0! = 1

4. hasil = 0 / hasil keseluruhan

5. suku = turunan(n) * pembilang / penyebut/hitung nilai dari suku ke n

6. hasil = hasil + suku

7. Tambahkan nilai n dengan 1

8. pembilang = pembilang * X / untuk mendapatkan Xk+1 = Xk * X

9. penyebut = penyebut * n / untuk mendapatkan faktorial 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,

Page 5: laporan praktikum metode numerik

Interval baru dibagi dua lagi dengan cara yang sama. Begitu seterusnya 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

Galat relatif hampiran akar : dalam hal ini δ adalah galat relatif

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. Tebak harga interval [a,b]; tentukan e; dan itmax

2. Set f0 = f(a); iter = 0; flag = 0;

3. Tentukan atau hitung akar = c := (a + b)/2; iter = iter + 1;

4. Jika f(a)·f(c) £ 0 maka b = c jika tidak a = c dan f0 = f(a);

5. Jika (b – a) £ e maka flag = 1 jika iter > itmax maka flag = 2;

6. Jika flag = 0 ulangi ke nomor 3;

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

8. Selesai.

Page 6: laporan praktikum metode numerik

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. Masukkan matrik A, dan vektor B beserta ukurannya n2. Tentukan batas maksimum iterasi max_iter3. Tentukan toleransi error ε4. Tentukan nilai awal dari xi, untuk I = 1 s/d n5. Simpan xi dalam si, untuk I = 1 s/d n6. Untuk i = 1 s/d n hitung:

7. iterasi iterasi+1

8. 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).

Page 7: laporan praktikum metode numerik

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)

Page 8: laporan praktikum metode numerik

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 :

Page 9: laporan praktikum metode numerik

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

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:

Page 10: laporan praktikum metode numerik

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:

Page 11: laporan praktikum metode numerik

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.

Page 12: laporan praktikum metode numerik

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

Page 13: laporan praktikum metode numerik

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

nilai 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

Page 14: laporan praktikum metode numerik

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

Page 15: laporan praktikum metode numerik

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

Page 16: laporan praktikum metode numerik

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

Page 17: laporan praktikum metode numerik

{ 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 = "; cin >> x;

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;

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

Page 18: laporan praktikum metode numerik

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;

}

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) : "); scanf("%lf",&a);

printf("Masukkan batas atas (b) : "); scanf("%lf",&b);

printf("Masukkan Nilai Batas Toleransi (e) : "); scanf("%lf",&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)

Page 19: laporan praktikum metode numerik

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

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

Page 20: laporan praktikum metode numerik

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;

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

Pendeklarasian fungsi-fungsi yang ada didalam program

Fungsi utama yang mendeklarasikan tipe-tipe variable dari fungsi yang akan digunakan.

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

Page 21: laporan praktikum metode numerik

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

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.

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.

Page 22: laporan praktikum metode numerik

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;

}

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

Fungsi dari faktorial

Fungsi yang digunakan dalam program

Tipe variable yang digunakan

Page 23: laporan praktikum metode numerik

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

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;

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

Tampilan utama pada program.

Dan persamaan dari metode yang digunakan didalamnya.

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.

Pengecekan hasil yang didapat pada fx dengan nilai error limit. Dengan nilai awal yang telah di inputkan di awal.

Page 24: laporan praktikum metode numerik

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;

}

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) : "); scanf("%lf",&a);

printf("Masukkan batas atas (b) : "); scanf("%lf",&b);

printf("Masukkan Nilai Batas Toleransi (e) : "); scanf("%lf",&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)

Deklarasi fungsi yangdigunakan.

Tipe variable yang digunakan

Perintah tampilan awal pada program.

Dimana fungsi yang digunakan yaitu f(a)*f(b)>0.

Pemasukan nilai yang diinput pada fungsi : f(a)*f(c)<0

Untuk menampilkan hasil dari pencarian yang telah dilakukan .Dan untuk memutuskan mencoba lagi atau tidak.

Page 25: laporan praktikum metode numerik

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

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

return (f); }

Fungsi yang digunakan dalam program.

Page 26: laporan praktikum metode numerik

BAB V

PENUTUP

Page 27: laporan praktikum metode numerik

DAFTAR PUSTAKA