Professional Documents
Culture Documents
PENDAHULUAN
Andaikan suatu fungsi f (x) dan turunannya, yaitu f '(x), f "(x), f '''(x),..., f (n) (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.
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.
Galat relatif hampiran akar : dalam hal ini adalah galat relatif
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)
100 %
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).
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.
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.
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.
xi xi 1
xi +1 = xi yi
yi yi 1
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).
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:
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;
Jika matriks A singular maka ia dapat difaktorkan menjadi matriks segitiga bawah L
(Lower) dan matriks segitiga atas (Upper) :
Pada matriks segitiga bawah L, semua elemen diagonal adalah 1, sedangkan pada matriks U
tidak ada aturan khusus pada elemen diagonalnya.
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.
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 :
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include "faktorial.h"
#define e 2.718281828
int main( )
{ FILE *stream;
int j;
double fact;
char lagi;
do
{ //clrscr();
cin >> x;
/* Penghitungan e^x */
exact = pow(e,x);
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;
ex1 = ex;
} else
ex1 = ex;
} i++;
printf("\n\t------------------------------------------------------------\n\n");
fprintf(stream,"\n\t------------------------------------------------------------\n\n");
printf("\nNilai e^%.2f = %.9f didekati dengan x = %.2f ", x, exact, x);
fclose(stream);
// clrscr();
} while(lagi != 't');
return 0;
} int factorial(int);
int factorial(int x)
{ int i, p=1;
{ p*=i;
} return(p);
}
1.2. Metode Iterasi
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
main()
{ FILE *iterasi;
int i;
char lagi;
do
{ //clrscr();
do
g1x = (-pow(x,2)/6)+ x;
getch();
x0 = x;
i = 0;
printf("\n\t--------------------------------------------\n");
printf("\t--------------------------------------------\n\n");
fprintf(iterasi, "\n\t--------------------------------------------\n");
fprintf(iterasi, "\t--------------------------------------------\n\n");
do
x = xi;
i++;
printf("\n\t--------------------------------------------\n\n");
fprintf(iterasi, "\n\t--------------------------------------------\n\n");
printf(" diperoleh\n");
fprintf(iterasi," diperoleh\n");
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); }
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include "faktorial.h"
#define e 2.718281828
int main()
{ FILE *stream;
double fact;
char lagi;
do
{ //clrscr();
cin >> x;
Ea = 0.0;
/* Penghitungan e^x */
exact = pow(e,x);
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).
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;
ex1 = ex;
} else
ex1 = ex;
i++;
fclose(stream);
// clrscr();
while(lagi != 't');
return 0;
int factorial(int);
int factorial(int x)
{ p*=i;
}
return(p); }
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
main()
{ FILE *iterasi;
char lagi;
do
{ //clrscr();
do
cout << "g(x) = -(x^3/18) + x^2/2 + 1/3\n\n"; Tampilan utama pada program.
g1x = (-pow(x,2)/6)+ x;
getch();
x0 = x;
i = 0;
printf("\n\t--------------------------------------------\n");
do
x = xi;
i++;
printf(" diperoleh\n");
fclose(iterasi);
}while(lagi != 't');
return 0;
}
PENUTUP
DAFTAR PUSTAKA