METODE NEWTON RAPHSON
Metode Newton Raphson juga digunakan untuk menyelesaikan persamaan non linear f(x).
Rumus penyelesaian Xn1=Xn−f Xn/ f 'Xn ... 2a
Sedangkan persamaan non linear dapat diselesaikan jika memenuhi syarat sbb :
∣f x1. f ''x1/f 'x1.f 'x1∣ < 1 ... 2b
dimana X1 adalah titik awal yang ditentukan sebelum melakukan iterasi.
Keterbatasan dari metode ini adalah :
1. jika fungsi f(x) mempunyai beberapa titik penyelesaian, maka akarakar penyelesaian tersebut tidak dapat dicari secara bersamaan.
2. Tidak dapat mencari akar imajiner(kompleks).
3. Tidak dapat mencari akar persamaan yang tidak memenuhi syarat persamaan 2b, meskipun sebenarnya persamaan memiliki akar persamaan. 4. Untuk persamaan yang sangat kompleks, pencarian turunan pertama dan kedua sangatlah sulit.
Berikut algoritma Metode Newton Raphson :
1. Mencari turunan pertama dan kedua dari persamaan yang ada.
2. Menentukan nilai X1 sebagai nilai perkiraan awal dan kemudian mengecek apakah memenuhi persyaratan persamaan 2b.
3. Jika memenuhi, maka iterasi dilakukan untuk mencari nilai Xn .
4. Begitu seterusnya hingga antara Xn−1−Xn = 0 atau <= nilai e (error). Nilai error ini dapat ditentukan sendiri.
Contoh : Carilah persamaan non linear di bawah ini dengan Metode Newton Raphson : f x=ex−3x2=0
Langkah pertama, mencari turunan persamaan tersebut
f 'x=ex−6x
f ''x=ex−6
Langkah kedua, menentukan nilai X1 , misalnya
X1 = 1.
f(1) = e3−312=−0.281718
f'(1) = e3−61=−3.281718
f''(1) = e3−6=−3.281718
jadi
∣f x1. f ''x1/f 'x1.f 'x1∣=0.0858451
karena syarat dipenuhi maka proses iterasi dapat dilanjutkan.
Langkah ketiga, melakukan iterasi persamaan 2a untuk mencari
Xn jika e (error) = Ex10−7 .
x2=x1−f x1/ f 'x1=0.9141155
x1−x2=0.0858845
Langkah keempat, karena selisih x lebih besar dari e dan bukan 0 maka x3=x2−f x2/ f 'x2=0.910018
x2−x3=0.0040975
dst.
hingga selisihnya sama dengan nol atau lebih kecil dari e.
berikut adalah contoh koding C++ nya
#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;
double f(double x) //for the function x^4 - 10
{
return (x*x*x*x - x - 10);
}
double ff(double x) //Differentiating function f(x)
{
return (4*x*x*x - 1);
}
void NR(double aerr, int maxitr, double a)
{
int i = 0;
double b, prev;
while (i <= maxitr)
{
b = a - (f(a))/ff(a);
cout << "Iter " << i << ": x = " << b << endl;
i++;
if (fabs(b - a) < aerr)
break;
a = b;
}
}
int main()
{
double aerr, a, b;
int maxitr;
cout << "Enter aerr, maxitr, a." << endl;
cin >> aerr;
cin >> maxitr;
cin >> a;
NR(aerr, maxitr, a);
system("PAUSE");
return EXIT_SUCCESS;
}
0 comments:
Post a Comment