Turunan Numerik

Extrapolasi Richardson

Pengertian

Dalam analisis numerik,ekstrapolasi Richardson adalah metode percepatan urutan, yang digunakan untuk meningkatkan laju konvergensi suatu urutan. Ekstrapolasi Richardson diterapkan pada barisan pendekatan nilai opsi untuk mempercepat laju konvergensinya.

Aplikasi praktis ekstrapolasi Richardson termasuk integrasi Romberg, yang menerapkan ekstrapolasi Richardson pada aturan trapesium, dan algoritma Bulirsch-Stoer untuk menyelesaikan persamaan diferensial biasa.

Metode Richardson tidak dapat menghasilkan estimasi untuk kesalahan perkiraan. Salah satu cara untuk memperkirakan kesalahan adalah dengan melakukan dua ekstrapolasi dengan $N $ yang sedikit berbeda dan membandingkan hasilnya.

Ekstrapolasi Richardson tidak berfungsi untuk urutan berosilasi. Sebagai solusi sederhana, richardson mendeteksi jika tiga elemen terakhir tidak berbeda secara monoton, dan dalam hal itu berlaku ekstrapolasi hanya untuk elemen indeks genap.

Pada Materi Turunan Numerik Dengan Ekstrapolasi Richardson

Menggunakan Formula Beda Terpusat (Central Differense).

Pada Formula beda terpusat ini diharapkan memberikan solusi terbaik. Karena Beda terpusat pendekatannya adalah lebih akurat dari beda maju dan beda mundur karena errornya adalah $O(h^2)$. Setengah urutan langkah h pendekatannya seperempat error dari beda terpusat

Formula Beda Terpusat (Central Differense)

sebagai berikut : $$ f'(x) = {f(x+h) - f(x-h) \over 2h} + O(h^2) $$ Dapat kita ketahui bahwa $E_t = O(h^2)$. Pada $Oh$ disamping biasa disebut sebagai Big Oh Analisis

Untuk menggunakan formula yang terbaik, bisa dengan formula dibawah ini

Ditetapkan $f(x)$ dan $x$ tertentu : $$ \varnothing (h) = {f(x+h) - f(x-h) \over 2h} \\ \varnothing (h) = f'(x) -a_2h^2 - a_4h^4 - a_6h^6 - ... \\ \varnothing({h \over 2}) = f'(x) -a_2 {h^2 \over 2}-a_4 {h^4 \over 2}-a_6 {h^6 \over 2} - ... \\ \varnothing(h) - 4\varnothing({h \over 2}) = -3f'(x) - {3 \over 4} a_4h^4 - {15 \over 16} a_6h^6 - ... \\ \rightarrow f'(x) = {4 \over 3}\varnothing (h/2) - {1 \over 3}\varnothing(h) + O(h^4) $$

Pada Contoh sebuah fungsi sebagai berikut : $$ f(x) = -x^4 - 0.15x^3 - 0.5x^2 - 0.25x + 1.2 $$ Dengan $h_1 =0.5$ dan $h_2 = 0.25$. Menghitung estimasi dengan $f'(0.5)$ menggunakan Richardson Extrapolasi

Nilai sesungguhnya $f'(0.5) = -0.9125$

Pada Turunan Pertama dapat dihitung dengan beda terpusat (Centered Differences) yaitu: $$ \varnothing(h) ={ f(0.5+h) - f(0.5-h) \over 2h} ,pada \quad x = 0.5 \\ \varnothing(0.5) = {f(1) -f(0) \over 1} = {0.2 -1.2 \over 1} = -1.0, |ϵ_t|= 9.6 \\ \varnothing(0.25) = {f(0.75) - f(0.25) \over 0.5} = -0.934375 , |ϵ_t|= 2.4 $$ Estimasi dapat diperbaiki dengan menggunakan : $$ f'(0.5) \approx{4 \over 3}Φ(h/2)- {1 \over 3}Φ(h) = {4 \over 3}(-0.934375)-{1 \over 3}(-1) = -0.9125 $$ Menghasilkan Nilai Yang sama dengan nilai sesungguhnya maka dapat dikatakan estimasinya sudah tepat

Tabel Richardson Extrapolation

D(0,0) = Φ(h)
D(1,0)=Φ(h/2) D(1,1)
D(2,0)=Φ(h/4) D(2,1) D(2,2)
D(8,0)=Φ(h/8) D(3,1) D(3,2) D(3,3)

Kolom Pertama : $D(n,0) = Φ{h \over 2}$

yang lain : $$ D(n,m) = {4^m \over 4^m-1} D(n,m-1)- {1 \over 4^m - 1}D(n-1,m-1) $$

Contoh menghitung nilai numerik dari turunan $f(x) = x^{cos(x)}$, menggunakan ekstrapolasi Richardson dengan h = 0.1. Dapatkan D(2,2) sebagai estimasi turunan $$ \varnothing (h) = {f(x+h) - f(x-h) \over 2h} \\ \varnothing (0.1) = {f(0.7) - f(0.5) \over 0.2} = 1.08483 \\ \varnothing (0.05) = {f(0.65) - f(0.55) \over 0.1} = 1.08988\\ \varnothing (0.025) = {f(0.625) - f(0.575) \over 0.05} = 1.09115\\ D(0,0) = 1.08483, D(1,0)= 1.08988, D(2,0) = 1.09115 \\ D(n,m) = {4^m \over 4^m-1} D(n,m-1)- {1 \over 4^m - 1}D(n-1,m-1) \\ D(1,1) = {4 \over 3} D(1,0) - {1 \over 3}D(0,0) = 1.09156\\ D(2,1) = {4 \over 3} D(2,0) - {1 \over 3}D(1,0) = 1.09157\\ D(2,2) = {16 \over 15} D(2,1) - {1 \over 15}D(1,1) = 1.09157 $$ Maka diperoleh Tabel Richardsonnya , sebagai berikut

1.08483
1.08988 1.09156
1.09115 1.09157 1.09157

Nilai numerik dari turunan $f(x) = x^{cos(x)}$ adalah 1.09157. Ini adalah estimasi terbaik dari turunan dari suatu fungsi

Implementasi Estimasi pada $f'(0.5)$ Dengan Python

Pada Penyelesaian Estimasi pada $f'(0.5)$ menggunakan fungsi sebagai berikut : $$ f(x) = -x^4 - 0.15x^3 - 0.5x^2 - 0.25x + 1.2 $$ Mulai dengan $h_1 = 0.5$ dan $h_2 = 0.25$ dengan Richardson Extrapolation

Berikut Listing Program Penyelesaian Estimasi dengan Metode Richardson Extrapolation

from math import *
def zeros(n,m): 
    Z=[]
    for i in range(n):
        Z.append([0]*m)
    return Z

def D(Func,a,h):    #beda terpusat (central differemce) size h , dimana x=a
    return (Func(a+h)-Func(a-h))/(2*h)

def Richardson_dif(func,a): 
    '''Richardson extrapolation method for numerical calculation of first derivative '''
    k=9 
    L=zeros(k,k)
    for I in range(k):
        L[I][0]=D(func,a,1/(2**(I+1)))
    for j in range(1,k):
        for i in range(k-j):
            L[i][j]=((4**(j))*L[i+1][j-1]-L[i][j-1])/(4**(j)-1)
        print("Estimasi , f'(x) = ",L[i][j]) 
    return L[0][k-1] 
print("Differensiasi Numerik")
print("Dengan Fungsi f(x) = -0.1*x**4-0.15*x**3-0.5*x**2-0.25*x+1.2 dengan x=0.5")
print("h1 = 0.5, h2 = 0.5/2=0.25")
print('%04.20f'%Richardson_dif(lambda x: -0.1*x**4-0.15*x**3-0.5*x**2-0.25*x+1.2 ,0.5))

##print('diff(2**cos(pi+sin(x)) at x=pi/2 is equal to = %04.20f'%Richardson_dif(lambda x: 2**cos(pi+sin(x)),pi/3))

Berikut Hasil Output dari Code yang telah dijalankan :

Differensiasi Numerik
Dengan Fungsi f(x) = -0.1*x**4-0.15*x**3-0.5*x**2-0.25*x+1.2 dengan x=0.5
h1 = 0.5, h2 = 0.5/2=0.25
Estimasi , f'(x) =  -0.9125000000000038
Estimasi , f'(x) =  -0.912500000000005
Estimasi , f'(x) =  -0.9125000000000053
Estimasi , f'(x) =  -0.9125000000000053
Estimasi , f'(x) =  -0.9125000000000053
Estimasi , f'(x) =  -0.9125000000000053
Estimasi , f'(x) =  -0.9125000000000053
Estimasi , f'(x) =  -0.9125000000000053
-0.91250000000000530687

Dapat kita peroleh Estimasi pada $f'(0.5)$ adalah $-0.91250000000000530687,$ dan Nilai sesungguhnya $f'(0.5) = -0.9125$

Lalu bila dengan fungsi $f(x)$ $diff(2**cos(pi+sin(x))$ dengan $x=pi/3,$ Berikut Hasil Outputnya :

Dengan Fungsi f(x) =diff(2**cos(pi+sin(x)) dengan x=pi/3
Estimasi , f'(x) =  0.168495583979535
Estimasi , f'(x) =  0.16849558398154443
Estimasi , f'(x) =  0.16849558398154296
Estimasi , f'(x) =  0.1684955839815426
Estimasi , f'(x) =  0.16849558398154252
Estimasi , f'(x) =  0.1684955839815425
Estimasi , f'(x) =  0.1684955839815425
Estimasi , f'(x) =  0.1684955839815425
diff(2**cos(pi+sin(x)) at x=pi/3 is equal to = 0.16849558398154249050

Contoh Implementasi fungsi $f(x) = x^{cos(x)}$ pada x = 0.6

Menggunakan Ekstrapolasi Richardson dengan h = 0.1

Berikut Listing Program Penyelesaian Estimasi dengan Metode Richardson Extrapolation

from math import *
def zeros(n,m): 
    Z=[]
    for i in range(n):
        Z.append([0]*m)
    return Z

def D(Func,a,h):    #beda terpusat (central differemce) size h , dimana x=a
    return (Func(a+h)-Func(a-h))/(2*h)

def Richardson_dif(func,a): 
    '''Richardson extrapolation method for numerical calculation of first derivative '''
    k=9 
    L=zeros(k,k)
    for I in range(k):
        L[I][0]=D(func,a,1/(2**(I+1)))
    for j in range(1,k):
        for i in range(k-j):
            L[i][j]=((4**(j))*L[i+1][j-1]-L[i][j-1])/(4**(j)-1)
        print("Estimasi , f'(x) = ",L[i][j]) 
    return L[0][k-1] 
print("Differensiasi Numerik")
print("Dengan Fungsi f(x) = x^cos(x), dengan x=0.6")
print('%04.20f'%Richardson_dif(lambda x: x**cos(x) ,0.6))

Berikut Hasil Outputnya :

Differensiasi Numerik
Dengan Fungsi f(x) = x^cos(x), dengan x=0.6
Estimasi , f'(x) =  1.0915707092680076
Estimasi , f'(x) =  1.0915707092884377
Estimasi , f'(x) =  1.0915707092884381
Estimasi , f'(x) =  1.0915707092884381
Estimasi , f'(x) =  1.0915707092884381
Estimasi , f'(x) =  1.0915707092884381
Estimasi , f'(x) =  1.0915707092884381
Estimasi , f'(x) =  1.0915707092884381
1.09157070928843813462

Dapat kita ketahui Nilai numerik dari turunan $f(x) = x^{cos(x)}$ adalah 1.09157. Sama dengan menggunakan cara manual menghitunya pada Contoh diatas.

Sekian TerimaKasih ;