在使用 numpy
的 poly
函数后,我得到了以下结果:
integrate.quad(lambda x:np.piecewise(x, [x < 3, x >= 3],
[lambda x: np.polyval([1,3,0],x),
lambda x: np.polyval([-2,2,0],x)]),
0,6)
评估结果为:
(-76.5, 1.3489209749195652e-12)
有一个polyint
函数来进行多项式积分。
In [1523]: np.polyint([1,3,0])
Out[1523]: array([ 0.33333333, 1.5 , 0. , 0. ])
In [1524]: np.polyint([-2,2,0])
Out[1524]: array([-0.66666667, 1. , 0. , 0. ])
那是
x*(x+3) => x**2 + 3*x => np.poly1d([1,3,0]) => 1/3 x**3 + 3/2 x**2
所以,这两个
polyint
对象的适当端点差值是
analytical
解决方案:
In [1619]: np.diff(np.polyval(np.polyint([1,3,0]),[0,3])) +
np.diff(np.polyval(np.polyint([-2,2,0]),[3,6]))
Out[1619]: array([-76.5])
In [1621]: [np.polyval(np.polyint([1,3,0]),[0,3]),
np.polyval(np.polyint([-2,2,0]),[3,6])]
Out[1621]: [array([ 0. , 22.5]), array([ -9., -108.])]
sympy
。相反,scipy
用于数值问题和数值积分。 - Andras Deak -- Слава Україніquad
是数值积分,它不会先计算1/3*x**3 + 3/2*x**2
表达式。np.polyint
可以对这两个表达式执行不定多项式积分。 - hpaulj