Mencari Akar Persamaan menggunakan Python (Newton-Raphson Method)

Iqbal Rahmadhan
4 min readMar 6, 2021

--

Pada artikel sebelumnya kita telah membahas Bisection Method untuk menemukan akar pada suatu persamaan polinomial dalam suatu interval tertentu. Kali ini kita akan mengulas metode numerik lain yaitu Newton-Raphson Method atau biasa dikenal dengan nama Newton’s Method saja.

Freddie Mercury bersama Queen menyanyikan tembang Bohemian Rhapsody di Live Aid, Juli 1985. (Gambar: LouderSound)

Mendengar namanya kita pastinya langsung teringat ke sosok yang sudah dikenal luas, yaitu Freddie Mercury yang bersama Queen menyanyikan tembang Bohemian Rhapsody. “Is this the real life? Is this just fantasy?

Menariknya, bukan Freddie Mercury ataupun personel Queen lainnya yang berkontribusi pada pengembangan Newton-Raphson Method. Ialah Isaac Newton dan Joseph Raphson yang mengembangkannya secara terpisah. Walaupun banyak textbook yang menggunakan hanya nama Newton untuk metode ini, tetapi berdasarkan Wikipedia diketahui bahwa metode Raphson-lah yang lebih simple, superior, dan digunakan saat ini.

Seperti apa? Mari kita bahas.

Konsep

Berbeda dengan Bisection Method yang membutuhkan dua nilai batas interval sebagai tebakan awal akar (a dan b), pada metode Newton-Raphson kita hanya memerlukan satu nilai tebakan untuk mendekati nilai akar yang sebenarnya. Oleh karenanya Newton-Raphson Method termasuk dalam kategori metode terbuka.

Prinsip utama dari metode ini adalah apabila tebakan awal nilai untuk suatu persamaan f(x)=0 adalah di-xᵢ, maka jika ditarik gradient di titik f(xᵢ) menghasilkan titik xᵢ₊₁ yang merupakan perpotongan sumbu-x dan gradient. TItik xᵢ₊₁ dapat dilihat sebagai pendekatan terhadap nilai akar yang sebenarnya (source).

Gambar 1: Ilustrasi gradien di titik f(xᵢ) yang menghasil titik xᵢ₊₁ untuk mendekati nilai akar sebenarnya dari persamaan f(x)=0.

Menggunakan definisi dari gradien dari suatu fungsi f(x) di x=xᵢ,

maka kita bisa menentukan nilai xᵢ₊₁ sebagai berikut

Selain secara geometri seperti di atas, kita juga dapat menurunkan rumus Newton-Raphson Method menggunakan bantuan deret Taylor yang bisa dicari lebih lanjut.

Setelah mendapatkan rumusan untuk menentukan nilai xᵢ₊₁, kita dapat mengulangi prosedur tersebut dengan melakukan iterasi hingga nilai f(xᵢ) mendekati nilai 0. Proses iterasi menggunakan metode Newton-Raphson dapat lebih jelas melalui animasi berikut.

Gambar 2: Proses menemukan akar menggunakan Newton-Raphson Method untuk menentukan akar dari persamaan x⁴+x+10=0 dengan nilai tebakan awal di x=3.5.

Implementasi

Mengimplementasikan Newton-Raphson Method di Python terbilang lebih simple dibandingkan Bisection Method. Kita perlu mendefinisikan fungsi newtons() dengan input:

  • f : fungsi yang akan dicari nilai akarnya,
  • df : turunan pertama fungsi yang akan dicari nilai akarnya
  • x0 : tebakan awal nilai akar
  • e : batasan untuk memperkirakan apakah f(x) sudah mendekati 0
  • N : maksimum iterasi

Seperti sebelumnya, untuk e dan N diberi nilai default agar fungsi dapat digunakan dengan lebih praktis.

Pertama kita perlu mengecek apakah nilai f(x₀) telah dibawah nilai e. Jika sudah maka fungsi akan berhenti dan mengembalikan nilai tersebut sebagai aproksimasi akar. Sebaliknya, jika tidak maka kita akan memperbarui nilai x₀ menggunakan rumusan yang telah kita turunkan sebelumnya dan kembali memerika apakah f(x₀) telah dibawah nilai e.

Namun perlu diingat disini bahwa apabila nilai f’(x₀)=0 maka kita perlu menghentikan iterasi dan mengembalikan None untuk menghindari pembagian nol.

def newtons(f,df,x0):
e = 10**-4
N = 100
for i in range (0,N):
if abs(f(x0)) < e:
return x0
if df(x0) == 0:
print("Zero derivative")
return None
x0 = x0 - f(x0)/df(x0)
print("Maximum iteration")
return x0

Untuk memanggil fungsi newtons(), kita perlu mendefinsikan fungsi yang akan dicari turunannya dan turunan pertama dari fungsi tersebut. Misalkan disini kita akan mencari akar untuk fungsi f(x)=x⁴+x+10 yang memiliki turunan di f’(x)=4x³+1 menggunakan nilai tebakan x=3.5.

f = lambda x: x**3+x**2-3
df = lambda x: 3*x**2+2*x
x0 = 3.5
x_root = newtons(f,df,x0)
print('Result : ', x_root)_root)

Pemanggilan fungsi ini mengembalikan pendekatan nilai akar di x=1.6974718830770552 dengan iterasi sebanyak 6 kali.

n   | x           | f(x)        |
0 | 3.500000 | 143.562500 |
1 | 2.667754 | 43.318153 |
2 | 2.104775 | 11.730382 |
3 | 1.798478 | 2.260606 |
4 | 1.705329 | 0.162650 |
5 | 1.697523 | 0.001060 |
6 | 1.697472 | 0.000000 |

Konklusi

Selain tidak menjamin konvergensi seperti Bisection Method, metode ini juga memiliki kekurangan lainnya yaitu kita perlu menurunkan terlebih dahulu fungsi yang akan dicari. Tentu hal ini dapat mengurangi segi kepraktisan apabila digunakan untuk automasi ataupun simulasi, terlebih jika fungsi yang akan diuji sulit untuk diturunkan.

Namun apabila konvergen, maka Newton-Raphson cenderung lebih cepat dibandingkan metode lain. Kita akan bahas di tulisan lainnya.

Baca sebelumnya:

Baca selanjutnya:

--

--