给出函数f(x)=e的sinx次方在[-5,5]上的基于n等距节点x_j=-5+(10/n)j(j=0,1,2,...,n)的拉格朗日差值多项式和牛顿差值多项式的Python程序
时间: 2024-09-21 08:08:14 浏览: 79
为了给出函数 `f(x) = e^(sin(x))` 在区间 `[-5, 5]` 上的拉格朗日和牛顿差值多项式,我们将首先需要导入必要的库并编写计算多项式的函数。然后,我们将创建一个包含等间距节点 `x_j` 的列表,并计算相应的函数值。
拉格朗日插值法的Python代码:
```python
import numpy as np
def f(x):
return np.exp(np.sin(x))
# 定义区间范围和节点数
a, b = -5, 5
n = 100 # 可以根据需求调整节点数
# 计算等间距节点
x_j = a + (b-a)/(n-1)*np.arange(n)
# 拉格朗日多项式
def lagrange_interpolation(x_i, y_i, x):
l_j = [y_k / np.prod(x_j[i] - x_l) for i, x_l in enumerate(x_j) if i != k]
return sum(l * f(x_l) for l, x_l in zip(l_j, x_j))
# 对每个节点计算拉格朗日多项式
lag_polynomial = [lagrange_interpolation(x_j, f(x_j), x) for x in x_j]
```
牛顿插值法的Python代码:
```python
def newton_interpolation(f, df, x_j, x):
delta_x = x_j[1:] -1]
y_j = f(x_j)
c_j = [(y_j[i+1] - y_j[i]) / delta_x[i] for i in range(len(delta_x))]
n = len(c_j) - 1
polynomial = 0
for k in range(n+1):
term = c_n * np.power(x - x_j[n-k], n-k)
polynomial += term
c_n -= c_n * (k + 1) * (x - x_j[n-k]) / delta_x[n-k-1]
return polynomial
# 计算牛顿插值多项式
newton_polynomial = [newton_interpolation(f, lambda x: np.cos(x) * np.exp(np.sin(x)), x_j, x) for x in x_j]
```
阅读全文