You are on page 1of 4

Muhammad Salim Mas’adi/190322623664/AM

Interpolasi Newton dan Lagrange

• Program
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import sys

def lg(xd, data):


X = data[:, 0]
Y = data[:, 1]
N = X.size

tP = 0.0
for i in range(N):
tL = 1.0
for j in range(N):
if i!=j:
tL = tL * (xd-X[j])/(X[i]-X[j])
tP = tP + Y[i] * tL
return tP

def pn(a, xData, x):


n = len(xData) - 1
p = a[n]
for k in range(1, n+1):
p = a[n-k] + (x - xData[n-k])*p
return p

def koef(data):
J = len(data[:,0])
I = J + 1
b = np.zeros(J)
for i in range(2, I):
for j in range(i-1, J):
data[j, i] = (data[j, i-1] - data[i-2, i-1])/ \
(data[j, 0] - data[i-2, 0])
for j in range(J):
b[j] = data[j, j+1]
return b

data = np.array([[0. , 0.9162],


[0.25 , 0.8109],
[0.5 , 0.6931],
[0.75 , 0.8021],
[1. , 0.6012]])

N = data[:,0].size
D = np.zeros((N, N+1))
D[:,0:2] = data
a = koef(D)
print(' Tes Data')
print('_________________')
print('| x | y |')
beda = 0
for i in range(a.size):
yn = pn(a, data[:,0], data[i,0])
print('| {0:4.2f} | {1:6.4f} |'.format(data[i,0], yn))
beda = beda + yn - data[i,1]
print('-----------------')
print()
print("Beda data = {0}".format(beda))
if beda < 1e-5:
print("\033[32mRumus sudah benar.")
else:
print("\033[31mRumus salah.")
sys.exit()

x2 = data[0:3,0]
y2 = data[0:3,1]
x22 = np.linspace(min(x2), max(x2), 50)
yn22 = [pn(a, data[0:3,0], xx) for xx in x22]
yl22 = [lg(xx, data[0:3,:]) for xx in x22]

x4 = data[:,0]
y4 = data[:,1]
x44 = np.linspace(min(x4), max(x4), 50)
yn44 = [pn(a, data[:,0], xx) for xx in x44]
yl44 = [lg(xx, data) for xx in x44]

plt.title(r'Grafik Interpolasi lagrange dan Newton')


plt.xlabel(r'x')
plt.ylabel(r'y')
plt.xlim(min(x44)-0.1, max(x44)+0.1)
plt.ylim(min(yl44)-0.1, max(yl44)+0.1)
plt.rc('grid', linestyle='-', color='gray')
plt.grid(True)
mpl.rcParams['figure.dpi'] = 125
plt.plot(x22, yl22, ls=(1,(1,2)), color='g', label='int. Lagrange
2')
plt.plot(x22, yn22, ls=(1,(1,5)), color='r', label='int. Newton 2')
plt.plot(x44, yl44, ls=(1,(1,2)), color='g', label='int. Lagrange
4')
plt.plot(x44, yn44, ls=(1,(1,5)), color='r', label='int. Newton 4')
plt.scatter(x4, y4, marker='o', color='b', label='data')
plt.legend(loc='upper right')
plt.show()
• Hasil

You might also like