摆弄后在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
所以analytical
解决方案是针对这两个polyint
对象适当终点的差异:
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.])]
“分析” 和“SciPy的“不会混合得很好。如果您需要分析整合,请使用'sympy'。相反,“scipy”则用于数值问题和数值积分。 –
“分析”是什么意思? 'quad'是一个数字集成。它首先不计算“1/3 * x ** 3 + 3/2 * x ** 2”表达式。 'np.polyint'可以对这两个表达式进行无限多项式积分。 – hpaulj
好吧,无论是分析还是使用像quad这样的东西都很好,在函数被传递到集成的地方。 – user2520932