in Practical

Cara Membuat Fungsi Newton-Rhapson di Python

Reading Time: 2 minutes

Apa itu newton-rhapson? Newton-Rapshon merupakan salah satu teknik yang sering digunakan membuat pendekatan pada suatu penyelesaian matematis yang tidak dapat diselesaikan secara analitik atau mungkin dapat diselesaikan seacara danalitik tetapi dibutuhkan perhitungan yang cukup rumit.

Salah satu kasus yang memaksa kita menggunakan metode ini adalah kasus penyelesaian persamaan nonlinear. Apa itu persamaan nonlinear? Sederhananya persamaan yang apabila diproyeksikan kedalam diagram akan membentuk visual yang tak lurus.

Sebagai contoh misalnya diberikan fungsi \(f : R \rightarrow R\) yang mana memenuhi

\( f(x) = e^{x} – sin(x+1)\)

Kiranya berapakah akar-akar dari persamaan tersebut? Dengan menggunakan perhitungan secara analitik tentu sulit. Karenanya salah satu upaya untuk menyelesaikan masalah ini adalah dengan menggunakan metode newton-raphson.

Algoritma Newton-Raphson

  1. Menentukan dugaan awal x, apabila \(f(x) \neq 0 \) akan dilanjutkan ke langkah 2
  2. Hitung \( \Delta x = – \frac{f(x_n)}{f'(x_n)}\)
  3. Perbarui nilai \(x = x + \Delta x\)
  4. Jika \(|\Delta x| > toleransi\) maka akan kembali ke langkah 2

Fungsi Newton-Raphson dengan Menggunakan Python

Dalam hal ini akan dibuat dibuat fungsi python dengan berdasarkan pada algoritma newton-raphson di atas, yang mana digunakan untuk permasalahan satu variabel.

def newton_raphson_simple(f, df, x, tol=0.000001):
    try:
        for i in range(30):
            dx = -f(x)/df(x)
            x = x + dx
            if abs(dx) < tol:
                akar = x
                iterasi = i
                break

        return akar, iterasi
    except:
        return "NaN"

Pada script di atas didefinisikan fungsi newton_raphson_simple yang mana fungsi newton sederhana yang didasarkan pada algoritma newton-raphson. Kenapa sederhana? Karena pada fungsi di atas kita iterasi kita batasi hanya 30 dan tidak ada pengendali apabila diambil x yang salah. Pada fungsi di atas diberikan output berupa akar dan iterasi, yang mana menyatakan ditemukan akarnya berapa dan pada iterasi ke berapa.

Selanjutnya kita akan lakukan percobaan pada fungsi tersebut dengan permasalahan

\( f(x) = e^{x} – sin(x+1)\)

Diperhatikan bahwa dari fungsi f(x) di atas maka akan diperoleh turunan f’(x)

\( f’(x) = e^{x} – cos(x+1)\)

Sampai di sini kita sudah punya f dan df sebagaimana argumen yang harus terpenuhi pada fungsi newton_raphson_simple. Kita tinggal menentukan x, karena f(x) merupakan fungsi sinus dan fungsi sinus selalu kurang dari satu maka tebakan awal x harus kurang dari 1.

Pertanyaan selanjutnya bagaimana mendefiniskan fungsi f(x) dan turunan f’(x) di python? Caranya mudah yaitu dengan lambda, sebagaimana berikut

import math
f = lambda x: math.exp(x) - math.sin(x+1)
df = lambda x: math.exp(x) - math.cos(x+1)

Dalam hal ini digunakan library math guna mendefinisikan bilangan euler e.

Dengan x = 0.5 dan toleransi yang sudah kita jadikan default sebesar \(10^{-6}\), diperoleh bahwa

akar, iterasi = newton_raphson_simple(f, df, 0.5)
print(“akar = ”, akar)
print(“iterasi = “, iterasi)

##output
akar = -4.157243925422422
iterasi = 17

Referensi

Prihandoko, Rudi A. 2016. Modul Praktikum Matematika Komputasi. Yogyakarta: Universitas Gadjah Mada.

  •  
  •  
  •  
  •  
  •