习题7.10(1)
1.代码实现
点击查看代码
import numpy as np
import pylab as plt
# 原始数据点
x0 = np.array([-2, -1.7, -1.4, -1.1,-0.8, -0.5, -0.2, 0.1, 0.4, 0.7, 1, 1.3, 1.6, 1.9, 2.2, 2.5, 2.8, 3.1, 3.4, 3.7, 4, 4.3, 4.6, 4.9])
y0 = np.array([0.1029, 0.1174, 0.1316, 0.1448, 0.1566, 0.1662, 0.1733, 0.1775, 0.1785, 0.1764, 0.1711, 0.1630, 0.1526, 0.1402,
0.1266, 0.1122, 0.0977, 0.0835, 0.0702, 0.0588,0.0479, 0.0373, 0.0291, 0.0224])
# 添加新的数据点
x0 = np.append(x0, 5)
y0 = np.append(y0, 0.05)
# 拉格朗日插值法
def lagrange_interpolation(x, x_data, y_data):
n = len(x_data)
y_interp = np.zeros_like(x)
for i in range(n):
li = np.ones_like(x)
for j in range(n):
if j!= i:
li *= (x - x_data[j]) / (x_data[i] - x_data[j])
y_interp += y_data[i] * li
return y_interp
# 绘制数据点和拟合曲线
plt.plot(x0, y0, 'ro') # 红色圆点
xt = np.linspace(-2, 5, 100)
y_interp = lagrange_interpolation(xt, x0, y0)
plt.plot(xt, y_interp, '--b') # 蓝色虚线
plt.show()
2.运行结果