【发布时间】:2018-07-18 05:54:36
【问题描述】:
当前我正在尝试使用 scipy 的最小二乘法或它们的任何最小化函数来最小化具有 5 个参数的函数。
我希望 scipy 做的是使用标准最小二乘法最小化某些函数。
我的代码如下:
fitfunc1 = lambda p, xx, yy, zz: -(50000*(xx + (p[0] + p[1])*yy +
p[3]))/(1.67*(-p[2]*yy + zz + p[4]))
errfunc1 = lambda p,x11, xx, yy, zz: fitfunc1(p, xx, yy, zz) - x11
x0 = np.array([0.1, 0.1, 0.1, 0.1, 0.1, 0.1], dtype = float)
res3 = leastsq(errfunc1, x0[:], args=(x1, x, y, z))
其中 x1, x, y, z 都是相同长度的列 numpy 数组,大约 90x1
我目前收到一条错误消息,提示“错误:函数调用的结果不是正确的浮点数组”,我尝试了很多可能性,并尝试按照示例中描述的方式重写它,但没有似乎不起作用。
另外:其实我也想解决这个问题:
最小总和 (f - x1)**2 + (g - x2)**2 其中 f = f(p, x, y, z) 和 g = g(p, x, y, z) 和 x, y, z, x1, y1 都是数据,但试图找到参数 p (6其中)。
目前这在最小二乘中是可能的吗?我曾尝试使用 scipy.minimize,但是当使用 Nedler's Mead 方法完成此操作时,它似乎也不起作用。
这是我当前的代码:
def f(phi, psi, theta, xnot, ynot, znot):
return sum(abs( (-50000*(x[:]+ (psi + phi)*y[:] + xnot)/(1.67*(-
theta*y[:] + z[:] + znot))) - x1[:]) //
+ abs( (-50000*(-x[:]*(psi + phi) + y[:] + theta*(z[:]) + ynot)/(1.67*(-
theta*y[:] + z[:] + znot))) - y1[:]))
x0 = np.array([0.1, 0.1, 0.1, 0.1, 0.1, 0.1], dtype = float)
res3 = leastsq(f, x0[:], args=(x1, y1, x, y, z))
我觉得我犯了一些对更熟悉的人来说可能很明显的错误,但这是我第一次使用 scipy。非常感谢所有帮助。
【问题讨论】:
标签: python numpy scipy least-squares minimize