2016-07-01 6 views
3

問題があります。私はdの異なる値の関数をプロットしようとしています。私はとdを定義している:定義済みの関数をプロットしようとしています

d = np.arange(0.0, 100.0, 0.01) 

しかし、私はまだ同じエラーを取得:

TypeError: only length-1 arrays can be converted to Python scalars

これは私のスクリプトです:

import pylab 
import numpy as np 
import scipy 
import matplotlib.pyplot as plt 
import math 
from scipy.optimize import curve_fit 
import numpy 

def teo_function(d): 
    return 2*math.pi*math.sqrt(((1**2)/(12+d**2))/9.81*d) 

d = np.arange(0.0, 100.0, 0.01) 
T = teo_function(d) 
pylab.plot (d,teo_function(d), 'bo', d, teo_function(d), 'k') 

pylab.show() 

おかげで助けをすべて。

答えて

2

あなたは配列で動作するようにあなたの関数teo_functionをベクトル化する必要があります。

import numpy as np 
import matplotlib.pyplot as plt 
import math 

def teo_function(d): 
    return 2*math.pi*math.sqrt(((1**2)/(12+d**2))/9.81*d) 
vecfunc = np.vectorize(teo_function) 

d = np.arange(0.0, 100.0, 0.01) 
T = vecfunc(d) 
plt.plot (d, T, 'bo', d, T, 'k') 
plt.show() 

enter image description here

+0

聖なるキリスト!ありがとう! –

2

機能teo_functionがスカラーではなく、アレイ上で動作しますmath.sqrtを使用しています。 numpy配列を使用する場合は、numpyに含まれている数学演算を使用してください。 numpy.sqrt。 Numpyはnumpy配列での使用に最適化されたmath.moduleで私が知っているすべての機能と同等です。

Numpyの関数は、スカラー、リスト、タプルなどのタイプでも機能します。

例:

def teo_function(d): 
    return 2*np.pi*np.sqrt(((1**2)/(12+d**2))/9.81*d) 
1

もう一つの方法。あなたの関数がリストを返すようにするには

def teo_function(ds): 
    return [2*math.pi*math.sqrt(((1**2)/(12+d**2))/9.81*d) for d in ds] 
関連する問題