2017-04-23 123 views
0

我遇到了脚本没有显示剧情的问题。 绘图必须显示光束的偏转作为整个光束的x坐标的函数。我不知道如果我能做出声明: “×[I]> A [V]” 如果不提​​供X ...BeamDeflection剧情

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

你的阵列x与来自range(0,l)整数列表创建,这意味着阵列中的元素的类型为int。您使用np.epty_like()创建了y阵列,这意味着它也具有int类型的元素。除非您使用巨大的负载值,否则当您将计算创建的浮点值转换为int时,四舍五入为0,因此该图在y = 0时为扁平线。

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

你也应该删除plt.ylim(0,10000),而是让matplotlib自动缩放你的y轴,因为:

您可以通过指定y应该包含浮点值时,它是通过将dtype=float创建解决这个问题对于任何合理的负载值(考虑到您的刚度),位移可能不会很大。

+0

非常感谢。它现在有效!非常好的建议,添加浮动类型! :D –

+0

@JulieDyrvigCarlsson - 我很高兴这有帮助。请记住在有机会的时候注意并接受答案(灰色复选标记)。 – Craig

+0

完成!谢谢 :) –