Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import matplotlib.pyplot as plt # untuk memunculkan grafik
- def clamped_cubic_spline(X, fx, f_aksen_awal_kurva, f_aksen_akhir_kurva, n):
- n = len(X) - 1
- h = [X[i+1] - X[i] for i in range(n)]
- alpha = [0] * (n+1)
- for i in range(0, n):
- alpha[i] = (3/h[i]) * (fx[i+1] - fx[i]) - (3/h[i-1]) * (fx[i] - fx[i-1])
- l = [1] + [0] * n
- u = [0] * (n+1)
- z = [0] * (n+1)
- l[1] = 2 * h[0]
- u[1] = 0.5
- z[1] = alpha[1] / l[1]
- for i in range(2, n):
- l[i] = 2 * (X[i] - X[i-1]) - h[i-1] * u[i-1]
- u[i] = h[i] / l[i]
- z[i] = (alpha[i] - h[i-1] * z[i-1]) / l[i]
- l[n] = h[n-1] * (2 - u[n-1])
- z[n] = (alpha[n] - h[n-1] * z[n-1]) / l[n]
- c = [0] * (n+1)
- b = [0] * (n+1)
- d = [0] * (n+1)
- c[n] = z[n]
- for j in range(n-1, -1, -1):
- c[j] = z[j] - u[j] * c[j+1]
- for i in range(n):
- b[i] = (fx[i+1] - fx[i]) / h[i] - h[i] * (c[i+1] + 2 * c[i]) / 3
- d[i] = (c[i+1] - c[i]) / (3 * h[i])
- a = fx
- ukuran_partisi = (X[-1] - X[0]) / n
- nilai_x = [X[0] + i * ukuran_partisi for i in range(n+1)]
- nilai_y = []
- for x in nilai_x:
- for i in range(n):
- if X[i] <= x <= X[i+1]:
- y = fx[i] + b[i] * (x - X[i]) + c[i] * (x - X[i])**2 + d[i] * (x - X[i])**3
- nilai_y.append(y)
- break
- return nilai_x, nilai_y, a, b, c, d
- # KURVA 1
- data_kurva_1 = [
- [1, 2, 5, 6, 7, 8, 10, 13, 17], # Data titik Xi
- [3.0, 3.7, 3.9, 4.2, 5.7, 6.6, 7.1, 6.7, 4.5] # Data titik f(Xi)
- ]
- x1 = data_kurva_1[0]
- fx1 = data_kurva_1[1]
- f_aksen_awal_kurva_1 = float(1.0)
- f_aksen_akhir_kurva_1 = float(-0.67)
- i_kurva_1 = 8
- # KURVA 2
- data_kurva_2 = [
- [17, 20, 23, 24, 25, 27, 27.7], # Data titik Xi
- [4.5, 7.0, 6.1, 5.6, 5.8, 5.2, 4.1] # Data titik f(Xi)
- ]
- x2 = data_kurva_2[0]
- fx2 = data_kurva_2[1]
- f_aksen_awal_kurva_2 = float(1.0)
- f_aksen_akhir_kurva_2 = float(-0.67)
- i_kurva_2 = 6
- # KURVA 3
- data_kurva_3 = [
- [27.7, 28, 29, 30], # Data titik Xi
- [4.1, 4.3, 4.1, 3.0] # Data titik f(Xi)
- ]
- x3 = data_kurva_3[0]
- fx3 = data_kurva_3[1]
- f_aksen_awal_kurva_3 = float(0.33)
- f_aksen_akhir_kurva_3 = float(-1.5)
- i_kurva_3 = 3
- # Interpolasi dengan Clamped Cubic Spline
- x_kurva_1, y_kurva_1, a1, b1, c1, d1 = clamped_cubic_spline(x1, fx1, f_aksen_awal_kurva_1, f_aksen_akhir_kurva_1, i_kurva_1)
- x_kurva_2, y_kurva_2, a2, b2, c2, d2 = clamped_cubic_spline(x2, fx2, f_aksen_awal_kurva_2, f_aksen_akhir_kurva_2, i_kurva_2)
- x_kurva_3, y_kurva_3, a3, b3, c3, d3 = clamped_cubic_spline(x3, fx3, f_aksen_awal_kurva_3, f_aksen_akhir_kurva_3, i_kurva_3)
- plt.title('Kurva')
- # Cetak hasil interpolasi
- print("\n")
- print("Hasil interpolasi Kurva 1:")
- for i in range(len(x_kurva_1)):
- print(f"i = {i}, xi = {x1[i]}, a = {a1[i]:.4f}, b = {b1[i]:.4f}, c = {c1[i]:.4f}, d = {d1[i]:.4f}")
- # print(f"x = {x_kurva_1[i]:.4f}, y = {y_kurva_1[i]:.4f}")
- print("\n")
- print("Hasil Interpolasi Kurva 2:")
- for i in range(len(x_kurva_2)):
- print(f"i = {i}, xi = {x2[i]}, a = {a2[i]:.4f}, b = {b2[i]:.4f}, c = {c2[i]:.4f}, d = {d2[i]:.4f}")
- # print(f"x = {x_kurva_2[i]:.10f}, y = {y_kurva_2[i]:.10f}")
- print("\n")
- print("Hasil interpolasi Kurva 3:")
- for i in range(len(x_kurva_3)):
- print(f"i = {i}, xi = {x3[i]}, a = {a3[i]:.4f}, b = {b3[i]:.4f}, c = {c3[i]:.4f}, d = {d3[i]:.4f}")
- # print(f"x = {x_kurva_3[i]:.10f}, y = {y_kurva_3[i]:.10f}")
- plt.plot(x_kurva_1, y_kurva_1, color='red', label='Kurva 1')
- plt.plot(x_kurva_2, y_kurva_2, color='green', label='Kurva 2')
- plt.plot(x_kurva_3, y_kurva_3, color='aqua', label='Kurva 3')
- plt.xlabel('X')
- plt.ylabel('f(X)')
- plt.title('Interpolasi Clamped Cubic Spline')
- plt.legend()
- plt.grid(True)
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement