Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 最小二乘scipy.optimize.leastsq()的残差,最优解_Python_Scipy_Mathematical Optimization - Fatal编程技术网

Python 最小二乘scipy.optimize.leastsq()的残差,最优解

Python 最小二乘scipy.optimize.leastsq()的残差,最优解,python,scipy,mathematical-optimization,Python,Scipy,Mathematical Optimization,我知道scipy.optimize中有一个最小二乘法的例子,但我在残差函数方面遇到了实际问题,这已经有三天多了。我决定全面描述这个问题。我在网站上发现了一些其他类似的问题,但我无法真正通过编程解决,在我的案例中我真的很困惑。我无法正确创建适合scipy.optimize.leastsq残差的残差函数。我真的很累 这个问题就是A*x=b问题。让我简单解释一下: 输入: import numpy as np from scipy.optimize import leastsq def funct

我知道scipy.optimize中有一个最小二乘法的例子,但我在残差函数方面遇到了实际问题,这已经有三天多了。我决定全面描述这个问题。我在网站上发现了一些其他类似的问题,但我无法真正通过编程解决,在我的案例中我真的很困惑。我无法正确创建适合scipy.optimize.leastsq残差的残差函数。我真的很累

这个问题就是A*x=b问题。让我简单解释一下:

输入:

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()
  • y-例如:y1=点(δ_1,数组([x2,x5,x6]))
  • x-8个未知数[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()
  • 函数f(x_m,delta_n_m),n行,m列
  • 残差| b|n-f(x,delta)^2
  • 使用scipy.optimize.leastsq(残差,x0,arg(增量))最小化残差
我有函数,残差,极小值和输入,但是,我真的用残差函数叠加

查找: -(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()

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

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

你好,克里斯蒂安,谢谢!我对此进行了测试,但是,如果不更改delta的形状,您会如何修复
ValueError:对象未对齐??顺便说一下,在代码的开头,应该禁用x factor,因为它是未知的。请修复您的代码,使其可运行,然后我将能够查看错误消息。