2016-11-10 33 views
0

ValueError異常:陣列的具有多於一個元素的真值是不明確的。使用a.any()或a.all()錯誤想要繪製在python一個簡單的函數

我得到取決於積分方法不同的錯誤。該功能在給定單個值時正常工作。

import matplotlib.pyplot as plt 
import scipy as sp 
import numpy as np 


def mass_enc(R): 
    def int(r): return r**2 * r 
    return sp.integrate.quad(int, 0, R) 

print(mass_enc(10)) 

t1 = np.arange(0.1, 5.0, 0.1) 
plt.plot(t1, mass_enc(t1)) 
+0

一些意見:如果你問在matplotlib繪製,使用相應的標籤。由於這裏的錯誤與繪圖無關,請移除繪圖部分。如果您報告錯誤,請報告它發生的位置和文件(在這種情況下,它會是numpy)。 – ImportanceOfBeingErnest

回答

1

問題是,您打電話給sp.integrate.quad並將數組作爲參數。雖然一些功能實際上允許,但是quad不允許。所以你需要分別提供每個值R。這可以通過map(function, iterable)完成。所以這裏是你如何做到的。

import matplotlib.pyplot as plt 
import scipy as sp 
import numpy as np 

def inte(r): 
    return r**2 * r 

def mass_enc(R): 
    return sp.integrate.quad(inte, 0, R)[0] 

print(mass_enc(10)) 

t1 = np.arange(0.1, 5.0, 0.1) 
m = map(mass_enc, t1) 
plt.plot(t1, m) 
plt.show() 

記住,你應該從未呼叫蟒蛇int任何對象,因爲int是Python中的基本類型,這樣做會導致很多麻煩。

+0

感謝您的回覆。這會給我ValueError:x和y必須具有相同的第一維。看起來很奇怪 – Tom

+0

再次,錯誤發生在哪裏?這可能是因爲你使用的是舊版本的matplotlib,它不能處理元組列表。嘗試修改'mass_enc'函數,例如我在上面的代碼中做的,將'[0]'放在'quad()'調用之後。 – ImportanceOfBeingErnest