2017-04-13 85 views
-1

我試圖用scipy.optimize.brute功能AttributeError的:「元組」對象有沒有屬性「拉威爾」

import numpy as np 
import scipy.optimize as so 

def root2d(x,a,b): 
    F1 = np.exp(-np.exp(-(x[0]+x[1]))) - x[1]*(b+x[0]**2) 
    F2 = x[0]*np.cos(x[1]) + x[1]*np.sin(x[0]) - a 
    return (F1,F2) 

a = 0.5 
b = 1 

x0 = np.array([-0.1,0.1]) # initial guesses 

rranges = (slice(-4,4,0.2),slice(-4,4,0.2)) 
print(so.brute(root2d,rranges,args=(a,b),finish=so.fmin)) 

,我感到我不明白的錯誤,解決兩個同時非線性方程組:AttributeError: 'tuple' object has no attribute 'ravel'。這是什麼意思,如何修復我的代碼(如果可能的話)?

編輯:完整的錯誤消息

Traceback (most recent call last): 

    File "<ipython-input-2-29b9507fcb99>", line 1, in <module> 
    runfile('.../test') 

    File "C:\WinPython\WinPython-64bit-3.5.2.3\python-3.5.2.amd64\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile 
    execfile(filename, namespace) 

    File "C:\WinPython\WinPython-64bit-3.5.2.3\python-3.5.2.amd64\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile 
    exec(compile(f.read(), filename, 'exec'), namespace) 

    File "../test.py", line 111, in <module> 
    print(so.brute(root2d,rranges,args=(a,b),finish=so.fmin)) 

    File "C:\WinPython\WinPython-64bit-3.5.2.3\python-3.5.2.amd64\lib\site-packages\scipy\optimize\optimize.py", line 2711, in brute 
    indx = argmin(Jout.ravel(), axis=-1) 

AttributeError: 'tuple' object has no attribute 'ravel' 
+1

顯示完整的回溯。 Python解釋器爲您提供儘可能多的信息來幫助您解決問題 - 您爲什麼不把它包含在這裏供其他人使用? –

+0

由於您正在返回2個變量,所以您需要像訪問列表索引時一樣訪問它們。 – Aditya

+0

最小化函數只能有一個輸出。您需要結合F1和F2或分別進行優化。 – kazemakase

回答

2

將返回2個變量F1和F2和使用同一個可變的obj reveive他們(說)這是所謂的元組OBJ,與它相關聯。 2值,F1和F2的值。因此,在列表中使用索引來按順序獲取所需的值。

相關問題