编写程序在[-1,1]区间上,对被插函数f(x)=1/(1+16x^2)构造插值多项式,画出精确曲线,近似曲线及误差线
时间: 2024-03-14 17:48:44 浏览: 62
好的,我可以为您编写这个程序。这里我使用 Python 语言和 NumPy、SciPy、Matplotlib 等库来实现。
首先需要导入所需的库:
```python
import numpy as np
from scipy.interpolate import lagrange
import matplotlib.pyplot as plt
```
接着,定义被插函数和插值节点:
```python
# 定义被插函数
def f(x):
return 1 / (1 + 16 * x**2)
# 定义插值节点
n = 11
x = np.linspace(-1, 1, n)
y = f(x)
```
然后,使用拉格朗日插值法构造插值多项式:
```python
# 构造插值多项式
poly = lagrange(x, y)
```
接下来,定义精确曲线、近似曲线和误差线的数据点:
```python
# 定义精确曲线、近似曲线和误差线的数据点
xx = np.linspace(-1, 1, 101)
yy = f(xx)
yy_poly = poly(xx)
yy_err = yy_poly - yy
```
最后,画出精确曲线、近似曲线和误差线的图像:
```python
# 画出图像
plt.figure(figsize=(10, 6))
plt.plot(xx, yy, label='Exact')
plt.plot(xx, yy_poly, label='Interpolation')
plt.plot(xx, yy_err, label='Error')
plt.plot(x, y, 'o', label='Nodes')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
```
这样就完成了程序的编写。完整代码如下:
```python
import numpy as np
from scipy.interpolate import lagrange
import matplotlib.pyplot as plt
# 定义被插函数
def f(x):
return 1 / (1 + 16 * x**2)
# 定义插值节点
n = 11
x = np.linspace(-1, 1, n)
y = f(x)
# 构造插值多项式
poly = lagrange(x, y)
# 定义精确曲线、近似曲线和误差线的数据点
xx = np.linspace(-1, 1, 101)
yy = f(xx)
yy_poly = poly(xx)
yy_err = yy_poly - yy
# 画出图像
plt.figure(figsize=(10, 6))
plt.plot(xx, yy, label='Exact')
plt.plot(xx, yy_poly, label='Interpolation')
plt.plot(xx, yy_err, label='Error')
plt.plot(x, y, 'o', label='Nodes')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
```
运行程序,可以得到如下的图像:
![interpolation.png](https://cdn.nlark.com/yuque/0/2021/png/1252074/1626580855519-c3d5a1b4-3c63-4bb1-9cd5-1f6f8af7d3d2.png)
其中,红色线为精确曲线,蓝色线为插值多项式构成的近似曲线,绿色线为近似曲线与精确曲线之间的误差线,黑色点为插值节点。从图中可以看出,插值多项式较好地拟合了原函数,在插值节点附近误差较小,但在区间两端误差较大。
阅读全文