Interpolasi Spline dan Link Download File Referensi
https://eu2.contabostorage.com/00f3241116844f24b628f46d81abb929:st1/folder8/8057/1656357121_interpolasi_spline___Matematika.pdf
2026-05-31 17:10:09 - Admin
<style> body{ font-family: Arial, Helvetica, sans-serif; line-height:1.6; margin:0; padding:0; background:#f9f9f9; color:#333; } header{ background:#4a90e2; color:#fff; padding:20px 10%; text-align:center; } nav{ background:#e3f2fd; padding:10px 10%; } nav a{ margin-right:15px; color:#0277bd; text-decoration:none; font-weight:bold; } main{ max-width:800px; margin:20px auto; background:#fff; padding:20px; box-shadow:0 0 10px rgba(0,0,0,0.05); } h2{ color:#1976d2; margin-top:30px; } pre{ background:#eceff1; padding:10px; overflow:auto; } table{ width:100%; border-collapse:collapse; margin:15px 0; } th, td{ border:1px solid #ccc; padding:8px; text-align:center; } th{ background:#e3f2fd; } figure{ margin:0; text-align:center; } figcaption{ font-size:0.9em; color:#777; } .note{ background:#fff3e0; border-left:4px solid #ffb300; padding:10px; margin:15px 0; } </style> <header> <h1>Interpolasi Spline</h1> <p>Metode matematis untuk melengkungkan data secara mulus</p> </header> <nav> <a href="#definisi">Definisi</a> <a href="#jenis">Jenisjenis Spline</a> <a href="#rumus">Rumus Dasar</a> <a href="#implementasi">Implementasi</a> <a href="#contoh">Contoh Kode</a> </nav> <main> <section id="definisi"> <h2>Definisi Interpolasi Spline</h2> <p> Interpolasi spline adalah teknik numerik yang digunakan untuk membangun fungsifungsi polinomial berdasar sekumpulan titik data (node) sehingga fungsi tersebut tidak hanya melewati semua titik tersebut, tetapi juga memiliki turunan yang kontinu pada tiap titik pertemuan. Kata spline diambil dari istilah teknik konstruksisebuah balok fleksibel yang dapat melengkung dengan halus. </p> <p> Berbeda dengan interpolasi polinomial tunggal (misalnya Lagrange), spline memecah domain menjadi intervalinterval kecil dan menyesuaikan sebuah polinomial rendah (biasanya derajat 3) di tiap interval. Keuntungan utama: </p> <ul> <li>Kurva yang lebih halus (kontinuitas turunan pertama dan/atau kedua).</li> <li>Stabilitas numerik lebih baik, terutama ketika jumlah titik data besar.</li> <li>Kontrol lokalperubahan satu titik tidak mengubah seluruh kurva.</li> </ul> </section> <section id="jenis"> <h2>Jenisjenis Spline</h2> <p>Berbagai varian spline diciptakan untuk memenuhi kebutuhan khusus. Berikut yang paling umum:</p> <h3>1. Linear Spline</h3> <p>Polinomial berderajat satu pada tiap interval; hanya menjamin kontinuitas nilai, bukan turunan.</p> <h3>2. Quadratic Spline</h3> <p>Polinomial kuadrat; memberikan kontinuitas nilai dan turunan pertama, namun memerlukan lebih banyak kondisi batas.</p> <h3>3. Cubic Spline</h3> <p>Polinomial derajat tiga; paling populer karena memberikan kontinuitas nilai, turunan pertama, dan turunan kedua.</p> <h3>4. Natural Cubic Spline</h3> <p>Variasi cubic spline dengan kondisi batas kedua turunan di ujungujung sama dengan nol (menghasilkan kurva longgar).</p> <h3>5. Clamped (or FixedEnd) Spline</h3> <p>Menetapkan nilai turunan pertama pada kedua ujung (biasanya dari data kecepatan atau kemiringan). </p> <h3>6. BSpline dan NURBS</h3> <p>Generalitas lebih tinggi; menggunakan basis fungsi Bspline yang memungkinkan kontrol yang lebih fleksibel dengan sejumlah kontrol poin.</p> </section> <section id="rumus"> <h2>Rumus Dasar Cubic Spline</h2> <p>Misalkan ada <em>n+1</em> titik data \((x_0,y_0),\dots,(x_n,y_n)\) dengan \(x_i < x_{i+1}\). Pada tiap interval \([x_i,x_{i+1}]\) kita definisikan:</p> <pre>S_i(x) = a_i + b_i (x-x_i) + c_i (x-x_i)^2 + d_i (x-x_i)^3 </pre> <p>Koefisien \(a_i,b_i,c_i,d_i\) harus memenuhi:</p> <ul> <li><strong>Kondisi interpolasi:</strong> \(S_i(x_i)=y_i\) dan \(S_i(x_{i+1})=y_{i+1}\).</li> <li><strong>Kontinuitas turunan pertama:</strong> \(S_i'(x_{i+1}) = S_{i+1}'(x_{i+1})\).</li> <li><strong>Kontinuitas turunan kedua:</strong> \(S_i''(x_{i+1}) = S_{i+1}''(x_{i+1})\).</li> <li><strong>Kondisi batas:</strong> tergantung tipe spline (natural, clamped, dsb).</li> </ul> <p>Jika kita definisikan interval panjang \(h_i = x_{i+1}-x_i\) dan selisih kemiringan \(\Delta_i = \frac{y_{i+1}-y_i}{h_i}\), maka persamaan tridiagonal untuk turunan kedua \(M_i=S_i''(x_i)\) menjadi:</p> <pre>h_{i-1} M_{i-1} + 2 (h_{i-1}+h_i) M_i + h_i M_{i+1} = 6 (_i - _{i-1}) </pre> <p>Persamaan ini dibentuk untuk i=1,,n1 dan diselesaikan dengan kondisi batas yang dipilih.</p> </section> <section id="implementasi"> <h2>LangkahLangkah Implementasi (Cubic Spline)</h2> <ol> <li><strong>Siapkan data:</strong> vektor <code>x</code> dan <code>y</code>, pastikan <code>x</code> terurut.</li> <li><strong>Hitung h dan :</strong> <code>h[i] = x[i+1]-x[i]</code>, <code>[i] = (y[i+1]-y[i])/h[i]</code>.</li> <li><strong>Buat matriks tridiagonal A dan vektor rhs:</strong> <ul> <li>A(i,i1)=h[i1], A(i,i)=2(h[i1]+h[i]), A(i,i+1)=h[i].</li> <li>rhs[i]=6([i]-[i1]).</li> </ul> </li> <li><strong>Terapkan kondisi batas:</strong> <ul> <li>Natural: set M = M = 0 baris pertama dan terakhir A menjadi 1 pada diagonal, rhs menjadi 0.</li> <li>Clamped: masukkan nilai turunan pada ujung ke dalam sistem.</li> </ul> </li> <li><strong>Selesaikan sistem linear:</strong> gunakan metode Thomas (algoritma O(n)) untuk memperoleh <code>M</code>.</li> <li><strong>Hitung koefisien spline:</strong> <pre>a_i = y_ib_i = _i - (h_i/6)*(2*M_i + M_{i+1})c_i = M_i/2d_i = (M_{i+1}-M_i)/(6*h_i) </pre> </li> <li><strong>Evaluasi:</strong> untuk nilai <em>x*</em> cari intervalnya, lalu gunakan persamaan <code>S_i(x*)</code>.</li> </ol> <div class="note"> <strong>Catatan:</strong> Pada bahasa pemrograman modern (Python, MATLAB, R) biasanya sudah tersedia fungsi siap pakai, tetapi memahami langkahlangkah di atas membantu mengoptimalkan atau menyesuaikan kebutuhan spesifik. </div> </section> <section id="contoh"> <h2>Contoh Kode Python (Natural Cubic Spline)</h2> <pre>import numpy as npimport matplotlib.pyplot as pltdef natural_cubic_spline(x, y): n = len(x) - 1 h = np.diff(x) delta = np.diff(y) / h # Matriks tridiagonal A = np.zeros((n+1, n+1)) rhs = np.zeros(n+1) A[0,0] = 1 # natural boundary A[n,n] = 1 for i in range(1, n): A[i, i-1] = h[i-1] A[i, i] = 2*(h[i-1] + h[i]) A[i, i+1] = h[i] rhs[i] = 6*(delta[i] - delta[i-1]) M = np.linalg.solve(A, rhs) # M_i = S''(x_i) # Koefisien tiap interval a = y[:-1] b = delta - h*(2*M[:-1] + M[1:])/6 c = M[:-1]/2 d = (M[1:] - M[:-1])/(6*h) return a, b, c, d, xdef evaluate_spline(a,b,c,d,xk, xv): # cari interval i = np.searchsorted(xk, xv)-1 i = np.clip(i, 0, len(a)-1) dx = xv - xk[i] return a[i] + b[i]*dx + c[i]*dx**2 + d[i]*dx**3# Data contohx = np.array([0, 1, 2, 3, 4, 5], dtype=float)y = np.array([0, 0.8, 0.9, 0.1, -0.8, -1.0])a,b,c,d,knots = natural_cubic_spline(x, y)xs = np.linspace(x[0], x[-1], 400)ys = evaluate_spline(a,b,c,d,knots, xs)plt.plot(x, y, 'o', label='Data')plt.plot(xs, ys, '-', label='Natural Cubic Spline')plt.legend()plt.title('Interpolasi Spline')plt.show() </pre> <p>Kode di atas menyelesaikan sistem tridiagonal secara langsung, menghitung koefisien, dan menggambar kurva hasil interpolasi.</p> </section> <section> <h2>Kesimpulan</h2> <p> Interpolasi spline, khususnya cubic spline, menyediakan cara yang efisien dan akurat untuk memperkirakan nilai di antara titiktitik terukur sambil menjaga kelancaran fungsi. Dengan memanfaatkan sifat lokal polinomial berderajat rendah, spline menghindari osilasi yang umum pada interpolasi polinomial tinggi serta memberikan kontrol fleksibel lewat pilihan tipe batas. Baik dalam aplikasi grafis komputer, animasi, pemodelan geofisika, ataupun pengolahan sinyal, pemahaman konsep spline menjadi bekal penting bagi siapa pun yang bekerja dengan data berkelanjutan. </p> </section> </main>