import sympy
= sympy.symbols('x')
x
# jaga-jaga ada konstanta pi pada data titik-titik yang diberikan
from numpy import pi
def HermiteLagrangePol(x, x_points, y_points, p_points):
# Nilai awal sebelum ditambahkan apa-apa
= 0
Hfinal = len(x_points) # n adalah banyak titik
n for j in range(n): # iterasi j berdasarkan banyaknya titik
# Data titik
= x_points[j]
x_j = y_points[j]
y_j = p_points[j]
p_j
# Hitung Lbiasa (pinjam dari metode interpolasi Lagrange)
= 1
Lbiasa for i in range(n):
if i != j: # untuk titik x_j
*= ((x-x_points[i])/(x_j - x_points[i]))
Lbiasa
# Hitung Lprime (turunannya); turunkan terhadap x
= sympy.diff(Lbiasa, x)
Lprime
# Definisikan Lprime_xj, yaitu hasil substitusi x_j ke Lprime
= sympy.lambdify(x, Lprime) # agar bisa substitusi
Lprime_func = Lprime_func(x_j) # substitusikan
Lprime_xj
# Hitung Hbiasa dan Htopi berdasarkan rumus
= (1 - 2 * (x - x_j) * Lprime_xj) * (Lbiasa)**2
Hbiasa = (x - x_j) * (Lbiasa)**2
Htopi
# Tambahkan [y_j * Hbiasa + p_j * Htopi] ke Hfinal
+= y_j * Hbiasa + p_j * Htopi
Hfinal
return Hfinal
(Pertemuan 4) Metode Interpolasi Hermite: Lagrange, Divided-Difference
Interpolasi Hermite
Kembali ke Metode Numerik
Materi Pembahasan:
Interpolasi Hermite dengan Polinom Lagrange
Hermite Divided Difference (Interpolasi Hermite dengan Divided Difference)
Diskusi
Praktikum Metode Numerik PTA 2024-2025
Departemen Matematika FMIPA Universitas Indonesia
Interpolasi Hermite dengan Polinom Lagrange
Tidak seperti metode-metode interpolasi sebelumnya, metode interpolasi Hermite tidak hanya memperhitungkan nilai \(f(x)\) pada titik-titik \(x\) yang diberikan, tetapi juga nilai \(f'(x)\). Artinya,
- metode interpolasi Hermite tidak bisa digunakan apabila hanya ada data \(f(x)\) tanpa data \(f'(x)\). Apabila hanya sebagian titik \(x\) yang diketahui nilai \(f'(x)\) nya, metode ini tetap tidak bisa digunakan.
- metode interpolasi Hermite biasanya akan lebih akurat dibandingkan metode interpolasi yang telah dibahas sebelumnya.
Ada dua cara untuk melakukan interpolasi Hermite, yaitu
- melalui polinom Lagrange,
- menggunakan tabel divided difference dengan modifikasi (Hermite Divided Difference).
Secara teori, untuk \(n+1\) titik \(x_0, x_1, x_2, \dots, x_{n-1}, x_n\), bentuk umum polinom Hermite dengan polinom Lagrange adalah sebagai berikut, disebut polinom Hermite ke-\((2n+1)\):
\[H_{2n+1} (x) = \sum_{j=0}^{n} f(x_j) H_{n,j} (x) + \sum_{j=0}^{n} f'(x_j) {\hat{H}}_{n,j} (x)\]
di mana fungsi \(H_{n,j} (x)\) dan \({\hat{H}}_{n,j} (x)\) ditentukan menggunakan polinom Lagrange:
\[H_{n,j} (x) = \left[1 - 2(x-x_j) {L}_{n,j}^{'} (x_j)\right] {L}_{n,j}^{2} (x)\]
\[{\hat{H}}_{n,j} (x) = (x-x_j) {L}_{n,j}^{2} (x)\]
Bentuk umum di atas memang terlihat sulit dihitung. Namun, dengan beberapa manipulasi aljabar, kita bisa menyusun rumus polinom Hermite sedemikian sehingga nantinya kita tinggal memodifikasi kode polinom Lagrange.
Pertama-tama, kita bisa menyatukan kedua sumasi:
\[H_{2n+1} (x) = \sum_{j=0}^{n} \left[ f(x_j) H_{n,j} (x) + f'(x_j) {\hat{H}}_{n,j} (x) \right]\]
Mari kita ubah nama fungsi:
- \(H_{n,j} (x)\) menjadi \(H_{\text{biasa}}\)
- \({\hat{H}}_{n,j} (x)\) menjadi \(H_{\text{topi}}\)
- \(H_{2n+1} (x)\) menjadi \(H_{\text{final}}\)
- \({L}_{n,j} (x)\) menjadi \(L_{\text{biasa}}\)
- \({L'}_{n,j} (x)\) menjadi \(L_{\text{prime}}\) (L turunan)
- \({L'}_{n,j} (x_j)\) menjadi \(L_{\text{primexj}}\)
- \(f(x_j)\) menjadi \(y_j\)
- \(f'(x_j)\) menjadi \(p_j\)
Sehingga rumusan kita menjadi:
\[H_{\text{biasa}} (x) = \left[1 - 2(x-x_j) L_{\text{primexj}}\right] \left(L_{\text{biasa}} (x)\right)^2\]
\[H_{\text{topi}} (x) = (x-x_j) \left(L_{\text{biasa}} (x)\right)^{2}\]
[ \[\begin{align*} H_{\text{final}} &= \sum_{j=0}^{n} \left[ y_j H_{\text{biasa}} (x_j) + p_j H_{\text{topi}} (x_j) \right] \\ &= \left[ y_0 H_{\text{biasa}} (x_0) + p_0 H_{\text{topi}} (x_0) \right] + \dots + \left[ y_n H_{\text{biasa}} (x_n) + p_n H_{\text{topi}} (x_n) \right] \end{align*}\] ]
Kita dapat menyusun strategi (atau algoritma) untuk menghitung fungsi \(H_{\text{final}}\) secara pemrograman:
- Input data \(x_j\), \(y_j\), \(p_j\) untuk \(j = 0, 1, 2, \dots, n\)
- Definisikan \(H_{\text{final}} = 0\)
- Ulangi langkah 4-7 untuk \(j=0\) sampai \(j=n\) (pasang nilai awal \(j=0\):
- Hitung \(L_{\text{biasa}}\) dengan metode interpolasi Lagrange
- Gunakan sympy untuk memperoleh turunannya yaitu \(L_{\text{prime}}\), dan hitung hasil substitusi \(x_j\) untuk memperoleh \(L_{\text{primexj}}\)
- Hitung \(H_{\text{biasa}}\) dan \(H_{\text{topi}}\)
- Tambahkan \(\left[ y_j H_{\text{biasa}} + p_j H_{\text{topi}} \right]\) ke \(H_{\text{final}}\)
Setelah pengulangan for loop berakhir, \(H_{\text{final}}\) sudah menjadi hasil metode interpolasi Hermite.
= eval(input("Masukkan list nilai x : "))
titik_x = eval(input("Masukkan list nilai f(x) di titik-titik tersebut : "))
titik_y = eval(input("Masukkan list nilai f'(x) di titik-titik tersebut : "))
titik_p = eval(input("Masukkan nilai x yang akan diaproksimasi nilai fungsinya : "))
eval_x
= HermiteLagrangePol(x, titik_x, titik_y, titik_p)
y_hermite_lagrange # bentuk masih berantakan, sehingga perlu disederhanakan:
= sympy.simplify(y_hermite_lagrange)
y_sederhana # perlu diubah menjadi function biasa agar bisa disubstitusikan nilai x:
= sympy.lambdify(x, y_sederhana)
y_function # akhirnya bisa substitusi:
= y_function(eval_x)
nilai_y
print("Polinom hasil interpolasi Hermite (dengan polinom Lagrange):")
sympy.pprint(y_hermite_lagrange)print("Disederhanakan:")
sympy.pprint(y_sederhana)print("Aproksimasi nilai fungsi di x = {0} adalah y = {1:.5f}".format(eval_x, nilai_y))
Masukkan list nilai x : [1, 2, 3, 4, 5]
Masukkan list nilai f(x) di titik-titik tersebut : [1, 8, 27, 64, 125]
Masukkan list nilai f'(x) di titik-titik tersebut : [3, 12, 27, 48, 75]
Masukkan nilai x yang akan diaproksimasi nilai fungsinya : 1.5
Polinom hasil interpolasi Hermite (dengan polinom Lagrange):
2 2 2 2 2 2
⎛5 x⎞ ⎛4 x⎞ ⎛3 x⎞ 2 ⎛5 x⎞ ⎛4 x⎞ ⎛3 x⎞
3⋅⎜─ - ─⎟ ⋅⎜─ - ─⎟ ⋅⎜─ - ─⎟ ⋅(2 - x) ⋅(x - 1) + ⎜─ - ─⎟ ⋅⎜─ - ─⎟ ⋅⎜─ - ─⎟ ⋅(2
⎝4 4⎠ ⎝3 3⎠ ⎝2 2⎠ ⎝4 4⎠ ⎝3 3⎠ ⎝2 2⎠
2 2
2 ⎛5 x⎞ ⎛ x⎞ 2
- x) ⋅(4.16666666666667⋅x - 3.16666666666667) + 12⋅⎜─ - ─⎟ ⋅⎜2 - ─⎟ ⋅(3 - x) ⋅
⎝3 3⎠ ⎝ 2⎠
2 2
2 ⎛5 x⎞ ⎛ x⎞ 2 2
(x - 2)⋅(x - 1) + 8⋅⎜─ - ─⎟ ⋅⎜2 - ─⎟ ⋅(3 - x) ⋅(x - 1) ⋅(1.66666666666667⋅x -
⎝3 3⎠ ⎝ 2⎠
2 2
⎛5 x⎞ 2 ⎛x 1⎞ 2 ⎛5
2.33333333333333) + 27⋅⎜─ - ─⎟ ⋅(4 - x) ⋅⎜─ - ─⎟ ⋅(x - 3)⋅(x - 2) + 27⋅⎜─ -
⎝2 2⎠ ⎝2 2⎠ ⎝2
2 2
x⎞ 2 ⎛x 1⎞ 2 2
─⎟ ⋅(4 - x) ⋅⎜─ - ─⎟ ⋅(x - 2) + 64⋅(5 - x) ⋅(7.66666666666667 - 1.66666666666
2⎠ ⎝2 2⎠
2 2 2 2
⎛x 1⎞ ⎛x ⎞ 2 2 ⎛x 1⎞ ⎛x ⎞
667⋅x)⋅⎜─ - ─⎟ ⋅⎜─ - 1⎟ ⋅(x - 3) + 48⋅(5 - x) ⋅⎜─ - ─⎟ ⋅⎜─ - 1⎟ ⋅(x - 4)⋅(x -
⎝3 3⎠ ⎝2 ⎠ ⎝3 3⎠ ⎝2 ⎠
2 2 2
2 ⎛x 1⎞ ⎛x 2⎞ ⎛x 3⎞
3) + 125⋅(21.8333333333333 - 4.16666666666667⋅x)⋅⎜─ - ─⎟ ⋅⎜─ - ─⎟ ⋅⎜─ - ─⎟ ⋅
⎝4 4⎠ ⎝3 3⎠ ⎝2 2⎠
2 2 2
2 ⎛x 1⎞ ⎛x 2⎞ ⎛x 3⎞ 2
(x - 4) + 75⋅⎜─ - ─⎟ ⋅⎜─ - ─⎟ ⋅⎜─ - ─⎟ ⋅(x - 5)⋅(x - 4)
⎝4 4⎠ ⎝3 3⎠ ⎝2 2⎠
Disederhanakan:
9 8 3
3.94745964311167e-16⋅x - 1.26318708579573e-14⋅x + 1.0⋅x - 3.23375893963708e
-12
Aproksimasi nilai fungsi di x = 1.5 adalah y = 3.37500
Hermite Divided Difference (Interpolasi Hermite dengan Divided Difference)
Metode Interpolasi Hermite dengan Divided Difference sebenanya adalah semacam Newton Divided Difference, dengan dua modifikasi:
- titik-titik yang digunakan untuk Divided Difference bukanlah titik-titik \(x_0, x_1, \dots, x_n\) yang diberikan, melainkan titik-titik \(z_0, z_1, \dots, z_{2n+1}\) dengan definisi \(z_{2i} = z_{2i+1} = x_i\) untuk \(i = 0, 1, 2, \dots, n\).
- ada kasus khusus untuk perhitungan \(\text{FR}(a,b)\) ketika \(b-a=1\) dan \(a \text{ mod } 2 = 0\) (dua-duanya harus berlaku), yaitu \(\text{FR}(a,b) = f'(z_a)\) (perhatikan bahwa \(z_a = x_{a/2}\)). Dalam kata lain, \(f[z_a, z_{a+1}] = f'(z_a)\) ketika \(a \text{ mod } 2 = 0\) (yaitu ketika \(a\) genap).
Selain itu, dari segi pembentukan tabel, bahkan pembuatan polinom Forward DD dan Backward DD itu semuanya sama persis dengan Newton Divided Difference. Oleh karena itu, kita tinggal memodifikasi kode Newton Divided Difference yang telah kita buat sebelumnya.
Sumber gambar: Burden, Richard L., Faires, J. Douglas. Numerical Analysis. Bab 3, “Interpolation and Polynomial Approximation”. Subbab 3.4, “Hermite Interpolation”. Hlm. 140
from tabulate import tabulate
# jaga-jaga ada konstanta pi pada data titik-titik yang diberikan
from numpy import pi
# menyusun tabel Hermite Divided Differences (HDD)
def CreateHDDTable(list_x_asli, list_y_asli, list_p):
# === Menyusun tabel utama === #
# mengandung kolom f(x_i) serta semua kolom divided difference
# === MODIFIKASI HERMITE DIVIDED DIFFERENCE ===
# Misal list_z kita ubah namanya menjadi list_x
# dan input titik dari user masuk ke list_x_asli saja.
# Maka kode Newton Divided Difference hampir tidak perlu diubah.
# Kita juga punya list_p yaitu semua nilai f'(x), untuk x dari list asli.
# Nantinya, f'(z_a) = f'(x_(a/2)) = list_p[int(a/2)],
# atau f'(z_a) = list_pz[a] (kita buat list baru untuk turunan pada f'(z)).
# Mari kita tentukan list_x, list_y, list_pz
= [] # aslinya list_z
list_x # Kita namakan list_x saja agar tidak perlu banyak modifikasi
= []
list_y = [] # list turunan pada f'(z)
list_pz for i in range(len(list_x_asli)):
# append dua kali ke list_z
list_x.append(list_x_asli[i])
list_x.append(list_x_asli[i])# agar z_(2i) = z_(2i+1) = x_i
# begitu juga dengan list_y dari list_y_asli
list_y.append(list_y_asli[i])
list_y.append(list_y_asli[i])
# serta list_pz dari list_p
list_pz.append(list_p[i])
list_pz.append(list_p[i])
# === AKHIR MODIFIKASI ===
= []
MainDDTable = len(list_x) # = n + 1
banyak_data = banyak_data - 1
n
# mengisi tabel dengan string kosong
# ingat: 2n+1 baris, n+1 kolom
for i in range(2*n+1):
= []
calon_baris for j in range(n+1):
"")
calon_baris.append(
MainDDTable.append(calon_baris)
# mengisi kolom pertama dengan nilai y_i = f(x_i)
for i in range(0, 2*n+1, 2): # untuk tiap baris, lompat 2
0] = list_y[int(i/2)]
MainDDTable[i][
# iterasi mengisi tiap kolom divided difference
for j in range(1, n+1): # untuk tiap kolom divided difference
# nilai a dan b untuk DD yang paling atas pada kolom
= 0
a = j # nilai b pertama adalah j, selalu sesuai kolom DD ke-j
b for i in range(j, 2*n - j + 1, 2): # untuk tiap baris, lompat 2
# iterasi dimulai dari baris j,
# baris terakhir adalah baris dengan indeks 2*n - j.
# Alasannya: total baris sebanyak 2*n + 1 (indeks 2*n),
# dan secara umum, pada kolom DD ke-j, perhitungan DD terakhir
# adalah pada j baris sebelum baris terakhir pada tabel,
# sehingga baris terakhir tersebut ada pada indeks 2*n - j.
# Pada for loop, kita gunakan 2*n - j + 1
# agar baris terakhir menjadi 2*n - j (karena keanehan Python)
# === MODIFIKASI HERMITE DIVIDED DIFFERENCE ===
if (((b-a)==1) and (a % 2 == 0)):
= list_pz[a] # f'(z_a)
MainDDTable[i][j] else:
# kiri bawah dikurang kiri atas, dibagi (x_b - x_a)
= (MainDDTable[i+1][j-1] - MainDDTable[i-1][j-1])/(list_x[b] - list_x[a])
MainDDTable[i][j] # === AKHIR MODIFIKASI ===
# memperbarui nilai a dan b untuk iterasi selanjutnya
+= 1
a += 1
b
# === Menyusun tabel besar === #
# duplikasi MainDDTable
= []
BigDDTable for row in MainDDTable:
= []
calon_baris for col in row:
calon_baris.append(col)
BigDDTable.append(calon_baris)
# tempel kolom nilai i dan x_i di sebelah kiri tabel
for i in range(2*n+1):
= int(i/2)
indeks_x if i % 2 == 0: # baris berindeks genap, seperti baris pertama (i=0)
0, list_x[indeks_x])
BigDDTable[i].insert(0, indeks_x)
BigDDTable[i].insert(else:
0, "")
BigDDTable[i].insert(0, "")
BigDDTable[i].insert(
# menyusun list semua header
# === MODIFIKASI HERMITE DIVIDED DIFFERENCE ===
= ["i", "z_i", "f(z_i)"]
semua_header # === AKHIR MODIFIKASI ===
for k in range(1, n+1):
"DD ke-" + str(k))
semua_header.append(
= tabulate(BigDDTable, headers=semua_header,
olahan_BigDDTable ="orgtbl")
tablefmt
return MainDDTable, olahan_BigDDTable
= eval(input("Masukkan list nilai x : "))
titik_x = eval(input("Masukkan list nilai f(x) di titik-titik tersebut : "))
titik_y = eval(input("Masukkan list nilai f'(x) di titik-titik tersebut : "))
titik_p
= CreateHDDTable(titik_x, titik_y, titik_p)
tabel_utama, tabel_olahan
print("Tabel Hermite Divided Difference:")
print(tabel_olahan)
Masukkan list nilai x : [1.3, 1.6, 1.9]
Masukkan list nilai f(x) di titik-titik tersebut : [0.6200860, 0.4554022, 0.2818186]
Masukkan list nilai f'(x) di titik-titik tersebut : [-0.5220232, -0.5698959, -0.5811571]
Tabel Hermite Divided Difference:
| i | z_i | f(z_i) | DD ke-1 | DD ke-2 | DD ke-3 | DD ke-4 | DD ke-5 |
|-----+-------+-----------+---------------------+-----------------------+---------------------+----------------------+------------------------|
| 0 | 1.3 | 0.620086 | | | | | |
| | | | -0.5220232 | | | | |
| 1 | 1.3 | 0.620086 | | -0.08974266666666673 | | | |
| | | | -0.548946 | | 0.06636555555555616 | | |
| 2 | 1.6 | 0.4554022 | | -0.06983299999999988 | | 0.002666666666662164 | |
| | | | -0.5698959 | | 0.06796555555555346 | | -0.0027746913579894407 |
| 3 | 1.6 | 0.4554022 | | -0.02905366666666781 | | 0.0010018518518685 | |
| | | | -0.5786120000000003 | | 0.06856666666667456 | | |
| 4 | 1.9 | 0.2818186 | | -0.008483666666665451 | | | |
| | | | -0.5811571 | | | | |
| 5 | 1.9 | 0.2818186 | | | | | |
Kemudian, kode untuk menghasilkan polinom Forward DD dan Backward DD tinggal menggunakan data dari tabel yang dihasilkan.
# jaga-jaga ada konstanta pi pada data titik-titik yang diberikan
from numpy import pi
from tabulate import tabulate
import sympy
= sympy.symbols('x')
x
def ForwardDD(tabel_utama, list_x):
= len(tabel_utama[0])
banyak_data = 0
pol for k in range(0, banyak_data): # tiap suku penjumlahan
= tabel_utama[k][k] # FR(0, k)
suku for j in range(0, k): # perkalian dari j=0 sampai j=k-1
*= (x - list_x[j])
suku += suku
pol return pol
def BackwardDD(tabel_utama, list_x):
= len(tabel_utama[0])
banyak_data = banyak_data - 1
n = 0
pol for k in range(banyak_data): # tiap suku penjumlahan
= tabel_utama[2*n-k][k] # FR(n-k, k)
suku for j in range(n-k+1, n+1): # perkalian dari j=n-k+1 sampai j=n
*= (x - list_x[j])
suku += suku
pol return pol
# === MODIFIKASI HERMITE DIVIDED DIFFERENCE ===
= eval(input("Masukkan list nilai x : "))
titik_x_asli = eval(input("Masukkan list nilai f(x) di titik-titik tersebut : "))
titik_y = eval(input("Masukkan list nilai f'(x) di titik-titik tersebut : "))
titik_p = eval(input('Masukkan nilai x yang akan diaproksimasi nilai fungsinya : '))
eval_x
# Kita asumsikan function/fungsi CreateHDDTable sudah terdefinisi sebelumnya.
# Kalau belum terdefinisi, boleh copy-paste definisi fungsinya ke sini
= CreateHDDTable(titik_x_asli, titik_y, titik_p)
tabel_utama, tabel_olahan
print("Tabel Hermite Divided Difference:")
print(tabel_olahan)
print() # jaga jarak dengan print yang selanjutnya
= []
titik_x for i in range(len(titik_x_asli)):
titik_x.append(titik_x_asli[i])
titik_x.append(titik_x_asli[i])
# === AKHIR MODIFIKASI ===
= ForwardDD(tabel_utama, titik_x)
forw_pol = BackwardDD(tabel_utama, titik_x)
back_pol
= sympy.simplify(forw_pol)
forw_sederhana = sympy.simplify(back_pol)
back_sederhana
= sympy.lambdify(x, forw_sederhana)
forw_function = sympy.lambdify(x, back_sederhana)
back_function
= forw_function(eval_x)
nilai_forw = back_function(eval_x)
nilai_back
print("Polinom hasil foward DD:")
sympy.pprint(forw_pol)print()
print("disederhanakan:")
sympy.pprint(forw_sederhana)print()
print("Polinom hasil backward DD:")
sympy.pprint(back_pol)print()
print("disederhanakan:")
sympy.pprint(back_sederhana)print()
print("Aproksimasi nilai fungsi di x = {0} adalah : ".format(eval_x))
print("Forward DD : {0}".format(nilai_forw))
print("Backward DD : {0}".format(nilai_back))
Masukkan list nilai x : [1.3, 1.6, 1.9]
Masukkan list nilai f(x) di titik-titik tersebut : [0.6200860, 0.4554022, 0.2818186]
Masukkan list nilai f'(x) di titik-titik tersebut : [-0.5220232, -0.5698959, -0.5811571]
Masukkan nilai x yang akan diaproksimasi nilai fungsinya : 1.5
Tabel Hermite Divided Difference:
| i | z_i | f(z_i) | DD ke-1 | DD ke-2 | DD ke-3 | DD ke-4 | DD ke-5 |
|-----+-------+-----------+---------------------+-----------------------+---------------------+----------------------+------------------------|
| 0 | 1.3 | 0.620086 | | | | | |
| | | | -0.5220232 | | | | |
| 1 | 1.3 | 0.620086 | | -0.08974266666666673 | | | |
| | | | -0.548946 | | 0.06636555555555616 | | |
| 2 | 1.6 | 0.4554022 | | -0.06983299999999988 | | 0.002666666666662164 | |
| | | | -0.5698959 | | 0.06796555555555346 | | -0.0027746913579894407 |
| 3 | 1.6 | 0.4554022 | | -0.02905366666666781 | | 0.0010018518518685 | |
| | | | -0.5786120000000003 | | 0.06856666666667456 | | |
| 4 | 1.9 | 0.2818186 | | -0.008483666666665451 | | | |
| | | | -0.5811571 | | | | |
| 5 | 1.9 | 0.2818186 | | | | | |
Polinom hasil foward DD:
-0.5220232⋅x + 2.56⋅(0.00360709876538627 - 0.00277469135798944⋅x)⋅(0.625⋅x - 1
2
) ⋅(x - 1.9)⋅(x - 1.3) + (0.116665466666667 - 0.0897426666666667⋅x)⋅(x - 1.3)
2
+ (0.00266666666666216⋅x - 0.00346666666666081)⋅2.56⋅(0.625⋅x - 1) ⋅(x - 1.3)
+ (0.0663655555555562⋅x - 0.086275222222223)⋅(x - 1.6)⋅(x - 1.3) + 1.29871616
disederhanakan:
5 4 3
- 0.00277469135798944⋅x + 0.0240317901231809⋅x - 0.0145560802460553⋅x - 0.2
2
35216169754413⋅x - 0.00822922345577154⋅x + 1.00194406469105
Polinom hasil backward DD:
-0.5811571⋅x + 2.56⋅(0.00360709876538627 - 0.00277469135798944⋅x)⋅3.61⋅(0.5263
2 2
15789473684⋅x - 1) ⋅(0.625⋅x - 1) + (0.0161189666666644 - 0.00848366666666545
⋅x)⋅(x - 1.9) + (0.0010018518518685⋅x - 0.0016029629629896)⋅3.61⋅(0.5263157894
2
73684⋅x - 1) ⋅(x - 1.6) + (0.0685666666666746⋅x - 0.109706666666679)⋅3.61⋅(0.5
2
26315789473684⋅x - 1) + 1.38601709
disederhanakan:
5 4 3
- 0.00277469135798944⋅x + 0.0240317901231809⋅x - 0.0145560802460553⋅x - 0.2
2
35216169754413⋅x - 0.00822922345577158⋅x + 1.00194406469105
Aproksimasi nilai fungsi di x = 1.5 adalah :
Forward DD : 0.5118277017283978
Backward DD : 0.5118277017283976