2017-04-23 18 views
0

私のスクリプトに問題がありプロットが表示されません。 プロットは、ビーム全体のx座標の関数としてビームの偏向を表示する必要があります。私は文を作ることができるかどうかはわからない:「X [i]の> [V]」xが与えられていない場合は...BeamDeflection Plot

import numpy as np #Imports NumPy 
import matplotlib.pyplot as plt 

def beamPlot(beamLength, loadPositions, loadForces, beamSupport): 

    l=beamLength  #Scalar 
    a=loadPositions #Vector 
    W=loadForces  #Vector 
    x=np.array(range(0,l)) 

    E=200*10**9  #Constant [N/m^2] 
    I=0.001   #Constant [m^4] 


#Makes an empty vector with the same size as x 
    y=np.empty_like(x) 

    for i in range(np.size(x)): #Continues as long as the vector x 
     for v in range(np.size(a)): 

      if a[v]==[ ] and W[v]==[ ]: 
       return np.zeros(np.size(x)) 

      elif beamSupport=="both" and x[i]<a[v]: 
       y[i]=np.sum(((W[v]*(l-a[v])*x[i])/(6*E*I*l))*(l**2-x[i]**2-(l-a[v])**2)) 
      elif beamSupport=="both" and x[i]>=a[v]: 
       y[i]=np.sum(W[v]*a[v]*(l-x[i])/(6*E*I*l)*(l**2-(l-x[i])**2-a[v]**2))       
      elif beamSupport=="cantilever" and x[i]<a[v]: 
       y[i]=np.sum((W[v]*x[i]**2)/(6*E*I)*(3*a[v]-x[i])) 
      elif beamSupport=="cantilever" and x[i]>=a[v]: 
       y[i]=np.sum((W[v]*a[v]**2)/(6*E*I)*(3*x[i]-a[v])) 

     deflection=y 


    plt.ylim([0,10000]) 
    plt.xlim([0,l]) 
    plt.title("Beam deflection") 
    plt.plot(x, deflection) 
plt.show() 
+0

コードの書式を修正してください。すべてのコードを選択し、 'ctrl-k'を押して適切に字下げします。 – Craig

+0

固定、ありがとう:) –

+0

私は答えを追加しましたが、あなたがその関数をどのように呼び出すかの値を取らなければなりませんでした。私の答えが助けにならない場合は、 'beamPlot()'を呼び出すために使用している値をサンプルに追加してください。 – Craig

答えて

0

あなたの配列xrange(0,l)から整数のリストを使用して作成されましたこれは、配列内の要素がタイプintであることを意味します。配列np.epty_like()を使用してy配列を作成します。つまり、タイプがintであることを意味します。負荷に大きな値を使用していない限り、計算によって作成されたfloat値はintに変換されると0に丸められるので、プロットはy = 0のフラットラインになります。

あなたはdtype=floatを追加することによって作成されたときにyは、浮動小数点値が含まれている必要があることを指定することで、この問題を解決することができますので、あなたはまた、plt.ylim(0,10000)を削除し、代わりにmatplotlibのは、あなたのy軸を自動スケールさせてください

y=np.empty_like(x, dtype=float) 

あなたの剛性を考慮して、妥当な荷重値であれば、ずれることはほとんどありません。

+0

ありがとうございました。それは今働きます!フロートタイプを追加すると良いアドバイス! :D –

+0

@JulieDyrvigCarlsson - これは助けてうれしいです。チャンスがあれば、アップホートして回答を受け入れてください(灰色のチェックマーク)。 – Craig

+0

完了!ありがとう:) –