设有函数 f(x)=1/(1+x*x),在[-5,5]上取等距节点x, =-5+i,(i =0,1,2,3L,10)上进行插值。采用n次拉格朗日进行插值,将计算结果可视化,画图显示插值结果。用python写出程序
时间: 2024-12-28 13:40:57 浏览: 12
在Python中,我们可以使用`numpy`库来进行数值计算,`matplotlib`库进行数据可视化,以及`scipy.interpolate`库来实现拉格朗日插值。以下是创建这样一个程序的一个基本框架:
```python
import numpy as np
from scipy.interpolate import lagrange
import matplotlib.pyplot as plt
# 定义函数f(x)
def func(x):
return 1 / (1 + x**2)
# 等距节点范围 [-5, 5]
x_nodes = np.linspace(-5, 5, num=11) # 选择11个节点,包括-5和5
y_nodes = [func(node) for node in x_nodes]
# 使用拉格朗日插值
lag_poly = lagrange(x_nodes, y_nodes)
# 创建新的x值用于插值
x_interp = np.linspace(x_nodes.min(), x_nodes.max(), 400) # 细化网格用于平滑图像
# 计算并绘制插值结果
y_interp = lag_poly(x_interp)
plt.plot(x_nodes, y_nodes, 'o', label='Nodes') # 指定节点
plt.plot(x_interp, y_interp, '-', label='Interpolation')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend()
plt.title('Lagrange Interpolation of f(x) = 1/(1+x^2)')
plt.grid(True)
plt.show()
阅读全文