Anda di halaman 1dari 22

//Metode Bisection//

Persamaan 3x ex = 0, untuk 1 x 2
#include<stdio.h> #include<conio.h> #include<math.h>

float f (float x) { float d; d=(3*x)-exp(x); return d; } main() { float a,b,c,error,toleransi; int i=0; printf("\n selamat datang di Metode Bisection\n"); printf("\nMasukkan batas atas (x1) : "); scanf("%f", &a); printf("Masukkan batas bawah (x2) : "); scanf("%f", &b); printf("Masukkan batas toleransi : "); scanf("%f", &toleransi); if((f(a)*f(b))>0) { printf("Tidak ada akar di x1 dan x2 karena hasil perkalian lebih dari 0\n"); } else { printf("\ni\tx1\tx2\tx3\tf(x1)\tf(x2)\tf(x3)\tError\n"); do { c=(a+b)/2; error=(fabs(b-a))/2; printf("\n%d\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\n", i,a,b,c,f(a),f(b),f(c),error); if((f(a)*f(c))<toleransi) b=c; else a=c; i++; } while (error>toleransi); printf("\n\nSolusi persamaan akar adalah %.3f\n", c); printf("Banyaknya Iterasi adalah %d\n", i); } printf("\n Terima Kasih \n");

getch(); } Tampilan

Analisa: menginputan nilai x1 dan x2 dan nilai toleransinya. Sehingga diperoleh solusi akar sesuai

toleransi, semakin kecil toleransi, maka semakin banyak iterasinya dan semakin akurat namun laju konvergensinya kurang.

Persaman x2 4x 4 ln x = 0, untuk 1 x 2 dan 2 x 4


#include<stdio.h> #include<conio.h> #include<math.h>

float f(float x) { float d; d=(x*x)-(4*x)-4-log(x); } main() { float a,b,c,error,toleransi; int i=0; printf("\nMetode Bisection\n"); printf("\nMasukkan batas bawah (x1) : "); scanf("%f", &a); printf("Masukkan batas atas (x2) : "); scanf("%f", &b); printf("Masukkan batas toleransi : "); scanf("%f", &toleransi); if(f(a)*f(b)>0) { printf("\nTidak ada akar di x1 dan x2 karena hasil perkalian lebih dari 0\n"); } else { printf("\ni\tx1\tx2\tx3\tf(x1)\tf(x2)\tf(x3)\tError\n"); do { c=(a+b)/2; error=(fabs(b-a))/2; printf("\n%d\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f", i,a,b,c,f(a),f(b),f(c),error); if((f(a)*f(c))<toleransi) b=c; else a=c; i++; } while (error>toleransi); printf("\n\nSolusi persamaan akar adalah %.3f\n", c); printf("Banyaknya Iterasi adalah %d\n", i); } getch(); }

Analisa: kita mendeklarasikan persamaan di dalam program. Pada hasil ini solusi alar

persamaannya hampir sama dengan nilai toleransi yang berbeda dengan banyak iterasi yang berbeda

Persamaan x cos x 2x2 + 3x 1 = 0, untuk 0.2 x 0.3 dan 1.2 x 1.3

#include<stdio.h> #include<conio.h> #include<math.h>

float f(float x) { float d; d=(x*(cos(x))-(2*(x*x))+(3*x)-1); } main() { float a,b,c,error,toleransi; int i=0; printf("\nMetode Bisection\n"); printf("\nMasukkan batas bawah (x1) : "); scanf("%f", &a); printf("Masukkan batas atas (x2) : "); scanf("%f", &b); printf("Masukkan batas toleransi : "); scanf("%f", &toleransi); if(f(a)*f(b)>0) { printf("\nTidak ada akar di x1 dan x2 karena hasil perkalian lebih dari 0\n"); } else { printf("\ni\tx1\tx2\tx3\tf(x1)\tf(x2)\tf(x3)\tError\n"); do { c=(a+b)/2; error=(fabs(b-a))/2; printf("\n%d\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f", i,a,b,c,f(a),f(b),f(c),error); if((f(a)*f(c))<toleransi) b=c; else a=c; i++; } while (error>toleransi); printf("\n\nSolusi persamaan akar adalah %.3f\n", c); printf("Banyaknya Iterasi adalah %d\n", i); } getch();

Analisa:

Dengan nilai batas ini ternyata hasil yang didapat adalah divergen
//metoda iterasi titik tetap// Persamaan x3+4x2-10=0 untuk 1 x 2

#include<stdio.h> #include<math.h> #include<conio.h>

float f(float x) { float d; d=(x*x*x)+(4*x*x)-10; return d; } float g(float x) { float d; d= (pow((10-(x*x*x)),0.5))/2; return d; } main() { float a,b,err,tol; int i=0; printf("\nMetode Iterasi Titik Tetap\n"); printf("\nMasukkan titik awal (x1) = "); scanf("%f", &a); printf("Masukkan toleransi = "); scanf("%f", &tol); printf("\ni\tx1\t|x2-x1|\n"); printf("%d\t%.3f\t-\n",i,a); do { b=g(a); err=(fabs(b-a)); printf("%d\t%.3f\t%.3f\n",i+1,b,err); a=b; i++; } while(err>tol); printf("\nSolusi akarnya adalah = %f\n",b); printf("Banyaknya iterasi = %d",i+1); printf("\n terima kasiihhh \n");

getch(); }

Analisa:

Sehingga diperoleh bentuk lain dari fungsi asli. Pada iterasi titik tetap persamaan (a) dengan batas awal 1,5 solusi akar yang hampir sama dengan jumlah iterasi yang berbeda sesuai dengan nilai toleransinya. Persamaan 3x ex = 0
#include<stdio.h> #include<conio.h> #include<math.h> float f(float x) { float d; d=(3*x)-exp(x); } float g(float x) { float d; d=exp(x)/3; return d; } main() { float a,b,error,tol; int i=0; printf("\nMetode Iterasi Titik Tetap\n"); printf("\n INput titik awal (x1) = "); scanf("%f", &a); printf("Input toleransi = "); scanf("%f", &tol); printf("\ni\tx1\t|x2-x1|\n"); printf("%d\t%.3f\t-\n",i,a); do { b=g(a); error=(fabs(b-a)); printf("%d\t%.3f\t%.3f\n",i+1,b,error); a=b; i++; } while(error>tol); printf("\nSolusi akarnya adalah = %f\n",b); printf("Banyaknya iterasi = %d",i+1);

getch(); }

Analisa:

Dengan batas 1.5 dan toleransi berbeda, terlihat semakin kecil toleransi maka semakin banyak iterasi yang terjadi, meskipun dalam kasus ini iterasi yang terjadi terlampau banyak dari seharusnya.

Persamaan x2 - 4x - 4 - ln x = 0 , untuk 1 x 2 dan 2 x 4


#include<stdio.h> #include<conio.h> #include<math.h> float f(float x) { float d; d=(x*x)-(4*x)-4-log(x); } float g(float x) { float d; d= (log(x)+4+(4*x))/x; return d; } main() { float a,b,error,toleransi; int i=0; printf("\nMetode Iterasi Titik Tetap\n"); printf("\nMasukkan titik awal (x1) = "); scanf("%f", &a); printf("Masukkan toleransi = "); scanf("%f", &toleransi); printf("\ni\tx1\t|x2-x1|\n"); printf("%d\t%.3f\t-\n",i,a); do { b=g(a); error=(fabs(b-a)); printf("%d\t%.3f\t%.3f\n",i+1,b,error); a=b; i++; } while(error>toleransi); printf("\nSolusi akarnya adalah = %f\n",b); printf("Banyaknya iterasi = %d",i+1); getch(); }

Analisa:

batas 1.5, didapat hasil yang tidak banyak berbeda baik pada nilai persamaan akar maupun iterasinya. x cos x - 2x2 + 3x - 1= 0 , untuk 0.2 x 0.3 dan 1.2 x 1.3
#include<stdio.h> #include<conio.h> #include<math.h> float f(float x) { float d; d=(x*(cos(x))-(2*(x*x))+(3*x)-1); } float g(float x) { float d; d=((2*x*x)-(x*cos(x))+1)/3; return d; } main() { float a,b,err,tol; int i=0; printf("\nMetode Iterasi Titik Tetap\n"); printf("\nMasukkan titik awal (x1) = "); scanf("%f", &a); printf("Masukkan toleransi = "); scanf("%f", &tol); printf("\ni\tx1\t|x2-x1|\n"); printf("%d\t%.3f\t-\n",i,a); do { b=g(a); err=(fabs(b-a)); printf("%d\t%.3f\t%.3f\n",i+1,b,err); a=b; i++; } while(err>tol); printf("\nSolusi akarnya adalah = %f\n",b); printf("Banyaknya iterasi = %d",i+1); getch(); }

Analisa:

Dengan menggunakan titik awal 1,25 didapatkan hasil solusi akar yang sama pada setiap toleransi dengan jumlah iterasi yang hampir sama tetapi ada kesalahan dari praktikan karena iterasi yang dimasukkan salah.
//Metoda Newton// Persamaan x3+4x2-10=0 untuk 1 x 2 #include <stdio.h> #include <conio.h> #include <math.h> float f(float x) { float d; d=(x*x*x)+(4*x*x)-10; return d; } float df(float x) { float d; d=(3*x*x)+(8*x); return d; } main() { float k,u,err,tol; int i=0; printf("\nMetode Newton\n\n"); printf("INput titik awal (x1) = "); scanf("%f", &k); printf("Input toleransi = "); scanf("%f", &tol); printf("\ni\tx1\t|x2 -x1|\n"); printf("%d\t%.3f\t-\n", i,k); if(df(k) == 0) { printf("\nNilai turunan f(x1) = 0 , oleh karena itu idak bisa melakukan perhitungan"); getch(); return 0; } else { do { u=k-(f(k)/df(k)); err=fabs(u-k); printf("%d\t%.3f\t%.3f\n",i+1,u,err); k=u; i++; } while(err>tol); printf("\nSolusi akarnya adalah = %f\n",u);

printf("Banyaknya iterasi = %d",i+1); } getch(); }

Analisa:

Dengan metode Newton yang berbeda dengan metode lain karena menggunakan fungsi turunan, diperoleh nilai akar 1.365230 yang mendekati solusi akar sebenarnya dengan titik awal 1 dan banyaknya iterasi yang sama, dan ada kesalahan lagi dari praktikan bahwa iterasi yang dimasukkan salah 3x - ex = 0 , untuk 1 x 2
#include <stdio.h> #include <math.h> #include <conio.h> float f(float x) { float d; d=(3*x)-exp(x); return d; } float df(float x) { float d; d=(3)-exp(x); return d; } main() { float a,b,err,tol; int i=0; printf("Masukkan titik awal (x1) = "); scanf("%f", &a); printf("Masukkan toleransi = "); scanf("%f", &tol); printf("\ni\tx1\t|x2 -x1|\n"); printf("%d\t%.3f\t-\n", i,a); if(df(a) == 0) { printf("\nNilai turunan f(x1) = 0 , oleh karena itu idak bisa melakukan perhitungan"); getch(); return 0; } else { do { b=a-(f(a)/df(a)); err=fabs(b-a); printf("%d\t%.3f\t%.3f\n",i+1,b,err); a=b; i++; } while(err>tol);

printf("\nSolusi akarnya adalah = %f\n",b); printf("Banyaknya iterasi = %d",i+1); } getch(); }

Analisa:

menggunakan fungsi turunan, diperoleh nilai akar 0.61 yang mendekati solusi akar sebenarnya dengan titik awal 1 dan banyaknya iterasi yang sama, dan ada kesalahan lagi dari praktikan bahwa iterasi yang dimasukkan salah Persamaan x2 - 4x - 4 - ln x = 0 , untuk 1 x 2 dan 2 x 4
#include <stdio.h> #include <conio.h> #include <math.h> float f(float x) { float d; d=(x*x)-(4*x)-4-log(x); return d; } float df(float x) { float d; d=(x*x)-4-(1/x); return d; } main() { float a,b,err,tol; int i=0; printf("Masukkan titik awal (x1) = "); scanf("%f", &a); printf("Masukkan toleransi = "); scanf("%f", &tol); printf("\ni\tx1\t|x2 -x1|\n"); printf("%d\t%.3f\t-\n", i,a); if(df(a) == 0) { printf("\nNilai turunan f(x1) = 0 , oleh karena itu idak bisa melakukan perhitungan"); getch(); return 0; } else { do { b=a-(f(a)/df(a)); err=fabs(b-a); printf("%d\t%.3f\t%.3f\n",i+1,b,err); a=b; i++; } while(err>tol); printf("\nSolusi akarnya adalah = %f\n",b); printf("Banyaknya iterasi = %d",i+1); } getch();

\ Anaslisa:

Dengan metode Newton yang berbeda dengan metode lain karena menggunakan fungsi turunan, diperoleh nilai akar 1.365230 yang mendekati solusi akar sebenarnya dengan titik awal 1 dan banyaknya iterasi yang sama, dan ada kesalahan lagi dari praktikan bahwa iterasi yang dimasukkan salah

x cos x - 2x2 + 3x - 1= 0 , untuk 0.2 x 0.3 dan 1.2 x 1.3


#include <stdio.h> #include <conio.h> #include <math.h> float f(float x) { float d; d=(x*(cos(x))-(2*(x*x))+(3*x)-1); return d; } float df(float x) { float d; d= 3-(x*sin(x))-(4*x); return d;

} main() { float a,b,err,tol; int i=0; printf("Masukkan titik awal (x1) = "); scanf("%f", &a); printf("Masukkan toleransi = "); scanf("%f", &tol); printf("\ni\tx1\t|x2 -x1|\n"); printf("%d\t%.3f\t-\n", i,a); if(df(a) == 0) { printf("\nNilai turunan f(x1) = 0 , oleh karena itu idak bisa melakukan perhitungan"); getch(); return 0; } else { do { b=a-(f(a)/df(a)); err=fabs(b-a); printf("%d\t%.3f\t%.3f\n",i+1,b,err); a=b; i++; } while(err>tol); printf("\nSolusi akarnya adalah = %f\n",b); printf("Banyaknya iterasi = %d",i+1); } getch(); }

Analisa:

Dengan metode Newton yang berbeda dengan metode lain karena menggunakan fungsi turunan, diperoleh nilai akar 1.365230 yang mendekati solusi akar sebenarnya dengan titik awal 1 dan banyaknya iterasi yang sama, dan ada kesalahan lagi dari praktikan bahwa iterasi yang dimasukkan salah

Tugas Akhir
1. Metode Secant Fungsi x3 + 4x2 - 10 = 0, untuk 1 x 2
#include <stdio.h> #include <math.h> #include <conio.h> float f(float x) { float d; d=(x*x*x)+(4*x*x)-10; return d; } main() { float a,b,err,tol; int i=0; printf("\n Secant \n\n"); printf("Masukkan titik awal (x1) = "); scanf("%f",&a); printf("Nilai toleransi = "); scanf("%f",&tol); printf("\ni\tx1\t|x2-x1|\n"); printf("%d\t%.4f\t-\n",i,a); if((f(b)-f(a))==0) { printf("Nilai turunan f(x1) = 0 , jadi tidak bisa melakukan perhitungan"); getch();} else { do { b=a-((f(a)*(b-a))/(f(b)-f(a))); err=fabs(b-a); printf("%d %.4f\t%.4f\n",i+1,b,err); a=b; i++; } while(err>tol); printf("\nSolusi akarnya adalah = %.4f\n",b); printf("Banyaknya iterasi adalah = %d",i+1); } getch(); }

2.Regula Falsi Fungsi x3 + 4x2 - 10 = 0, untuk 1x


#include<stdio.h> #include<math.h> #include<conio.h> float f(float x) { float d=(x*x*x)+(4*x*x)-10; return d; } main() { float a,b,c,err,tol; int itemax,i,s; i=0; s=1; printf("\n Soal no.2 Regula Falsi\n"); printf("\nMasukkan batas bawah = ");scanf("%f",&a); printf("Masukkan batas atas = ");scanf("%f",&b); printf("Nilai toleransi = ");scanf("%f",&tol); printf("Masukkan jumlah maksimal iterasi = "); scanf("%d", &itemax); printf("\ni\ta\tb\tc\tf(a)\tf(b)\tf(c)\n"); if (f(a)*f(b) < 0) { do { c=a-(f(a)*(b-a))/(f(b)-f(a)); printf("\n%3i\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f",i,a,b,c,f(a),f(b),f(c )); if ( f(a)*f(c) == 0) { s=0; } else { if (f(a)*f(c) < 0) b=c; else a=c; if (tol > fabs(c)) s=0; if (i >= itemax ) s=0; } i++; } while(s==1); } else

{ puts("Maaf, nilai tidak mengandung akar"); getch(); } puts("\n"); printf("Nilai akar = %.3f", c); getch(); }

2.Tabel Perbandingan
x3 + 4 x2 - 10 = 0 dengan interval 1 x 2 Bisection Batas/Titik awal Toleransi Iterasi Solusi Akar 1 0.01 7 1.445 Regula Falsi Iterasi Titik Tetap Newton Secant 1 1 1 1 0.01 0.01 0.01 0.01 3 (input maks) 8 4 3 1.364 1.367 1.365 -1.#IND

Resume Semua Metoda: Metoda Bisection, kita harus menentukan terlebih dahulu nilai a dan b secara bebas. Lalu kita tentukan nilai tengah dari nilai a dan b atau m=(a+b)/2, dan kita mendapatkan nilai akar yang mendekati nol sesuai yang kita inginkan. Kelemahan dari Metoda bisection adalah syarat nilai a dan b harus berbeda tanda Jika sama maka nilai akar taidak akan ada. Pada Metoda Fixed Point Iteration, akar-akar persamaan nonlinier yang diperoleh didapat dari perubahan fungsi f(x) menjadi g(x) atau lainnya. Metoda Newton-Raphson lebih unggul jika dibandingkan metoda sebelumnya. Karena metoda ini merupakan metoda penyelesaian fungsi f(x)=0. Pada metoda ini hasil akar yang diperoleh lebih akurat.

Kesimpulan Pada praktikum kali ini praktikan harus mengerjakan program dengan 3 metode yang mana di setiap metoda ada 4 persamaan.Hail yang didapat tidak jauh berbeda di setiap iterasi karena perbandingan yang dipakai tidak terlalu mencolok. Metoda Bisection, kita harus menentukan terlebih dahulu nilai a dan b secara bebas. Lalu kita tentukan nilai tengah dari nilai a dan b atau m=(a+b)/2, dan kita mendapatkan nilai akar yang mendekati nol sesuai yang kita inginkan. Kelemahan dari Metoda bisection adalah syarat nilai a dan b harus berbeda tanda Jika sama maka nilai akar taidak akan ada. Pada Metoda Fixed Point Iteration, akar-akar persamaan nonlinier yang diperoleh didapat dari perubahan fungsi f(x) menjadi g(x) atau lainnya. Metoda Newton-Raphson lebih unggul jika dibandingkan metoda sebelumnya. Karena metoda ini merupakan metoda penyelesaian fungsi f(x)=0. Pada metoda ini hasil akar yang diperoleh lebih akurat

Anda mungkin juga menyukai