我一直试图绘制下面定义的函数的输出,但是无法获得输出。我尝试了几件事,但每次都会遇到不同的错误。如果有人可以帮助我解决我做错了什么,我将不胜感激。
import matplotlib.pyplot as plt
%matplotlib inline
import math
import sympy as sym
x = sym.symbols('x',positive = True)
lambd = 4
a= 3
def f(x):
return lambd**a * x**(a-1) * sym.exp(-lambd*x) / math.factorial(a-1)
x1 = np.linspace(0,1,10)
plt.plot(x1,f(x1))
如果我将x1
更改为np.linspace(0,1,100)
,则错误为
"ValueError: sequence too large; cannot be greater than 32"
可能是什么原因?对此的一些指导将受到高度赞赏。
答案 0 :(得分:2)
您正在将一个numpy数组x1
传递给函数f
。这个函数里面有sympy.exp()
的问题,它不了解如何处理数组,因为它只适用于符号和数字。
最简单的方法是使用numpy.exp
代替。
import matplotlib.pyplot as plt
import numpy as np
import math
lambd = 4
a= 3
def f(x):
return lambd**a * x**(a-1) * np.exp(-lambd*x) / math.factorial(a-1)
x1 = np.linspace(0,1,10)
plt.plot(x1,f(x1))
plt.show()
如果由于某种原因,您需要使用仅适用于单个数字而不是数组的函数,则可以使用numpy.vectorize
将函数转换为以元素方式计算输入数组的函数。
import matplotlib.pyplot as plt
import sympy as sym
import numpy as np
import math
lambd = 4
a= 3
def f(x):
return lambd**a * x**(a-1) * sym.exp(-lambd*x) / math.factorial(a-1)
fv = np.vectorize(f)
x1 = np.linspace(0,1,10)
plt.plot(x1,fv(x1))
plt.show()