2017-06-13 33 views
0

我一直在試圖繪製下面定義的函數的輸出,但無法獲得輸出。我嘗試了幾件事,但每次都得到不同的錯誤。如果有人能幫我解決我做錯的事情,我將不勝感激。ValueError的原因:不允許使用負值尺寸?

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"

什麼可以成爲什麼原因呢?這方面的一些指導將受到高度讚賞。

回答

1

您正在將一個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() 

enter image description here

如果出於某種原因,你需要使用一些功能,僅適用於單數,而不是數組,你可以使用numpy.vectorize的功能轉化爲一個評估輸入陣列的elementwise 。

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() 
+0

很多謝謝。你的回答爲我清除了很多東西。問候 – user8058430

相關問題