Numpy 用零除的最小最小二乘法

Numpy 用零除的最小最小二乘法,numpy,divide-by-zero,minimization,Numpy,Divide By Zero,Minimization,我想对一个包含除法和一些三角函数的函数应用一个极小化,正如下面的代码所示。 但会出现一个错误,其除法为零: RuntimeWarning:在divide launch_new_instance()中遇到被零除的情况 我通过使用:ma.masked\u invalid(…)您可以通过将分母定义为一个小数字而不是零来避免被零除: XAmx0=XA-x0 如果abs(XAmx0)

我想对一个包含除法和一些三角函数的函数应用一个极小化,正如下面的代码所示。 但会出现一个错误,其除法为零:

RuntimeWarning:在divide launch_new_instance()中遇到被零除的情况


我通过使用:
ma.masked\u invalid(…)

您可以通过将分母定义为一个小数字而不是零来避免被零除:

XAmx0=XA-x0
如果abs(XAmx0)<1e-12:XAmx0=1e-12

然后除以
XAmx0
,而不是
XA-x0


这使您在残差函数中的表达式正则化,并且不会影响您的结果(如果最佳解决方案中的分母在1e-12的数量级,您很可能会遇到数值精度方面的问题)

我尝试了“np.seterr(divide='ignore',invalid='ignore')”,但似乎不起作用……您已经找到解决方案了吗?如果是的话,你可以发布一个答案…最后,它并不适用于所有情况…我不明白。。。
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