在Python中对数组中的点x进行Hermite_e系列的评估,可以按照以下步骤进行:
- 导入必要的库
要进行Hermite_e系列的评估,需要使用到numpy库中的polynomial模块。因此需要使用以下代码导入numpy库与polynomial模块。
import numpy as np
from numpy.polynomial import polynomial as P
- 定义输入的数组和个数
需要定义输入的数组x和个数n。假设输入的数组为x,其长度为n。
x = np.array([0.2, 0.5, 0.8, 1.0])
n = len(x)
- 声明需要计算的值
需要声明需要计算的值xp。xp可以是一个数字或一个数组,表示需要在x上进行插值的位置,如果xp是一个数组,则需要对每一个位置进行插值。
xp = 0.6
- 计算差商并传入多项式求解函数中
Hermite_e系列的评估需要先计算差商,其中一种方式是使用numpy库的polyfit函数。首先,使用以下代码计算二阶差商:
f1 = np.array([(P.polyval(xp, P.polyder(P.polyfit(x, [1, 0]))), P.polyfit(x, [1, 0], w=np.ones(n)))], float)
f2 = np.array([(P.polyval(xp, P.polyder(P.polyfit(x, [0, 1, 0]))), P.polyfit(x, [0, 1, 0], w=np.ones(n)))], float)
fd1 = np.array([(P.polyval(xp, P.polyder(P.polyfit(x, [0, 0, 2, 0]))), P.polyfit(x, [0, 0, 2, 0], w=np.ones(n)))], float)
fd2 = np.array([(P.polyval(xp, P.polyder(P.polyfit(x, [0, 0, 0, 6, 0]))), P.polyfit(x, [0, 0, 0, 6, 0], w=np.ones(n)))], float)
d = np.concatenate((f1, f2, fd1, fd2), axis=0)
以上代码计算了四个一维数组,并将其组合成一个二维数组d。其中,f1和f2分别表示f的一阶和二阶导数的取值和系数,fd1和fd2分别表示f的一阶和二阶导数的导数的取值和系数。
- 使用Poly类进行多项式求解
使用d中的系数和值构建一个多项式,并用该多项式进行求解。其中,需要使用numpy库中的poly1d类来表示多项式,使用其coeffs属性设置多项式的系数。
poly = P.poly1d(d[:,1])
poly.coeffs = d[:,0]
result = P.polyval(xp, poly)
该代码将多项式的系数设置为d中的系数,然后使用polyval函数针对xp进行多项式求解得到result。
示例1:计算单个点的Hermite_e系列插值值
import numpy as np
from numpy.polynomial import polynomial as P
# 定义输入的数组和个数
x = np.array([0.2, 0.5, 0.8, 1.0])
n = len(x)
# 声明需要计算的值
xp = 0.6
# 计算差商并传入多项式求解函数中
f1 = np.array([(P.polyval(xp, P.polyder(P.polyfit(x, [1, 0]))), P.polyfit(x, [1, 0], w=np.ones(n)))], float)
f2 = np.array([(P.polyval(xp, P.polyder(P.polyfit(x, [0, 1, 0]))), P.polyfit(x, [0, 1, 0], w=np.ones(n)))], float)
fd1 = np.array([(P.polyval(xp, P.polyder(P.polyfit(x, [0, 0, 2, 0]))), P.polyfit(x, [0, 0, 2, 0], w=np.ones(n)))], float)
fd2 = np.array([(P.polyval(xp, P.polyder(P.polyfit(x, [0, 0, 0, 6, 0]))), P.polyfit(x, [0, 0, 0, 6, 0], w=np.ones(n)))], float)
d = np.concatenate((f1, f2, fd1, fd2), axis=0)
# 使用Poly类进行多项式求解
poly = P.poly1d(d[:,1])
poly.coeffs = d[:,0]
result = P.polyval(xp, poly)
print("result: ", result)
示例2:计算多个点的Hermite_e系列插值值
import numpy as np
from numpy.polynomial import polynomial as P
# 定义输入的数组和个数
x = np.array([0.2, 0.5, 0.8, 1.0])
n = len(x)
# 声明需要计算的值
xp = np.array([0.6, 0.3, 0.9])
# 计算差商并传入多项式求解函数中
f1 = np.array([(P.polyval(xp, P.polyder(P.polyfit(x, [1, 0]))), P.polyfit(x, [1, 0], w=np.ones(n)))], float)
f2 = np.array([(P.polyval(xp, P.polyder(P.polyfit(x, [0, 1, 0]))), P.polyfit(x, [0, 1, 0], w=np.ones(n)))], float)
fd1 = np.array([(P.polyval(xp, P.polyder(P.polyfit(x, [0, 0, 2, 0]))), P.polyfit(x, [0, 0, 2, 0], w=np.ones(n)))], float)
fd2 = np.array([(P.polyval(xp, P.polyder(P.polyfit(x, [0, 0, 0, 6, 0]))), P.polyfit(x, [0, 0, 0, 6, 0], w=np.ones(n)))], float)
d = np.concatenate((f1, f2, fd1, fd2), axis=0)
# 使用Poly类进行多项式求解
poly = P.poly1d(d[:,1])
poly.coeffs = d[:,0]
result = P.polyval(xp, poly)
print("result: ", result)