Dalam mencari nilai suatu akar dari suatu persamaan atau permasalahan yang ada, berbagai macam cara dan metode, berikut ini bermacam-macam metode yang dapat kita gunakan dalam mencari nilai suatu akar persamaan :
- Metode Bagi Dua (Bisection)
- Metode Reguler Falsi
- Metode Iterasi Titik Tetap
- Metode Newton Rephson
- Metode Secant
Dalam kesempatan kali ini saya akan membahas semua metode yaitu metode bagi dua, regular falsi, iterasi titik tetap, newton raphson, secant.
METODE BISECTION
Apa Sih Bisection itu??
Bisection adalah algoritma pencarian akar pada sebuah interval. Interval tersebut membagi dua bagian, lalu memilih dari dua bagian ini dipilih bagian mana yang mengandung akar dan bagian yang tidak mengandung akar dibuang. Hal ini dilakukan berulang-ulang hingga diperoleh akar persamaan atau mendekati akar persamaan. Metode ini berlaku ketika ingin memecahkan persamaan f(x) = 0 dengan f merupakan fungsi kontinyu.
Prosedur Metode Bagi-Dua
- Misal dijamin bahwa f(x) adalah fungsi kontinyu pada interval [a, b] dan f(a)f(b) < 0. Ini artinya bahwa f(x) paling tidak harus memiliki akar pada interval [a, b].
- Kemudian definisikan titik tengah pada interval [a, b] yaitu c :=. Dari sini kita memperoleh dua subinterval yaitu [a, c] dan [c, b].
- Setelah itu, cek apakah f(a)f(c) < 0 atau f(b)f(c) < 0 ?
- Jika f(a)f(c) < 0 maka b = c (artinya titik b digantikan oleh titik c yang berfungsi sebagai titik b pada iterasi berikutnya),
- jika tidak maka a = c. Dari iterasi pertama kita memperoleh interval [a, b] yang baru dan titik tengah c yang baru.
- Kemudian lakukan pengecekan lagi seperti sebelumnya sampai memperoleh error yang cukup kecil.
Contoh Soal !!
kerjakan akar dari 𝑓(𝑥) = 𝑥^3 − 𝑥 ^ − 𝑥 + 1 = 0 menggunakan metode biseksi dan dengan program yang kalian ketahui!
source code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | #include<stdio> #include<math.h> float f(float x){ return (pow(x,3.0))-(pow(x,2.0))-x+1; } void RegulaFalsi(float atas, float bawah, int iterasi){ int i=0; float c; float fb,fc,fa; printf("RegulaFalsi\n"); while(i<iterasi){ fb=f(bawah); fa=f(atas); c= bawah - (fb/(fb-fa)) * (bawah-atas); fc=f(c); printf("Iterasi %d:\t Xr %f\t F(Xr)\t%f\n",i+1,c,fc); if(fb*fc<0){ atas=c; }else{ bawah=c; } i++; } } void BisectionMethod(float atas, float bawah, int iterasi) { float fb,fc,fa; float c; int n; printf("Bisection\n"); for (n = 0; n < iterasi; n++) { fb=f(bawah); fa=f(atas); c = (bawah + atas) / 2; c = roundf(c * 1000) / 1000; fc=f(c); printf("Iterasi %d:\t Xr %f\t F(Xr)\t%f\n",n+1,c,fc); if (fc * fb < 0) { atas = c; } else { bawah = c; } } } int main(){ float a,b,c; int iterasi; a=1; b=3; c=0; printf("(pow(x,3.0))-(pow(x,2.0))-x+1\n"); printf("masukan iterasi\n"); scanf("%d",&iterasi); RegulaFalsi(a, b, iterasi); BisectionMethod(a, b, iterasi); } |
METODE REGULA FALSI
Metode Regula Falsi adalah salah satu metode numerik yang digunakan untuk mencari akar dari suatu persamaan dengan memanfaatkan kemiringan dan selisih tinggi dari dari dua titik batas range. Sebenarnya metode ini hampir sama dengan Metode Biseksi, tapi titik pendekatan yang digunakan pada metode ini berbeda dengan Metode Biseksi.
Rumus
Contoh Soal !!
kerjakan akar dari 𝑓(𝑥) = 𝑥 3 − 𝑥 2 − 𝑥 + 1 = 0 menggunakan metode biseksi dan regula falsi dan dengan program yang kalian ketahui!
source code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | #include<stdio.h> #include<math.h> double f(double x) { return(pow(x,3.0))-(pow(x,2.0))-x+1; } main() { double y[100],a,b,e,y1,y2,xr,y3; int n,i=0; printf("\t\tMetode Regula falsi\t\t\n"); printf("masukkan batas bawah="); scanf("%lf",&a); printf("masukkan batas atas="); scanf("%lf",&b); printf("masukkan toleransi error="); scanf("%lf",&e); printf("masukkan iterasi maksimum="); scanf("%d",&n); y1=f(a); y2=f(b); if(y1*y2>0) printf("tidak ditemukan akar\n"); else { i<=n; printf("a |\tb |\t\txr|\tf(a) |\t\tf(b) |\tf(x) \n"); printf("==================================================================\n"); while (i<=n) { xr=((y2*a)-(y1*b))/(y2-y1); y[i]=f(xr); y3=f(xr); printf("|%3d|%.7lf|%.7lf|%.7lf|%.7lf|%.7lf|\n",i+1, a, b, xr, y1,f(xr)); if(y[i]*y1<0) { b=xr; y2 = f(xr); } else { a=xr; y1 = f(xr); } i++; if(fabs(b-a)<=e || i>(n-1)) break; } printf("=====================================================================\n"); printf("Akar persamaan adalah %lf\n",xr); if (f(xr)<0) { y3=(fabs(y2*-1)); printf("Nilai error = %.7f\n",y3); } else printf("Nilai error = %.7f\n",y3); } } |
output
Pembuktian
METODE ITERASI TITIK TETAP
Metode iterasi titik tetap disebut juga metode iterasi sederhana, metodelangsung, atau metode substitusi beruntun. Metode iterasi titik tetap adalahmetode yg memisahkan x dengan sebagian x yang lain sehingga diperoleh: x =g(x).
Prosedur
Kesederhanaan metode ini karena pembentukan prosedur iterasinya yang mudah dibentuk sebagai berikut.
- Ubah persamaan f(x)=0 menjadi bentuk x=g(x)
- Bentuk menjadi prosedur iterasi xr+1=g(x¿¿r)¿
- Terka sebuah nilai awal x0
- Hitung nilai x1,x2,x3,..., yang konvergen ke suatu titik s
- Terdapat beberapa kemungkinan prosedur iterasi yang dapat dibentuk
- x = x^3 - x^2 +1
- x = x^2 (x-1) +1
- x = x (x^2-x) +1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include <stdio.h> #include <iostream> #include <conio.h> #include <math.h> using namespace std; float eth,x[20]; int i=-1; float F(float x){ return (pow(x,3.0))-(pow(x,2.0))-x+1; } float G(float x){ return ((pow(x,2.0))*(x-1))+1; } main () { cout << " Metode Iterasi Sederhana\n"<<endl; cout << " Masukkan Nilai Awal : "; cin >> x[0]; cout << "\n Masukkan Batas Toleransi : "; cin >> eth; printf(" \n iterasi\t x(i)\t\t akar\t\t fx(i+1)\n"); do { i++; x[i+1]= G(x[i]); printf("\n %d\t %f\t %f\t %f\t\n",i+1,x[i],x[i+1],F(x[i+1])); } while (fabs(F(x[i+1])) > eth); printf("\n akar = %f \n",x[i+1]); getch(); } |
METODE NEWTON REPSHON
Metode Newton Raphson diperkenalkan oleh Sir Isaac Newton (1643-1727) dan Joseph Raphson (1648–1715) yang dipergunakan untuk pencarian akar real dari persamaan non linear. Metode Newton Raphson ini memiliki keuntungan dibandingkan metode yang lain seperti Bisection atau Secant karena hanya membutuhkan satu nilai aproksimasi dan jumlah iterasi (konvergensi) yang lebih sedikit terutama jika nilai aproksimasi awal yang dipilih berada "dekat" dengan akar yang akan dicari.
Prosedur Newton Repshon
Algoritma metode Newton Raphson dengan metode geometri adalah sebagai berikut:
- Mulai
- Tentukan nilai aproksimasi awal x0
- Cari nilai fx0 dan f'x0
- Cari nilai x1 = x0 - (fx0/f'x0)
- Cari nilai error = |x1-x0|
- x0 = x1
- Jika nilai error > toleransi error maka ulangi langkah 2, jika tidak tampilan x0 sebagai akar persamaan yang dicari
- Selesai
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include <stdio.h> #include <iostream> #include <conio.h> #include <math.h> using namespace std; float eth,x[20]; int i=-1; float F(float x){ return (pow(x,3.0))-(pow(x,2.0))-x+1 ; } float Ft(float x){ return (3.0*pow(x,2.0))-(2.0*x)+1; } main () { cout << " Metode Newton Raphson\n"<<endl; cout << " Masukkan Nilai Awal : "; cin >> x[0]; cout << "\nMasukkan Batas Toleransi : "; cin >> eth; printf("\niterasi\t x(i)\t\t x(i+1)\t\t fx(i+1)\t f'x(i+1)\n"); do { i++; x[i+1]= ((x[i]) - ( F(x[i]) / Ft(x[i]))); printf("\n%d\t %f\t %f\t %f\t %f\t\n",i+1,x[i],x[i+1],F(x[i+1]),Ft(x[i+1])); } while (fabs(F(x[i+1])) > eth); printf("\nakar = %f \n",x[i+1]); getch(); } |
Pembuktian
METODE SECANT
- Definisikan fungsi F(x)
- Definisikan torelansi error (e) dan iterasi maksimum (n)
- 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.
- Hitung F(x0) dan F(x1) sebagai y0 dan y1
- Untuk iterasi I = 1 s/d n atau | F(xn) | Xn+1 = Xn – Yn (Xn – Xn-1 / Yn – Yn-1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #include <iostream> #include <conio.h> #include <cmath> #include <iomanip> using namespace std; float f(float x); int main() { float d,e,r,q,p,n,epsilon; float s; cout<<" Secant Method "<<endl; cout<<"Function: f(x) = (x1*x1*x1)-(x1*x1)-(1)+ 1 "<<endl; cout<<"Enter the 2 initial guess "<<endl; cout<<"Guess 1: ";cin>>d; cout<<"Guess 2: ";cin>>e; cout<<"Enter the relative error [E]: "; cin>>epsilon; n=1; if(e>d) {p=d; q=e;} else {q=d; p=e;} cout<<setw(10)<<"i"<<setw(15)<<"x0"<<setw(15)<<"x1"; cout<<setw(15)<<"xk"<<setw(15)<<"|E|"<<endl; do{ r=q-((f(q)*(q-p))/(f(q)-f(p))); s=fabs((r-q)/r); cout<<setw(10)<<n<<setw(15)<<p<<setw(15)<<q<<setw(15)<<r<<setw(15)<<s<<endl; p=q; q=r; n++; } while (n<30 && s>epsilon && s!=0); cout<<"\n\n hasil = "<<r; cout<<endl<<endl<<endl; return 0; } float f( float x) { return (pow(x,3.0))-(pow(x,2.0))-(x)+(1); } |
Semoga rangkuman "Metode Numerik" ini bermanfaat dan apabila ada salah kata di dalam blog yang saya tulis, saya minta maaf.
Jika ingin mengenal lebih dalam tentang Universitas saya, silahkan akses link berikut: umsida.ac.id, fst.umsida.ac.id
Sekian dan Terima Kasih.
saniya izza fitria_216
Tidak ada komentar:
Posting Komentar