Metode Secant untuk solusi persamaan taklinier

Diberikan fungsi \(f(x)\). Pilih dua titik sehingga terdapat dua pasang pasangan titik, yaitu \((x_0,f_0)\) dan \((x_1,f_1)\). Garis lurus yang melalui dua titik diberikan oleh

$$(y-f_1)/(f_0-f_1)=(x-x_1)/(x_0-x_1)$$

Garis lurus ini memotong sumbu-x, misalkan di \(x=x_2\), sehingga \(f(x_2)=0\). Jadi, diperoleh

$$x_2=x_1-f_1(x_1-x_0)/(f_1-f_0)$$

Sekarang, terdapat dua pasang pasangan titik \((x_1,f_1)\) dan \((x_2,f_2)\). Garis lurus yang melalui dua titik ini adalah

$$(y-f_2)/(f_1-f_2)=(x-x_2)/(x_1-x_2)$$

Saat garis lurus memotong sumbu-x, misalkan \(x=x_3\), berlaku \(f(x_3)=0\) dan

$$x_3=x_2-f(x_2)(x_1-x_2)/(f(x_1)-f(x_2))$$

Terdapat pola yang sama untuk dua langkah yang sudah dilakukan. Secara umum, untuk \(i=1,2,\ldots,N\) diperoleh

$$x_{n+1}=x_{n}-f(x_{n})\dfrac{(x_{n}-x_{n-1})}{(f(x_n)-f(x_{n-1}))}$$

dengan \(x_0,x_1\) tebakan awal yang dipilih.

Komputasi dengan python

Diberikan fungsi \(f(x)=x^2-6x+8\) yang akar analitiknya \(\{2,4\}\). Akan ditentukan akar secara numerik menggunakan metode Secant, dengan tebakan awal \(x_0=8\) dan \(x_1=7\).

Pertama, import modul yang digunakan. Modul untuk proses numerik biasanya numpy dan untuk visualisasi adalah matplotlib

import numpy as np
import matplotlib.pyplot as plt

Buat procedure untuk evaluasi fungsi.

f=lambda x:x**2-6*x+8
itmax=100
tolmax=1e-20

Buat procedure untuk metode Secant. Procedure secant memiliki beberapa input yaitu tebakan awal x0 dan x1, fungsi f, iterasi maksimum, dan toleransi maksimum.

x=np.zeros(itmax)
x[0]=8;
x[1]=7;
# perulangan
for i in range(1,itmax):
    x[i+1]=x[i]-f(x[i])*(x[i]-x[i-1])/(f(x[i])-f(x[i-1]))
    print('%2d' % i,\
       '%.15f' % x[i],\
       '%.5e' % f(x[i]))
   if np.abs(f(x[i+1]))<tolmax:
      break

Hasil simulasi ditunjukkan pada Gambar 1 dan 2.

Gambar 1. Perbandingan nilai x[i] tiap iterasi
Gambar 2. Perbandingan x[i] tiap iterasi dengan kurva f(x)