[英]Minimization leastsq with division by zero
我想對包含除法和一些三角函數的函數應用最小化,如下面的代碼所示。 但是出現除以零的錯誤:
RuntimeWarning:除以零除在launch_new_instance()中遇到
Lx=2592.
Ly=1936.
YA, XA = np.mgrid[0:Ly, 0:Lx]
XAvect=np.reshape(XA,(Lx*Ly))
YAvect=np.reshape(YA,(Lx*Ly))
#Initialization
x0 = 200.
y0 = 200.
KI = 100000.
T = 20.
A1 = 50.
A2 = 50.
def residual_V2west(vars, XA, YA, donnees):
KI = vars[0]
A1 = vars[1]
A2 = vars[2]
x0 = vars[3]
y0 = vars[4]
modeleV2 = KI/(G)*np.sqrt(np.sqrt((XA-x0)**2 + (YA-y0)**2)/(2*np.pi))*np.sin((np.arctan(((YA-y0)/(XA-x0))))/2)*(Kappa + 1 - 2*np.cos(np.arctan(((YA-y0)/(XA-x0)))/2)**2) + \
A1*np.sqrt((XA-x0)**2+(YA-y0)**2)*np.cos(np.arctan((YA-y0)/(XA-x0))) + A2
return (donnees-modeleV2)
from scipy.optimize import leastsq
vars = [KI, A1, A2, x0, y0]
out_V_west = sco.leastsq(residual_V2west, vars, args=(XAvect, YAvect, Vmvect),epsfcn=0.01)
print out_V_west
您可以通過將分母定義為小數而不是零來嘗試避免被零除:
XAmx0 = XA-x0 if abs(XAmx0) < 1e-12: XAmx0 = 1e-12
然后除以XAmx0
而不是XA-x0
這將使您的殘差函數中的表達式正規化,並且不會影響您的結果(如果最優解中的分母為1e-12左右,那么無論如何您都可能會遇到數值精度問題)
我通過使用以下ma.masked_invalid(...)
實現的: ma.masked_invalid(...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.