基于耦合振荡器的问题

我用欧拉法编写了耦合振子的程序(数值解)。但我拿不到确切的图表。有人能帮我吗?

选择 | 换行 | 行号
  1. K=2
  2. g=9.8
  3. L=8
  4. m=2.0
  5. Tm=10
  6. N=125
  7. h=Tm/float(N)
  8. import matplotlib.pyplot as plt
  9. import numpy as np
  10. import numpy as n1
  11. x1=n1.zeros(N+1)
  12. x2=np.zeros(N+1)
  13. v1=n1.zeros(N+1)
  14. v2=np.zeros(N+1)
  15. t=np.zeros(N+1)
  16. x1[0]=10
  17. x2[0]=0
  18. v1[0]=0
  19. v2[0]=0
  20. i=0
  21. while t[i]<Tm:
  22.     v1[i+1]=(-g/L)*x1[i] - (K/m)*(x1[i]-x2[i])
  23.     v2[i+1]=(-g/L)*x2[i] - (K/m)*(x2[i]-x1[i])
  24.     x1[i+1]=x1[i] + v1[i+1]*h
  25.     x2[i+1]=x2[i] + v2[i+1]*h
  26.     t[i+1]=t[i]+h
  27.     i=i+1
  28. plt.subplot(211)
  29. plt.plot(t,x1)
  30. plt.subplot(212)
  31. plt.plot(t,x2)
  32. plt.show()
# 回答1


这是什么意思。如果您使用的是Python2.x,那么您应该显式地将除法运算转换为浮点数,否则结果可能只是一个整数。

选择 | 换行 | 行号
  1. ## -g/float(L)
  2. v1[i+1]=(-g/float(L))*x1[i] - (K/m)*(x1[i]-x2[i] 

此外,While t[i]语句中的"i"有可能超过N+1的长度,因此您应该对此进行测试。最后,不要将i、l、O等用作单个数字的变量名,因为它们看起来太像数字了,并且为了使您的代码可供其他人阅读,请查看
《Python样式指南》
,这建议变量名称使用带下划线的小写。WHILE语句的替代(仅限逻辑),尽管WHILE语句没有任何错误

选择 | 换行 | 行号
  1. def check_t(t, Tm, N):
  2.     for ctr in range(N+1):
  3.         if t[ctr] >= Tm:
  4.             return
  5.         ## do the calcs 
  6.  
  7.     ##raise error as t[ctr] >= Tm was never hit

标签: python

添加新评论