2016-11-10 90 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