Post on 19-Jun-2015
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 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).
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)|
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:
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>
#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.
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.
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
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.
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.
{ 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.
BAB V
PENUTUP
DAFTAR PUSTAKA