2017-06-13 10 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)) 

私は、エラーがその理由ことができるもの
"ValueError: sequence too large; cannot be greater than 32"

あるx1np.linspace(0,1,100)ように変化しますか?これに関するいくつかの指針は高く評価されます。

答えて

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を使用することができます。

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

関連する問題