2017-04-13 84 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的值。因此,在列表中使用索引来按顺序获取所需的值。

相关问题