我正在使用最小二乘法来拟合很多参数,但是,结果并不令人惊讶,我认为这可能是由于最小化。事实上,当我修改初始化条款时,结果是不同的......
我第一次尝试使用命令“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)
但似乎没有更好:(虽然我尝试使用惩罚值......