BAB I PENDAHULUAN 1.1. 1.1. Lata Latarr Bel Belak akan ang. g. Dalam permasalahan non-linier, terutama permasalahan yang mempunyai hubungan fungsi eksponensial eksponensial dalam pembentukan polanya dapat dianalisis dianalisis secara secara eksperiment eksperimental al maupun teoritis. Salah satu bagian dari analisa teoritis adalah dengan melakukan komputasi dengan metode numerik. Metode numerik dalam komputasi akan sangat membatu dalam menyelesai menyelesaikan kan permasalaha permasalahan-perm n-permasalah asalahan an yang rumit rumit diselesaika diselesaikan n secara secara aritmatika aritmatika.. Metode numerik akan sangat membantu setiap penyelesaian permasalahan apabila secara matema matematis tis dapat dapat dibent dibentuk uk suatu suatu pola pola hubunga hubungan n antar antar variab variabel/ el/par parame ameter ter.. Hal ini akan menjadi lebih baik jika pola hubungan yang terbentuk dapat dijabarkan dalam bentuk fungsi fungsi.. Ada sejuml sejumlah ah metode metode numeri numerik k yang yang dapat dapat diguna digunakan kan untuk untuk menyel menyelesa esaika ikan n persamaan non-linear. Metode Metode numeri numerik k digunak digunakan an untuk untuk menyel menyelesa esaika ikan n persoa persoalan lan dimana dimana perhit perhitung ungan an secara analitik tidak dapat digunakan. Metode numerik ini berangkat dari pemikiran bahwa permasalahan dapat diselesaikan dengan menggunakan pendekatan-pendekatan yang dapat dipert dipertangg anggungung-jaw jawabk abkan an secara secara analit analitik. ik. Metode Metode numeri numerik k ini disaji disajikan kan dalam dalam bentuk bentuk algori algoritma tma-al -algor gorit itma ma yang yang dapat dapat dihitu dihitung ng secara secara cepat cepat dan mudah. mudah. Pendek Pendekata atan n yang yang digunakan dalam metode numerik merupakan pendekatan analisis matematis. Sehingga dasar pemikirannya pemikirannya tidak keluar jauh dari dasar pemikiran pemikiran analitis, analitis, hanya saja pemakaian grafis grafis dan teknik teknik perhitungan perhitungan yang mudah merupakan pertimbangan pertimbangan dalam pemakaian pemakaian metode metode numerik. numerik. Dan dalam laporan praktikum praktikum ini digunakan digunakan bahasa pemograman pemograman Min GW. GW.
Dima Dimana na MinG MinGW W atau atau Mini Minima mali list st GNU GNU for for Windo Windows ws adal adalah ah pake pakett prog progra ram m
pemrograman berbasis GNU yang dapat dijalankan di dalam sistem operasi Windows. Di dalam paket ini sudah meliputi program GCC sendiri.
1.2. 1.2. Tuju Tujuan an Prak Prakti tiku kum m
Pembuatan Pembuatan laporan ini walau awalnya sebagai tugas mata kuliah kuliah Metode Numerik Numerik sebenarnya juga sangat membantu penulis dan untuk memahami metode Iterasi, Deret Taylor Taylor,, Bisect Bisection ion,, Regula Regula Falsi, Falsi, Newton Newton Raphso Raphson, n, metode metode elimin eliminasi asi Gauss Gauss - Jordan, Jordan, Cramer, Decomposisi LU, metode Eliminasi Gaus, Jacobi, Seidel, Trapesium, Titik Tengah ini lebih baik 1.3. 1.3. Manf Manfaat aat Prak Prakti tikum kum Manfaat dari laporan serta program yang dibuat kelompok antara lain : 1. Memban Membantu tu memaha memahami mi lebih lanjut lanjut penyel penyelesa esaian ian sistem sistem persam persamaan aan linier linier dengan dengan metode eliminasi Gauss-Jordan. 2. Membantu Membantu pengguna pengguna yang ingin ingin menyele menyelesaikan saikan sistem sistem persamaan persamaan linier. linier. 3. Memban Membantu tu mempel mempelaja ajari ri langka langkah-l h-langk angkah ah yang yang dilakuk dilakukan an untuk untuk menyel menyelesa esaika ikan n sistem persamaan linier.
BAB II PEMBAHASAN
II.1 Deret Tailor Pada umumnya umumnya fungsi-fun fungsi-fungsi gsi yang bentuknya bentuknya kompleks kompleks dapat disederhanakan disederhanakan menjadi menjadi fungsi fungsi hampiran hampiran dalam bentuk fungsi polinomial polinomial yang lebih sederhana. sederhana. Fungsi Fungsi polinomial 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 menggunakan fungsi hampiran, maka akan kita dapatk dapatkan an hasil hasil solusi solusi hampir hampiran an (solus (solusii pendeka pendekatan tan). ). Perbeda Perbedaan an antara antara solusi solusi eksak eksak dan solusi hampiran terletak pada adanya galat pada solusi hampiran. Galat pada solusi numerik harus harus dihubu dihubungka ngkan n dengan dengan sebera seberapa pa teliti teliti polino polinomia miall dalam dalam mengha menghampi mpiri ri fungsi fungsi yang yang sesu sesung nggu guhn hnya ya..
Bias Biasan anya ya
dala dalam m
meng mengha hamp mpir irii
fung fungsi si
yang yang
sesu sesung nggu guhn hnya ya,,
oran orang g
menggunakan apa yang disebut dengan deret Taylor.
II.1.1 Definisi Deret Taylor x) dan turunannya, yaitu f '( x), x), f "( x), x), f '''( x),..., x),..., f (n) ( x) x) Andaikan suatu fungsi f ( x) kontin kontinu u dalam selan selang g a,b], a,b], dan [ , ] 0 x ∈ a b , maka untuk nilai x disekitar 0 x (Gambar 3.1) f 3.1) f (( x) x) dapat diekspansikan diperluas) ke dalam deret deret Taylor sebagai, 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 Dalam perhit perhitunga ungan n menggu menggunaka nakan n deret deret Taylor Taylor dimana dimana fungsi fungsi dituru diturunka nkan n terus terus sampai sampai tak hingga , maka maka diperl diperluka ukan n adanya adanya sebuah sebuah pemoto pemotongan ngan pada pada keadaan keadaan terten tertentu tu yang yang menyat menyatakan akan kapan kapan perhit perhitung ungan an terseb tersebut ut harus harus berhen berhenti ti . Keadaan Keadaan tertentu yang dipakai biasanya ditentukan oleh nilai dari suku. II.2 Metode Bisection ( Bagi Dua )
Misalkan suatu fungsi f fungsi f (( x) x) kontinu dalam interval tertutup [a [a,b], f ], f ((a)
∗
f ( f (b) < 0 dan c
= 1/2( a + b ) , dimana c ∈[a,b] . Interval baru yang dipilih selalu [a [a,c] atau [c [c,b]. Interval yang diambil untuk iterasi berikutnya adalah subsinterval yang di dalamnya f (a) dimungkinkan terdapat akar, namun hal ini bergantung pada apakah apakah f
∗
f (c) < 0
atau f atau f ((c) ∗ f ( f (b) < 0. Perhatikanlah proses penentuan interval baru di bawah ini,
Inte Interv rval al dengan
baru baru dibag dibagii dua lagi lagi
cara
yang
seterusnya
sama.
Begitu
sampai ukuran interval
yang baru sudah sangat kecil dan hal ini tentu saja sesuai dengan toleransi toleransi kesalahan 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 hampiran: f ((c) ≈ 0
Galat relatif relatif hampiran hampiran akar :
dalam hal ini δ adalah galat relatif relatif
hampiran yang diinginkan. II.2.1 Algoritma Metode Bisection
a,b] dimana f ( x) x) Asumsi awal yang harus diambil adalah: ‘menebak’ interval awal [[a adalah kontinu padanya, demikian pula harus terletak ‘mengapit’ (secara intuitif) nilai akar a, sedemikian rupa sehingga: f ( f (a) × f × f ((b) £ 0 Algoritma Bisection ( f f ,a,b,akar ,e,iter ,itmax, itmax flag , flag ) 1.
Tebak harga interval [a [a,b]; tentukan e; dan itmax
2.
Set f Set f 0 = f = f (a); iter = 0; flag 0; flag = = 0;
3.
akar = c := (a iter = iter + iter + 1; Tentukan atau hitung akar = (a + b)/2; iter =
4.
Jika f Jika f (a)· f f (c) £ 0 maka b = c jika tidak a tidak a = c dan f dan f 0 = f = f (a);
5.
Jika (b (b – a – a) £ e maka flag maka flag = = 1 jika iter > itmax maka flag maka flag = = 2;
6.
Jika flag Jika flag = = 0 ulangi ke nomor 3;
7.
Akar persamaan adalah: akar = akar = (a (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). g(x). Trasfo Trasforma rmasi si ini dapat dapat dilaku dilakukan kan dengan dengan manipu manipulas lasii aljaba aljabarr atau atau penamba penambahan han sederhana x ke kedua ruas persamaan, misal : x2 + 2x - 3 = 0
2x = x2 + 3
Sin x = 0 akan dimasukkan dimasukkan dalam bentuk persamaa persamaan n x = g(x) dengan dengan menambahkan menambahkan pada kedua ruas : x = sin x + x. dimana persamaan x = g(x) dapat memperkirakan sebuah harga x, sebagai fungsi dari x. Jadi dengan adanya tebakan awal xi, maka dapat dihitung suatu taksiran baru xi+1 yang dapat dinyatakan : Xi+1 = g(x)
Seperti rumus iterasi lain, maka kesalahan aproksimasinya :
100 % II.3.1 Algoritma Metode Iterasi
1. 2. 3. 4. 5. 6.
Masukkan matrik A, dan vektor B beserta ukurannya n Tentukan batas maksimum iterasi max_iter Tentukan toleransi error ε Tentukan nilai awal dari xi dari xi,, untuk I = 1 s/d n Simpan xi Simpan xi dalam si dalam si,, untuk I = 1 s/d n Untuk i = 1 s/d n hitung:
iterasi iterasi+1 7. Bila iterasi lebih dari max_iter atau tidak terdapat ei < ε untuk I = 1 s/d n 8. maka proses dihentikan dari penyelesaiannya adalah xi 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. secand.
Seperti metode bagi-d bagi-dua ua,, metode metode regula regula falsi dimulai dimulai dengan dengan dua titik titik awal awal a0 dan b0 sedemikian sehingga f sehingga f (a0) dan f dan f (b0) berlawanan tanda. Berdasarkan teorema nilai antara, antara, ini berarti fungsi f fungsi f memiliki memiliki akar dalam selang [a [a0, b0]. Metode ini kemudian berlanjut dengan f . Pada iterasi ke-k menghasilkan berturut-turut selang [a [ak , bk ] yang semuanya berisi akar f ke-k , bilangan bilangan dihitung. dihitung. Seperti Seperti yang diterangkan diterangkan di bawah, ck adalah adalah akar akar dari dari garis garis sekan sekan melalui (a (ak , f(a f(ak )) )) dan (b (bk , f(bk f(bk )). )). Jika f(a f(ak ) dan f (ck ) memiliki tanda yang sama, maka kita menetapkan ak +1 +1 = ck dan bk +1 +1 = bk . Jika tidak, kita menetapkan ak +1 +1 = ak dan bk +1 +1 = ck . Proses ini diteruskan hingga akar dihampiri dengan cukup baik.
II.4.1 ALGORITMA Algoritma RegulaFalsi ( f f ,a,b,akar ,e,iter ,itmax, itmax flag , flag )
1. Tebak harga interval [a [a,b]; tentukan e; dan itmax 2. Set xold = 2*b 2*b-a; iter = 0; flag 0; flag = = 0; akar = c = b – f f (b) [(b f (b) – f f (a)); iter = iter = iter + iter + 1; 3. Tentukan atau hitung akar = [(b – a – a)/( f 4. Jika f Jika f (b)· f f (c) £ 0 maka a = c jika tidak b tidak b = c; iter > itmax maka flag 5. Jika abs(c abs(c – xold) £ e maka flag maka flag = = 1 atau jika iter > maka flag = = 2 atau jika tidak maka iter = iter = iter + iter + 1 dan akar = akar = c; 6. Jika flag Jika flag = = 0 ulangi ke nomor 3; 7. Selesai. II.5 Metode Newton Raphson
Metode Metode Newton Newton Raphso Raphson n adalah adalah metode metode pendeka pendekatan tan yang yang menggun menggunaka akan n satu satu titik titik dan mende mendeka kati tiny nyaa denga dengan n memp memper erha hati tikan kan slope slope atau atau gradi gradien en pada pada titi titik k ters terseb ebut ut.. Titi Titik k 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 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. Defi Defini nisi sika kan n fung fungsi si F(x) 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 pendak pendakata atanny nnyaa adalah adalah titik titik pendeka pendekatan tan yang yang konver konvergen gensin sinya ya pada pada akar akar persamaan yang diharapkan. 4. Hitung Hitung F(x0 F(x0)) dan F(x1 F(x1)) sebaga sebagaii y0 dan dan y1 5. Untuk Untuk iter iterasi asi I = 1 s/d n atau atau |F(xi |F(xi)| )| xi +1 = xi − yi
xi − xi −1 yi − yi −1
hitung yi+1 = F(xi+1) 6. Akar Akar persam persamaan aan adala adalah h nilai nilai x yang yang terakhi terakhir. r.
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:
''
x3
a11 a 21 a31
a12
a13 | b1
a 22
a 23
a32
a33
| b2 | b3
a11 → 0 0
a12
a13 | b1
a22
a23
0
a33
| b '' | b3 ' 2
x 2
→
x1
=
=
(b1
=
(b2'
b3 ''
a33 −
'
a 23 x3 ) '
a 22 −
a12 x 2
−
a13 x3 )
a11
II.8 Metode Eliminasi Gauss Jordan
Berb Berbag agai ai meto metode de dapat dapat dila dilakuk kukan an untuk untuk menca mencari ri penye penyele lesa saia ian n sist sistem em pers persam amaa aan n lini linier er,, diantarany diantaranyaa dengan menggunakan menggunakan metode metode eliminasi eliminasi Gauss Jordan. metode ini hampir sama dengan metode eliminasi gauss. hanya berbeda pada langkah-langkanya saja. Pada Eliminasi Gauss Gauss atau atau Gauss Gauss Jordan, Jordan, siste sistem m persam persamaan aan harus harus diruba dirubah h terleb terlebih ih dahulu dahulu kedala kedalam m bentuk 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 ba ris 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 Jika matrik matrikss A singul singular ar maka maka ia dapat dapat difakt difaktork orkan an menjadi menjadi matrik matrikss segit segitiga iga bawah 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 x nilai x1 yang dihitung dari persamaan pertama tidak digunakan untuk menghitung nilai x nilai x2 dengan persamaan kedua. Demikian juga nilai x 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 x nilai x2 dengan persamaan kedua. Demikian juga nilai x nilai x2 tidak digunakan untuk mencari x3, sehingga nilai-nilai tersebut tidak dimanfaatkan. Sebenarnya nilai-nilai baru tersebut lebih baik dari nilai-nilai yang lama. Di dalam metode Gauss-Seidel nilainilai tersebut dimanfaatkan untuk menghitung variabel berikutnya. Adapun rumus umum yang digunakan yaitu :
1.12. Metode Cramer 1.13. Metode Segiempat Segiempat 1.14. Metode Trapesium Trapesium 1.15. Metode Titik Titik Tengah
BAB III HASIL PERCOBAAN
1.1. 1.1. Deret Deret Tailor Tailor #include #include #include #include #include #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", fopen("error-komputasi.txt", "w+"); cout << "\n\nMencari Kesalahan Komputasi\n\n"; Komputasi\n\n"; cout << "==================== "===========================\n\n"; =======\n\n"; cout << "Persamaan Matematika Approksimasi\n"; Approksimasi\n"; cout << "---------------------------------\n\n"; cout << "e^x=1+(x/faktorial(x))+......\n\n"; "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 printf("\nNilai yang didekati adalah %.9f\n", exact); cout << "\nTekan Enter untuk melanjutkan .........\n"; getch(); ex1 = exact; printf("\n\t----------------------------------------------------------\n"); printf("\tIterasi printf("\tIterasi ke-\tAproksimasi\tEe\t\tEa\n" ke-\tAproksimasi\tEe\t\tEa\n"); ); printf("\t------------------------------------------------------------\n\n"); fprintf(stream,"\n\t------------------------------------------------------------\n");
fprintf(stream,"\tIterasi fprintf(stream,"\tIterasi ke-\tAproksimasi\tEe\t\tEa\n"); ke-\tAproksimasi\tEe\t\tEa\n"); fprintf(stream,"\t------------------------------------------------------------\n\n"); do { j++; if (i != 0.0) { fact += pow(x,i)/factorial(i); pow(x,i)/factorial(i); } ex = 1 + fact; Ee = ((exact-ex)/exact)*100; if(i != 0.0) { Ea = ((ex-ex1)/ex)*100; ( (ex-ex1)/ex)*100; printf("\t\t%d\t%.9f\t%.9f\t% printf("\t\t%d\t%.9f\t%.9f\t%.9f\n", .9f\n", j, ex, Ee, Ea); fprintf(stream,"\t\t%d\t%.9f\t% fprintf(stream,"\t\t%d\t%.9f\t%.9f\t%.9f\t\n", .9f\t%.9f\t\n", j, ex, Ee, Ea); ex1 = ex; } else { printf("\t\t%d\t%.9f\t%.8f\t%.5f\n", printf("\t\t%d\t%.9f\t%.8f\t%.5f\n", j, ex, Ee, Ea); fprintf(stream,"\t\t%d\t%.9f\t% fprintf(stream,"\t\t%d\t%.9f\t%.9f\t%.9f\t\n", .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 printf("\nNilai e^%.2f = %.9f didekati dengan x = %.2f ", x, exact, x); printf("dalam %d iterasi", j); printf("\n\nDengan printf("\n\nDengan Nilai Approksimasi = %.9f", ex); printf("\n\nDengan printf("\n\nDengan Error Relatif absolut sebesar = %.9f", fabs(Ee)); fprintf(stream,"\nNilai fprintf(stream,"\nNilai e^%.2f = %.9f didekati dengan x = %.2f ", x,exact, x); fprintf(stream,"dalam fprintf(stream,"dalam %d iterasi", j); fprintf(stream,"\n\nDengan fprintf(stream,"\n\nDengan Nilai Approksimasi = %.9f", ex); fprintf(stream,"\n\nDengan 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'); 't'); return 0; } int factorial(int); factorial(int); int factorial(int x) { int i, p=1; for(i=1; i<=x; i++) { p*=i; } return(p); }
1.2. 1.2. Metode Metode Iter Iterasi asi #include #include #include #include #include #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 "Metode Iterasi x = g(x)\n"; g(x)\n"; cout << "=============== "=======================\n\n"; ========\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 << "Masu "Masukkan kkan Nilai Nilai x Asumsi Asumsi = ";
cin >> x; 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 printf("\tIterasi ke-\tx = g(x)\tf(x)\n"); printf("\t--------------------------------------------\n\n"); fprintf(iterasi, fprintf(iterasi, "\n\t--------------------------------------------\n"); fprintf(iterasi, fprintf(iterasi, "\tIterasi ke-\tx = g(x)\tf(x)\n"); fprintf(iterasi, fprintf(iterasi, "\t--------------------------------------------\n\n"); do { /* rumus xi = g(x) = -(x^3)/18 -(x^3)/18 + x^2/2 +(1/3) */ xi = -pow(x,3)/18 + pow(x,2)/2 + 0.3333333333; 0.3333333333; fx = pow(xi,3) - 9*pow(xi,2) + 18*xi - 6;
printf("\t\t%d\t%.8f\t%.8f\n", printf("\t\t%d\t%.8f\t%.8f\n", i+1, xi, fx); fprintf(iterasi,"\t\t%d\t%.8f\t% fprintf(iterasi,"\t\t%d\t%.8f\t%.8f\n", .8f\n", i+1, xi, fx); x = xi; i++; }while(fabs(fx) }while(fabs(fx) > error_limit); printf("\n\t--------------------------------------------\n\n"); fprintf(iterasi, fprintf(iterasi, "\n\t--------------------------------------------\n\n"); printf("\nDengan printf("\nDengan tebakan awal x = %.3f", x0); printf(" diperoleh\n"); printf("\nAproksimasi printf("\nAproksimasi Akar Persamaan adalah x = %.10f\n", x); printf("\nError printf("\nError Hasil Aproksimasi adalah f(x) = %.14f\n", fabs(fx)); fprintf(iterasi,"\nDengan fprintf(iterasi,"\nDengan tebakan awal x = %.3f", x0); fprintf(iterasi," fprintf(iterasi," diperoleh\n"); fprintf(iterasi,"\nAproksimasi fprintf(iterasi,"\nAproksimasi Akar Persamaan adalah x = %.10f\n", x); fprintf(iterasi,"\nError fprintf(iterasi,"\nError Hasil Aproksimasi adalah f(x) = %.10f\n", fabs(fx)); fclose(iterasi); cout cout << "\n\ "\n\nC nCob oba a lag lagii den denga gan n x awal awal yang yang berb berbed eda a (y/ (y/t) t) ? "; }while(lagi != 't'); return 0; }
cin cin >> >> lag lagi; i;
1.3. Metode Metode Bisection Bisection ( Bagi Dua ) #include #include #include /* 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 Batas Toleransi Toleransi (e) : "); scanf("%lf",&e); } while(fungsi(a)*fungsi(b)> while(fungsi(a)*fungsi(b)> 0 ); printf("\n a\tc\tb\tf(a)\tf(b)\tf(c)\tGalat\ a\tc\tb\tf(a)\tf(b)\tf(c)\tGalat\n"); n"); E=(b-a); do { c = (a+b)/2; printf("%.4lf\t%.4lf\t%.4lf\t%.4lf\ printf("%.4lf\t%.4lf\t%.4lf\t%.4lf\t%.4lf\t%.4lf\t% t%.4lf\t%.4lf\t%.6lf\n",a,c,b,fungsi(a),fung .6lf\n",a,c,b,fungsi(a),fungsi(b), si(b), fungsi(c),E); if ( fungsi(a)*fungsi(c) 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. 1.4. Meto Metode de Regul Regulaa Fal Falsi si 1.5. 1.5. Meto Metode de Newt Newton on Raphs Raphsom om 1.6. 1.6. Meto Metode de Iter Iteras asii 1.7. 1.7. Meto Metode de Cram Cramer er 1.8. 1.8. Meto Metode de Dek Dekom ompo posi sisi si LU 1.9. 1.9. Met Metode ode Gau Gauss ss 1.10. Metode Gauss Jordan Jordan 1.11. 1.11. Metode Metode Jacobi Jacobi 1.12. Metode Seidel Seidel 1.13. Metode Segiempat Segiempat 1.14. Metode Trapesium Trapesium 1.15. Metode Titik Titik Tengah
BAB IV ANALISA HASIL PERCOBAAN
1.1. 1.1. Deret Deret Tailor Tailor #include #include #include
Pend Pendek ekla lara rasi sian an fung fungsi si-fu -fung ngsi si yang ada didalam program
#include #include #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;
Fungsi utama yang mendeklarasikan tipetipe ipe vari variab able le dari ari fun fungsi gsi yan yang akan akan digunakan.
do { //clrscr(); stream = fopen("error-komputasi.txt", fopen("error-komputasi.txt", "w+"); cout << "\n\nMencari Kesalahan Komputasi\n\n"; Komputasi\n\n"; cout << "================== "=====================\n\n"; ===\n\n"; cout << "Persamaan Matematika Approksimasi\n"; cout << "--------------------------"-------------------------------------------------------\n\n"; -\n\n";
Poin Pointe terr stre stream am menu menunj njuk ukka kan n tempat tempat untuk untuk menyim menyimpan pan error error komputasi. Membuat persamaan untuk fungsi. fungsi. Dan Dan inputan inputan nilai nilai awal. awal. Yang inputan awal tersebut akan langsung diuji.
cout << "e^x=1+(x/faktorial(x))+...... "e^x=1+(x/faktorial(x))+......\n\n"; \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 printf("\nNilai yang didekati adalah %.9f\n", exact); cout << "\nTekan Enter untuk melanjutkan .........\n"; getch(); ex1 = exact; printf("\n\t--------------- printf("\n\t------------------------------------------------------------------------\n"); ----\n"); printf("\tIterasi rintf("\tIterasi ke-\tAproksimasi\tEe\t\tEa\n"); ke-\tAproksimasi\tEe\t\tEa\n"); printf("\t----------------- printf("\t-------------------------------------------------------------------------\n\n"); ---\n\n"); fprintf(stream,"\n\t------ fprintf(stream,"\n\t------------------------------------------------------------------\n"); ---\n");
Nilai ex1 = nilai exact yaitu ex. Lalu akan tampil perintah dari ari prin rintf ke lay layar, ar, dan fprintf ke txt (stream). Dan nilai j bertambah setingkat demi setingkat.
f printf(stream,"\tIterasi printf(stream,"\tIterasi ke-\tAproksimasi\tEe\t\tEa\n"); ke-\tAproksimasi\tEe\t\tEa\n"); fprintf(stream,"\t-------- fprintf(stream,"\t------------------------------------------------------------------\n\n"); -\n\n"); do { j++; if (i != 0.0) { fact += pow(x,i)/factorial(i); } ex = 1 + fact; Ee = ((exact-ex)/exact)*100; ((exact-ex)/exact)*100; if(i != 0.0)
Menent Menentuka ukan n nilai nilai suku/o suku/orde rde dari dari deret tailor. Dan fungsi untuk mencari nilai error dari 1 suku ke suku yang lain.
{ Ea = ((ex-ex1)/ex)*100; ((ex-ex1)/ex)*100; printf("\t\t%d\t%.9f\t%.9f printf("\t\t%d\t%.9f\t%.9f\t%.9f\n", \t%.9f\n", j, ex, Ee, Ea); fprintf(stream,"\t\t%d\t%. fprintf(stream,"\t\t%d\t%.9f\t%.9f\t%. 9f\t%.9f\t%.9f\t\n", 9f\t\n", j, ex, Ee, Ea); ex1 = ex; } else {printf("\t\t%d\t%.9f\t%. {printf("\t\t%d\t%.9f\t%.8f\t%.5f\n", 8f\t%.5f\n", j, ex, Ee, Ea); fprintf(stream,"\t\t%d\t%. fprintf(stream,"\t\t%d\t%.9f\t%.9f\t%. 9f\t%.9f\t%.9f\t\n", 9f\t\n", j, ex, Ee, Ea); ex1 = ex; } i++; } while(fabs(Ee) > error_limit); error_limit); printf("\n\t--------------- printf("\n\t--------------------------------------------------------------------------\n\n"); ------\n\n");
Mak Maka jika ika nilai ilai dari ari Ee sudah lebih besar dari nilai error limit yg telah ditentukan, maka pencarian akan berhenti. Tapi jika Ee < error limit yg ditentukan, maka maka akan akan teru teruss menc mencar arii sampai Ee > error limit.
fprintf(stream,"\n\t------ fprintf(stream,"\n\t------------------------------------------------------------------------\n\n") ---------\n\n");; printf("\nNilai printf("\nNilai e^%.2f = %.9f didekati dgn x = %.2f ", x, exact, x); printf("dalam %d iterasi", j); printf("\n\nDengan printf("\n\nDengan Nilai Approksimasi = %.9f", ex); printf("\n\nDengan printf("\n\nDengan Error Relatif absolut sebesar = %.9f", fabs(Ee)); fprintf(stream,"\nNilai fprintf(stream,"\nNilai e^%.2f =%.9f didekati dg x=%.2f ",x,exact,x); fprintf(stream,"dalam fprintf(stream,"dalam %d iterasi", j); fprintf(stream,"\n\nDengan fprintf(stream,"\n\nDengan Nilai Approksimasi = %.9f", ex); fprintf(stream,"\n\nDg fprintf(stream,"\n\nDg Error Relatif absolut sbsr=%.9f"fabs(Ee)); 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); factorial(int); int factorial(int x) { int i, p=1; p=1; for(i=1; i<=x; i++) { p*=i;
Fungsi dari faktorial
} return(p); }
1.2. 1.2. Metode Metode Iter Iterasi asi #include #include Fungsi yang digunakan dalam program
#include #include #include #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 "Metode Iterasi x = g(x)\n"; g(x)\n"; cout << "==================== "=======================\n\n"; ===\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.
cout << "g'(x) = -(x^2/6) + x\n\n";
Dan persam persamaan aan dari dari metode metode yang yang digunakan didalamnya.
cout << "Bila berulang berarti Nilai g'(x) > 1\n\n"; cout cout << "M "Mas asuk ukka kan n Nil Nilai ai x Asu Asums msii = ";
cin 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 printf("\tIterasi ke-\tx = g(x)\tf(x)\n"); printf("\t--------------------------------------------\n\n"); fprintf(iterasi, fprintf(iterasi, "\n\t--------------------------------------------\n"); fprintf(iterasi, fprintf(iterasi, "\tIterasi ke-\tx = g(x)\tf(x)\n"); fprintf(iterasi, fprintf(iterasi, "\t--------------------------------------------\n\n"); do { /* rumus xi = g(x) = -(x^3)/18 -(x^3)/18 + x^2/2 +(1/3) */
Pengetesan Pengetesan nilai nilai awal terhadap terhadap persamaan yang telah ditentukan. Sampai hasil yang didapat tidak melebi melebihi hi dari dari nilai nilai error error yang yang telah ditentukan. Dan setela setelah h selesa selesaii pencar pencarian ian,, maka hasilnya akan ditampilkan.
xi = -pow(x,3)/18 + pow(x,2)/2 + 0. 3333333333; 3333333333; fx = pow(xi,3) - 9*pow(xi,2) + 18*xi - 6; printf("\t\t%d\t%.8f\t%.8f\n", printf("\t\t%d\t%.8f\t%.8f\n", i+1, xi, fx); fprintf(iterasi,"\t\t%d\t%.8f\t% fprintf(iterasi,"\t\t%d\t%.8f\t%.8f\n", .8f\n", i+1, xi, fx); x = xi; i++; }while(fabs(fx) }while(fabs(fx) > error_limit); printf("\n\t--------------------------------------------\n\n"); fprintf(iterasi, fprintf(iterasi, "\n\t--------------------------------------------\n\n");
Pengecekan hasil yang didapat pada fx dengan nilai error limit. Dengan nilai awal yang telah di inputkan di awal.
printf("\nDengan printf("\nDengan tebakan awal x = %.3f", x0); printf(" diperoleh\n"); printf("\nAproksimasi printf("\nAproksimasi Akar Persamaan adalah x = %.10f\n", x); printf("\nError printf("\nError Hasil Aproksimasi adalah f(x) = %.14f\n", fabs(fx)); fprintf(iterasi,"\nDengan fprintf(iterasi,"\nDengan tebakan awal x = %.3f", x0); fprintf(iterasi," fprintf(iterasi," diperoleh\n"); fprintf(iterasi,"\nAproksimasi fprintf(iterasi,"\nAproksimasi Akar Persamaan adalah x = %.10f\n", x); fprintf(iterasi,"\nError fprintf(iterasi,"\nError Hasil Aproksimasi adalah f(x)=%.10f\n",fabs(fx)); fclose(iterasi); cout <<"\n\nCoba lagi dengan x awal yang berbeda (y/t) ?";cin>>lagi; }while(lagi != 't'); return 0;
Untuk menampilk menampilkan an hasil hasil dari dari pencar pencarian ian yang yang telah telah dilakukan .Da .Dan untuk memutuskan mencoba lagi atau tidak.
}
1.3. Metode Metode Bisection Bisection ( Bagi Dua ) #include #include
Deklarasi fungsi
#include /* Prototipe fungsi dan deklarasi variabel global */ double fungsi(double k); int main() { double a,b,c,e; double E;
Tipe variable yang
do {//clrscr(); printf("Masukkan batas bawah (a) : ");
scanf("%lf",&a);
printf("Masukkan batas atas (b) : ");
scanf("%lf",&b);
print printf(" f("Mas Masukk ukkan an Nila Nilaii Batas Batas Tolera Toleransi nsi (e) : ");
scanf( scanf("%l "%lf", f",&e) &e);;
} while(fungsi(a)*fungsi(b)> while(fungsi(a)*fungsi(b)> 0 );
Perintah tampilan awal pada program. Dimana fungsi yang digunakan yaitu f a *f b >0.
printf("\n a\tc\tb\tf(a)\tf(b)\tf(c)\tGalat a\tc\tb\tf(a)\tf(b)\tf(c)\tGalat\n"); \n"); E=(b-a); do { c = (a+b)/2; printf("%.4lf\t%.4lf\t%.4lf\t%.4lf\ printf("%.4lf\t%.4lf\t%.4lf\t%.4lf\t%.4lf\t%.4lf\t% t%.4lf\t%.4lf\t%.6lf\n", .6lf\n", a,c,b,fungsi(a),fungsi(b), fungsi(c),E);
Pemasukan nilai yang diinput pada fungsi : f(a)*f(c)<0
if ( fungsi(a)*fungsi(c) 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); }
Fungsi yang digunakan dalam
BAB V PENUTUP
DAFTAR PUSTAKA