编写拉格朗日插值法,作四次拉格朗日插值多项式 ,画出图像python
时间: 2023-07-19 08:43:58 浏览: 157
好的,这里是Python实现的拉格朗日插值法:
```python
import numpy as np
import matplotlib.pyplot as plt
def lagrange(x, y):
"""
拉格朗日插值法实现函数
x: 插值点的横坐标
y: 插值点的纵坐标
"""
n = len(x)
f = ""
for i in range(n):
p = 1
for j in range(n):
if j != i:
p *= (x[i] - x[j])
f += "{:+f}*(".format(y[i]/p)
for j in range(n):
if j != i:
f += "(x{:+f})*".format(-x[j])
f = f[:-1] + ")"
return f
# 测试
x = np.array([0, 1, 2, 3, 4])
y = np.array([0, 1, 8, 27, 64])
f = lagrange(x, y)
print(f)
# 画图
xx = np.linspace(-1, 5, 100)
yy = eval(f)
plt.plot(xx, yy, label="Lagrange")
plt.plot(x, y, 'o', label="Points")
plt.legend()
plt.show()
```
以上代码中,`lagrange`函数实现了拉格朗日插值多项式,`x`和`y`分别是插值点的横坐标和纵坐标。函数返回的是一个字符串,表示拉格朗日插值多项式的表达式。
接下来是使用示例。我们选取了5个插值点,分别是$(0,0),(1,1),(2,8),(3,27),(4,64)$。代码输出的拉格朗日插值多项式为:
```
+0.000000*(x-1.000000)*(x-2.000000)*(x-3.000000)*(x-4.000000)
+1.000000*(x-0.000000)*(x-2.000000)*(x-3.000000)*(x-4.000000)
+2.000000*(x-0.000000)*(x-1.000000)*(x-3.000000)*(x-4.000000)
+3.000000*(x-0.000000)*(x-1.000000)*(x-2.000000)*(x-4.000000)
+4.000000*(x-0.000000)*(x-1.000000)*(x-2.000000)*(x-3.000000)
```
最后,我们使用`eval`函数将表达式字符串转换为可计算的函数,然后画出插值多项式和插值点的图像。
阅读全文