2017-07-15 89 views
0

我有兩個函數,它們的距離(y_1-y_2)我需要最小化才能獲得兩者之間的最佳因子(dfactor),所以我可以將它們繪製在一起並儘可能地適合它們。與文檔中的示例不同之處在於,在這種情況下,我可以計算差異,因此我具有最小化的函數。隨着scipy.optimize.minimize_scalar我使用的語法如下:最小化n個函數

def chi(dfactor): 
    for i in range(0, n): 
     return abs(dfactor*y_1[i] - y_2[i]) 

res = minimize_scalar(chi) 
print res.x 

現在res.x是不是最適合兩個地塊的因素。我期望得到一個n個元素的數組,它們之間非常相似,我可以獲得我需要的單個dfactor。但我不確定minimize_scalar是這樣的。

檢查desired result,我計算紅色點與藍色曲線中相應點之間的差異(這裏表示爲譜線,因爲它是一個譜圖),以便儘可能好地對它們進行重疊繪圖。

回答

0

在一個函數中不能有多個返回語句,只有第一個會被調用。相反,你需要返回錯誤的一些彙總,比如根指quared錯誤:

# Convert to numpy arrays 
y_1 = np.asarray(y_1) 
y_2 = np.asarray(y_2) 

def chi(dfactor): 
    residual = dfactor * y_1 - y_2 
    return np.mean(residual ** 2) 

res = minimize_scalar(chi) 
print res.x 
+0

所以我要調用的函數在一個循環_outside_功能。然後我需要'chi(y1,y2,dfactor)',但是在那種情況下我應該如何使用'minim_scalar'函數? – cwasdwa

+0

不,只要你想找到一個'dfactor',我的代碼應該基本上*爲你*。 –

+0

我得到一個'TypeError:無法乘以'float'類型的非int序列,因爲'y_1'和'y_2'是n個元素的列表。 – cwasdwa