数值分析拉格朗日插值实验Python
时间: 2023-11-05 10:25:07 浏览: 84
拉格朗日插值法与python实现
5星 · 资源好评率100%
这里提供一个Python实现的拉格朗日插值实验,需要用到numpy和matplotlib库。
先定义一个函数,可以用来生成待插值的数据:
```python
import numpy as np
def f(x):
return np.sin(x)
x = np.linspace(0, 2*np.pi, 11)
y = f(x)
```
这里生成了一个等间距的11个点,对应的函数值使用sin函数计算。
接下来定义一个拉格朗日插值函数:
```python
def lagrange(x, x0, y0):
n = len(x0)
l = np.ones(n)
for i in range(n):
for j in range(n):
if j != i:
l[i] *= (x - x0[j]) / (x0[i] - x0[j])
return sum(y0 * l)
```
这个函数的输入参数分别为:
- x:要进行插值的点的横坐标
- x0:已知点的横坐标数组
- y0:已知点的纵坐标数组
函数首先计算出拉格朗日插值的基函数l,然后将已知点的纵坐标与基函数相乘,最后求和得到插值结果。
接下来可以使用matplotlib库绘制插值结果:
```python
import matplotlib.pyplot as plt
x_new = np.linspace(0, 2*np.pi, 100)
y_new = np.zeros(100)
for i in range(100):
y_new[i] = lagrange(x_new[i], x, y)
plt.plot(x_new, y_new, label='Lagrange Interpolation')
plt.plot(x, y, 'o', label='Data Points')
plt.plot(x_new, f(x_new), label='True Function')
plt.legend()
plt.show()
```
这里使用了np.linspace函数生成了100个等间距的点,然后对每个点进行插值,得到插值结果y_new。最后将插值结果、原始数据点和真实函数一起绘制出来。
完整的代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
def f(x):
return np.sin(x)
def lagrange(x, x0, y0):
n = len(x0)
l = np.ones(n)
for i in range(n):
for j in range(n):
if j != i:
l[i] *= (x - x0[j]) / (x0[i] - x0[j])
return sum(y0 * l)
x = np.linspace(0, 2*np.pi, 11)
y = f(x)
x_new = np.linspace(0, 2*np.pi, 100)
y_new = np.zeros(100)
for i in range(100):
y_new[i] = lagrange(x_new[i], x, y)
plt.plot(x_new, y_new, label='Lagrange Interpolation')
plt.plot(x, y, 'o', label='Data Points')
plt.plot(x_new, f(x_new), label='True Function')
plt.legend()
plt.show()
```
运行结果如下图所示:
![拉格朗日插值结果](https://i.imgur.com/Hv0zPjK.png)
阅读全文