给定一组点(可以是离散点也可以是从某个连续函数上取出的几个点),编写拉格朗日插值或牛顿插值程序,比较插值函数与原函数的图像和误差;
时间: 2024-01-22 17:20:59 浏览: 78
好的,我可以给您提供一个Python代码实现拉格朗日插值的例子:
``` python
import numpy as np
import matplotlib.pyplot as plt
def lagrange_interpolation(x, y, x_new):
"""
拉格朗日插值函数
:param x: 插值点的x坐标
:param y: 插值点的y坐标
:param x_new: 需要插值的新点的x坐标
:return: 新点的y坐标
"""
n = len(x)
y_new = 0.0
for i in range(n):
temp = y[i]
for j in range(n):
if j != i:
temp *= (x_new - x[j]) / (x[i] - x[j])
y_new += temp
return y_new
# 测试函数
x = np.array([0.0, 1.0, 2.0, 3.0, 4.0])
y = np.array([0.0, 1.0, 4.0, 9.0, 16.0])
x_new = np.linspace(0, 4, 100)
y_new = np.array([lagrange_interpolation(x, y, i) for i in x_new])
# 绘制原函数和插值函数
plt.plot(x_new, y_new, label='Interpolation')
plt.plot(x, y, 'o', label='Original')
plt.legend()
plt.show()
# 计算误差
y_true = np.array([i**2 for i in x_new])
error = np.abs(y_true - y_new)
max_error = np.max(error)
mean_error = np.mean(error)
print('Max error: %.6f' % max_error)
print('Mean error: %.6f' % mean_error)
```
这个例子中,我生成了一组包含5个点的离散数据,然后通过拉格朗日插值方法将这些点连接起来形成一个函数,并绘制出原函数和插值函数的图像。最后计算了插值函数和原函数之间的误差,并输出最大误差和平均误差。您可以根据需要修改输入的插值点和函数,来进行测试。
阅读全文