2

我正在使用最小二乘法来拟合很多参数,但是,结果并不令人惊讶,我认为这可能是由于最小化。事实上,当我修改初始化条款时,结果是不同的......

我第一次尝试使用命令“xtol”调整参数的初始值,该命令指定近似解中所需的误差,但结果并不好,所以我想知道是否可以指定边界每个参数。最后一个解决方案可能更准确吗?

此外,我需要适应的术语是一系列的参数,也许有一个最好的方法来处理这个问题,而不是我通过编写 2 个订单所做的......

def residual_V2will2(vars, XA, YA, x0, y0, A2, donnees):
    aI = vars[0]
    aII = vars[1]
    modeleV2 = ma.masked_invalid(np.sqrt((XA-x0)**2 + (YA-y0)**2)**(1/2)*aI/(2*G)*((Kappa - 1/2. + \
    1)*np.sin(np.arctan(((YA-y0)/(XA-x0)))/2) + \
    1/2.*np.sin(np.arctan(((YA-y0)/(XA-x0)))*(-3/2.))) + np.sqrt((XA-x0)**2 + \
    (YA-y0)**2)*aII/(2*G)*((Kappa - 2)*np.sin(np.arctan(((YA-y0)/(XA-x0)))) + \
    np.sin(np.arctan(((YA-y0)/(XA-x0)))*(-1))) + A2) 
    return (donnees-modeleV2)

from scipy.optimize import leastsq
vars = [KI, A2, x0, y0]
out_V_west = sco.leastsq(residual_V2west, vars, args=(XAvect, YAvect, Vmvect))
print out_V_west

所以如果我跟着你,我一定有类似的东西:

def residual_V2west(vars, XA, YA, donnees):
    KI = vars[0]
    A2 = vars[1]
    x0 = vars[2]
    y0 = vars[3]
    modeleV2 =  ...
    penalization = abs(2.-modeleV2)*10000
    return (donnees-modeleV2 - penalization)

但似乎没有更好:(虽然我尝试使用惩罚值......

4

0 回答 0