数值分析拉格朗日插值实验Python
时间: 2023-11-05 18:25:07 浏览: 55
这里提供一个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)
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![md](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_lunwen.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)