(Pertemuan 4) Metode Interpolasi Hermite: Lagrange, Divided-Difference

Interpolasi Hermite

Offline di Departemen Matematika
Author

Aslab Mata Kuliah Praktikum Metode Numerik

Published

March 24, 2025

Kembali ke Metode Numerik

Materi Pembahasan:

  1. Interpolasi Hermite dengan Polinom Lagrange

  2. Hermite Divided Difference (Interpolasi Hermite dengan Divided Difference)

  3. 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:

  1. Input data \(x_j\), \(y_j\), \(p_j\) untuk \(j = 0, 1, 2, \dots, n\)
  2. Definisikan \(H_{\text{final}} = 0\)
  3. Ulangi langkah 4-7 untuk \(j=0\) sampai \(j=n\) (pasang nilai awal \(j=0\):
  4. Hitung \(L_{\text{biasa}}\) dengan metode interpolasi Lagrange
  5. Gunakan sympy untuk memperoleh turunannya yaitu \(L_{\text{prime}}\), dan hitung hasil substitusi \(x_j\) untuk memperoleh \(L_{\text{primexj}}\)
  6. Hitung \(H_{\text{biasa}}\) dan \(H_{\text{topi}}\)
  7. 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.

import sympy
x = sympy.symbols('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
    Hfinal = 0
    n = len(x_points) # n adalah banyak titik
    for j in range(n): # iterasi j berdasarkan banyaknya titik
        # Data titik
        x_j = x_points[j]
        y_j = y_points[j]
        p_j = p_points[j]

        # Hitung Lbiasa (pinjam dari metode interpolasi Lagrange)
        Lbiasa = 1
        for i in range(n):
            if i != j: # untuk titik x_j
                Lbiasa *= ((x-x_points[i])/(x_j - x_points[i]))

        # Hitung Lprime (turunannya); turunkan terhadap x
        Lprime = sympy.diff(Lbiasa, x)

        # Definisikan Lprime_xj, yaitu hasil substitusi x_j ke Lprime
        Lprime_func = sympy.lambdify(x, Lprime) # agar bisa substitusi
        Lprime_xj = Lprime_func(x_j) # substitusikan

        # Hitung Hbiasa dan Htopi berdasarkan rumus
        Hbiasa = (1 - 2 * (x - x_j) * Lprime_xj) * (Lbiasa)**2
        Htopi = (x - x_j) * (Lbiasa)**2

        # Tambahkan [y_j * Hbiasa + p_j * Htopi] ke Hfinal
        Hfinal += y_j * Hbiasa + p_j * Htopi

    return Hfinal
titik_x = eval(input("Masukkan list nilai x : "))
titik_y = eval(input("Masukkan list nilai f(x) di titik-titik tersebut : "))
titik_p = eval(input("Masukkan list nilai f'(x) di titik-titik tersebut : "))
eval_x = eval(input("Masukkan nilai x yang akan diaproksimasi nilai fungsinya : "))

y_hermite_lagrange = HermiteLagrangePol(x, titik_x, titik_y, titik_p)
# bentuk masih berantakan, sehingga perlu disederhanakan:
y_sederhana = sympy.simplify(y_hermite_lagrange)
# perlu diubah menjadi function biasa agar bisa disubstitusikan nilai x:
y_function = sympy.lambdify(x, y_sederhana)
# akhirnya bisa substitusi:
nilai_y = y_function(eval_x)

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.

crop tabel3_16 hal140 or 158pdf Numerical analysis by Richard L Burden J Douglas Faires (z-lib.org)-158_page-0001.jpg

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

    list_x = [] # aslinya list_z
    # Kita namakan list_x saja agar tidak perlu banyak modifikasi

    list_y = []
    list_pz = [] # list turunan pada f'(z)
    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 = []
    banyak_data = len(list_x) # = n + 1
    n = banyak_data - 1
    
    # 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
        MainDDTable[i][0] = list_y[int(i/2)]
    
    # 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
        a = 0
        b = j # nilai b pertama adalah j, selalu sesuai kolom DD ke-j
        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)):
                MainDDTable[i][j] = list_pz[a] # f'(z_a)
            else:
                # kiri bawah dikurang kiri atas, dibagi (x_b - x_a)
                MainDDTable[i][j] = (MainDDTable[i+1][j-1] - MainDDTable[i-1][j-1])/(list_x[b] - list_x[a])
            # === AKHIR MODIFIKASI ===

            # memperbarui nilai a dan b untuk iterasi selanjutnya
            a += 1
            b += 1
    
    # === 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):
        indeks_x = int(i/2)
        if i % 2 == 0: # baris berindeks genap, seperti baris pertama (i=0)
            BigDDTable[i].insert(0, list_x[indeks_x])
            BigDDTable[i].insert(0, indeks_x)
        else:
            BigDDTable[i].insert(0, "")
            BigDDTable[i].insert(0, "")
    
    # menyusun list semua header
    # === MODIFIKASI HERMITE DIVIDED DIFFERENCE ===
    semua_header = ["i", "z_i", "f(z_i)"]
    # === AKHIR MODIFIKASI ===
    for k in range(1, n+1):
        semua_header.append("DD ke-" + str(k))

    olahan_BigDDTable = tabulate(BigDDTable, headers=semua_header,
                                 tablefmt="orgtbl")
    
    return MainDDTable, olahan_BigDDTable
titik_x = eval(input("Masukkan list nilai x : "))
titik_y = eval(input("Masukkan list nilai f(x) di titik-titik tersebut : "))
titik_p = eval(input("Masukkan list nilai f'(x) di titik-titik tersebut : "))

tabel_utama, tabel_olahan = CreateHDDTable(titik_x, titik_y, titik_p)

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
x = sympy.symbols('x')

def ForwardDD(tabel_utama, list_x):
    banyak_data = len(tabel_utama[0])
    pol = 0
    for k in range(0, banyak_data): # tiap suku penjumlahan
        suku = tabel_utama[k][k] # FR(0, k)
        for j in range(0, k): # perkalian dari j=0 sampai j=k-1
            suku *= (x - list_x[j])
        pol += suku
    return pol

def BackwardDD(tabel_utama, list_x):
    banyak_data = len(tabel_utama[0])
    n = banyak_data - 1
    pol = 0
    for k in range(banyak_data): # tiap suku penjumlahan
        suku = tabel_utama[2*n-k][k] # FR(n-k, k)
        for j in range(n-k+1, n+1): # perkalian dari j=n-k+1 sampai j=n
            suku *= (x - list_x[j])
        pol += suku
    return pol
# === MODIFIKASI HERMITE DIVIDED DIFFERENCE ===

titik_x_asli = eval(input("Masukkan list nilai x : "))
titik_y = eval(input("Masukkan list nilai f(x) di titik-titik tersebut : "))
titik_p = eval(input("Masukkan list nilai f'(x) di titik-titik tersebut : "))
eval_x = eval(input('Masukkan nilai x yang akan diaproksimasi nilai fungsinya : '))

# Kita asumsikan function/fungsi CreateHDDTable sudah terdefinisi sebelumnya.
# Kalau belum terdefinisi, boleh copy-paste definisi fungsinya ke sini

tabel_utama, tabel_olahan = CreateHDDTable(titik_x_asli, titik_y, titik_p)

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 ===

forw_pol = ForwardDD(tabel_utama, titik_x)
back_pol = BackwardDD(tabel_utama, titik_x)

forw_sederhana = sympy.simplify(forw_pol)
back_sederhana = sympy.simplify(back_pol)

forw_function = sympy.lambdify(x, forw_sederhana)
back_function = sympy.lambdify(x, back_sederhana)

nilai_forw = forw_function(eval_x)
nilai_back = back_function(eval_x)

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