python自选一个超越函数,在给定插值区间用分段线性多项式进行插值。
时间: 2024-05-05 20:21:26 浏览: 14
这里我选取了指数函数 $f(x) = e^x$ 作为超越函数,并使用分段线性多项式进行插值。
首先,我们需要导入必要的库和定义指数函数:
```python
import numpy as np
import matplotlib.pyplot as plt
def f(x):
return np.exp(x)
```
接下来,我们需要定义插值的区间和插值的节点数:
```python
a = 0.0 # 区间左端点
b = 2.0 # 区间右端点
n = 10 # 插值节点数
```
然后,我们需要在区间 $[a, b]$ 上均匀选取 $n$ 个节点:
```python
x = np.linspace(a, b, n)
```
接下来,我们需要计算在这些节点上的函数值:
```python
y = f(x)
```
然后,我们需要定义分段线性插值函数:
```python
def piecewise_linear(x, x_data, y_data):
n = len(x_data)
y = np.zeros_like(x)
for i in range(n-1):
mask = (x >= x_data[i]) & (x <= x_data[i+1])
y[mask] = (y_data[i+1]-y_data[i])/(x_data[i+1]-x_data[i])*(x[mask]-x_data[i]) + y_data[i]
return y
```
最后,我们可以使用 matplotlib 库绘制原函数和分段线性插值函数的图像:
```python
# 绘制原函数
xx = np.linspace(a, b, 100)
yy = f(xx)
plt.plot(xx, yy, label="exact")
# 绘制分段线性插值函数
yy_interp = piecewise_linear(xx, x, y)
plt.plot(xx, yy_interp, label="interpolation")
plt.legend()
plt.show()
```
完整代码如下所示: