已知函数f(x)=1.0/(1+x2),x取值范围是 -5 ≤ x ≤ 5取均匀11个节点.编写程序进行拉格朗日插值,画出函数图象并与原函数比较。
时间: 2024-05-11 08:16:10 浏览: 157
好的,让我来回答你的问题。这个问题需要用到拉格朗日插值的方法来求解,具体步骤如下:
1. 定义函数f(x)。
```python
def f(x):
return 1/(1+x**2)
```
2. 定义插值函数。
```python
def lagrange(x, X, Y):
"""
x: 待求的插值点
X: 已知的插值节点
Y: 对应的函数值
"""
n = len(X)
L = [0] * n
for i in range(n):
p = 1
for j in range(n):
if j != i:
p *= (x - X[j])/(X[i] - X[j])
L[i] = Y[i] * p
return sum(L)
```
3. 定义横坐标x和纵坐标y。
```python
import numpy as np
X = np.linspace(-5, 5, 11)
Y = f(X)
x = np.linspace(-5, 5, 101)
y = [lagrange(xi, X, Y) for xi in x]
```
4. 绘图并比较原函数。
```python
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8,4))
ax.plot(x, y, label='拉格朗日插值')
ax.plot(x, f(x), label='原函数')
ax.legend()
plt.show()
```
运行程序,可以得到插值后的函数图像并与原函数进行比较。
阅读全文