剩余至少方形scipy.optimize.leastsq(),最佳解决方案

时间:2013-10-16 01:18:47

标签: python scipy mathematical-optimization

我知道scipy.optimize中有一个最小二乘的例子,但是我在剩余功能上遇到了三天以上的麻烦。我决定完全描述这个问题。我通过网站发现了一些其他类似的问题,但我无法在程序上找到它并且在我的情况下真的很困惑。我无法正确创建适合scipy.optimize.leastsq 残差的剩余函数。我真的很喜欢..

这个问题恰好是A * x = b问题。让我稍后解释一下:

INPUT:

  • y - 例如:y1 = dot(delta_1,array([x2,x5,x6]))
  • x - 8个未知数[x2,x4,x5,x6,x7,x10,x13,x16]
  • delta - length。

步骤:

  • 功能 f(x_m,delta_n_m),n - 行,m - cols。
  • 残差 | b_n - f(x,delta)| ^ 2
  • 使用scipy.optimize.leastsq(残差,x0,arg(delta))最小化残差

我还有函数,残差,最小化器和INPUTS,但是,我真的与剩余函数叠加。

找到:   - (x2,x4,x5,x6,x7,x10,x13,x16),所以,我把所有的值放在代码中。

import numpy as np
from scipy.optimize import leastsq


def function(x,delta):
        return dot(delta, x)

def residual(x, delta, y):
       error = y - dot(delta, x)
       return sum(error**2)


def main():    


  # INPUTS
  # Unknown values 
  x = [x2, x4, x5, x6, x7, x10, x13, x16]

  delta = np.array([1.76762035, 2.04349174, 1.25674742], 
                   [0.94873891, 2.01859342, 1.46348023], 
                   [0.83678402, 1.12030343, 0.92516861],
                   [1.43, 2., 2., 1.57])

  y = np.array([0.8353410485015903, 0.73620941924970962, 
                0.45428639186344633, 1.6180418445100002]

  x_init = np.zeros(len(x))

  result = leastsq(residual, x, args=(delta,y) )

  print result[0]

if __name__ == '__main__':
      main()

1 个答案:

答案 0 :(得分:1)

leastsq期望残差函数只返回残差,即:

def residual(x, delta, y):
    return y - dot(delta, x)