2013-10-16 87 views
0

我知道有在scipy.optimize最小二乘的一個例子,但是我有真正的麻煩與殘留功能超過三天。我決定完全描述這個問題。我通過該網站發現了一些其他類似的問題,但我無法真正弄清楚它在程序中的位置,並且對我的情況非常困惑。我無法正確創建適合scipy.optimize.leastsq 剩餘的剩餘功能。我真的很...殘餘爲最小二乘scipy.optimize.leastsq(),最優解

這個問題正好是A * x = b的問題。讓我不久解釋:

INPUT:

  • ÿ - 例如:Y1 =點(delta_1,陣列([X2,X5,X6))
  • X - 8個未知數的[X2 ,x4,x5,x6,x7,x10,x13,x16]
  • delta - 長度。

步驟:

  • 函數 F(x_m,delta_n_m),正 - 行,米 - COLS。
  • 殘餘 | B_N - F(X,三角洲)|^2
  • 最小化剩餘使用scipy.optimize.leastsq(殘留,X0,精氨酸(△))

我有功能,剩餘,最小化和輸入,但是,我真的與我的剩餘功能疊加。

發現: - (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

leastsq預計剩餘函數返回只剩餘,即:

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

您好基督教,謝謝!我測試過,但是,如果不更改Δ的形狀,您會如何解決「ValueError:對象不對齊」的問題?順便說一下,在代碼的開頭,x因素應該被禁用,因爲它是未知的 – Spider

+2

請修復您的代碼,以便它是可運行的,然後我將能夠看到錯誤消息。 –