Anda di halaman 1dari 34

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

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 n
2. Tentukan batas maksimum iterasi max_iter
3. Tentukan toleransi error
4. Tentukan nilai awal dari xi, untuk I = 1 s/d n
5. Simpan xi dalam si, untuk I = 1 s/d n
6. 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).

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 xi 1
xi +1 = xi yi
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:


b3''
x3 = ''
a11 a12 a13 | b1 a33
a11 a12 a13 | b1
a (b2' a 23'
x3 )
21 a 22 a 23 | b2 0 a22 a23 | b2' x2 = '
0 a 22
a 31 a 32 a 33 | b3 0 a33 | b3''
(b a12 x 2 a13 x3 )
x1 = 1
a11

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


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

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


BAB IV

ANALISA HASIL PERCOBAAN

1.1. Deret Tailor

#include <iostream>

#include <cstdlib>

#include <conio.h>

#include <stdio.h> Pendeklarasian fungsi-fungsi


yang ada didalam program
#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; Fungsi utama yang mendeklarasikan tipe-


tipe variable dari fungsi yang akan
digunakan.
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"; Pointer stream menunjukkan


tempat untuk menyimpan error
cout << "=====================\n\n"; komputasi.
Membuat persamaan untuk
cout << "Persamaan Matematika Approksimasi\n"; fungsi. Dan inputan nilai awal.
Yang inputan awal tersebut akan
langsung diuji.
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"; Nilai ex1 = nilai exact yaitu
ex. Lalu akan tampil perintah
dari printf ke layar, dan
getch(); fprintf ke txt (stream).

ex1 = exact; Dan nilai j bertambah


setingkat demi setingkat.
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;

Menentukan nilai suku/orde dari


Ee = ((exact-ex)/exact)*100;
deret tailor.
if(i != 0.0) Dan fungsi untuk mencari nilai error
dari 1 suku ke suku yang lain.
{ 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);


Maka jika nilai dari Ee
printf("\n\t-------------------------------------------------\n\n"); 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; Fungsi dari faktorial

for(i=1; i<=x; i++)

{ p*=i;
}

return(p); }

1.2. Metode Iterasi

#include <iostream.h>

#include <stdlib.h>

Fungsi yang digunakan dalam program


#include <conio.h>

#include <stdio.h>

#include <math.h>

#define error_limit 0.00000001

main()

{ FILE *iterasi;

int i; Tipe variable yang digunakan

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"; Tampilan utama pada program.

Dan persamaan dari metode yang


cout << "g'(x) = -(x^2/6) + x\n\n";
digunakan didalamnya.

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"); Pengetesan nilai awal terhadap


persamaan yang telah
ditentukan.
printf("\t--------------------------------------------\n\n");
Sampai hasil yang didapat tidak
fprintf(iterasi, "\n\t--------------------------------------------\n"); melebihi dari nilai error yang
telah ditentukan.

fprintf(iterasi, "\tIterasi ke-\tx = g(x)\tf(x)\n"); Dan setelah selesai pencarian,


maka hasilnya akan ditampilkan.
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);


Pengecekan hasil yang didapat
printf("\n\t--------------------------------------------\n\n"); pada fx dengan nilai error limit.
Dengan nilai awal yang telah di
fprintf(iterasi, "\n\t--------------------------------------------\n\n"); inputkan di awal.

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"); Untuk menampilkan hasil


dari pencarian yang telah
fprintf(iterasi,"\nAproksimasi Akar Persamaan adalah x = %.10f\n", x); dilakukan .Dan untuk
memutuskan mencoba lagi
atau tidak.
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> Deklarasi fungsi
yangdigunakan.
/* Prototipe fungsi dan deklarasi variabel global */
double fungsi(double k);
int main()
{ double a,b,c,e;
Tipe variable yang
double E;
digunakan
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); Perintah tampilan awal
pada program.
} while(fungsi(a)*fungsi(b)> 0 );
printf("\n a\tc\tb\tf(a)\tf(b)\tf(c)\tGalat\n"); Dimana fungsi yang
digunakan yaitu
E=(b-a);
f(a)*f(b)>0.
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), Pemasukan nilai yang diinput
fungsi(c),E); pada fungsi : f(a)*f(c)<0
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; Fungsi yang digunakan dalam
program.
f=exp(k)-5*pow(k,2);
return (f); }
BAB V

PENUTUP
DAFTAR PUSTAKA