擺弄後在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