我有一个函数给出两个多项式p和q,计算实数a和b之间的p / q的积分。我的功能是$ \ phi $:
import numpy as np
def integrate_pdivq(a, b, P, Q, r):
"""
Calculates the definite integral of P(x)/Q(x) between a and b, assuming gr P<gr Q and that Q have all different roots, all of which have nonzero imaginary part.
Parameters:
P: list with coefficients of polynomial P.
Q: list with coefficients of polynomial Q.
r: list with the roots of Q.
"""
Q_deriv = np.polyder(Q)
fracc = ( np.polyval(P, r)/np.polyval(Q_deriv, r) )
inte = ( 0.5 * np.log((b-r.real)**2+(r.imag)**2) + 1j * np.arctan((b-r.real)/(r.imag)) ) - ( 0.5 * np.log((a-r.real)**2+(r.imag)**2) + 1j * np.arctan((a-r.real)/(r.imag)) )
return np.sum(fracc*inte)
我确信这有效。现在,我在使这个功能与多维参数一起工作时遇到了严重的麻烦。我的意思是,我希望能够用作参数P,Q,r 4维数组,因此输出也是4D数组。 我认为我遇到的主要问题是我没有找到一种有效的方法来处理多项式数组。
答案 0 :(得分:0)
我刚刚在另一个问题(我想你)中证明了polyder
的逻辑如何应用于2d系数数组。基于对polyval
代码的快速浏览,将其应用于2d系数数组应该同样容易。
`polyval&#39;的核心是:
for i in range(len(p)):
y = x * y + p[i]
对于nd p
(即&#39;行&#39;系数),请执行以下操作:
for i in range(p.shape[-1]):
y = x * y + p[...,i]
您可能需要调整尺寸,以便x
,y
和p
能够很好地进行广播。
numpy中的多项式函数没什么深刻或神秘的。它只是用系数和数值变量进行简单的数学运算。它们看起来像便利功能,而不是一个全面的多项式包。