[关闭]
@XF 2016-11-13T15:58:31.000000Z 字数 2315 阅读 78

第八次作业

作业


背景

一个单摆,在加入其它影响因素后,在一定的初始条件下展现出了混沌性质。我们来进一步观察这一现象。

摘要

我们可以用单摆来创造一个简单的混沌系统。用计算机编程,利用 Euler-Cromer method 来进行计算。绘出单摆的运动轨迹,进行定性分析。

正文

Exercise 3.20

Calculate the bifurcation diagram for the pendulum in the vicinity of FD = 1.35 to 1.5. Make a magnified plot of the diagram (as compared to Figure 3.11) and obtain an estimate of the Feigenbaum delta parameter.
计算在FD = 1.35 - 1.5附近的钟摆的分叉图。 绘制图的放大图(与图3.11相比),并获得Feigenbaum delta参数的估计



代码:

  1. python
  2. P70 3.20
  3. """
  4. import math
  5. import pylab as pl
  6. class Bifurcation_diagram:
  7. def __init__(self, F_D = 1.2, total_time = 60, init_theta = 0.2, q = 0.5, l = 9.8, g = 9.8, Omega_D = 2/3, time_step = 0.04):
  8. self.omega = [0]
  9. self.theta = [init_theta]
  10. self.t = [0]
  11. self.dt = time_step
  12. self.total_time = total_time
  13. self.q = q
  14. self.l = l
  15. self.g = g
  16. self.Omega_D = Omega_D
  17. self.F_D = F_D
  18. def calculate(self):
  19. n = 1
  20. self.tmp_theta = []
  21. self.tmp_F_D = []
  22. m = 100000
  23. self.total_time = 2 * 400 * math.pi / self.Omega_D
  24. self.dt = self.total_time / m
  25. for i in range(m + 1):
  26. self.omega.append(self.omega[i] + ((-self.g / self.l) * math.sin(self.theta[i]) - self.q * self.omega[i] + self.F_D * math.sin(self.Omega_D * self.t[i])) * self.dt)
  27. self.theta.append(self.theta[i] + self.omega[i + 1] * self.dt)
  28. self.t.append(self.dt * (i + 1))
  29. if self.theta[i + 1] < -math.pi:
  30. self.theta[i + 1] = self.theta[i + 1] + 2 * math.pi
  31. if self.theta[i + 1] > math.pi:
  32. self.theta[i + 1] = self.theta[i + 1] - 2 * math.pi
  33. #$\Omega_Dt=2n\pi$
  34. if abs(self.t[i + 1] - 2 * n * math.pi / self.Omega_D) < self.dt / 2 :
  35. if i > 75000:
  36. if round(self.theta[-1], 4) not in self.tmp_theta:
  37. self.tmp_theta.append(round(self.theta[-1], 4))
  38. self.tmp_F_D.append(self.F_D)
  39. n += 1
  40. bif_F_D = []
  41. bif_theta = []
  42. len_bif_theta = 0
  43. F_k = []
  44. k = []
  45. loop_i = True
  46. step = 300
  47. for i in range(step + 1):
  48. F_D = round(1.35 + 0.15 / step * i, 4)
  49. start = Bifurcation_diagram(F_D)
  50. start.calculate()
  51. bif_F_D += start.tmp_F_D
  52. bif_theta += start.tmp_theta
  53. print(start.tmp_theta, i, "/", step)
  54. temp_len_bif_theta = len(start.tmp_theta)
  55. if len_bif_theta != temp_len_bif_theta:
  56. F_k.append(F_D)
  57. k.append(temp_len_bif_theta)
  58. len_bif_theta = temp_len_bif_theta
  59. pl.plot(bif_F_D, bif_theta, 'k.')
  60. pl.xlabel('$F_D$', fontsize=20)
  61. pl.ylabel('$\\theta$(radians)', fontsize=20)
  62. pl.title('$\\theta$ versus $F_D$', fontsize=20)
  63. pl.show()
  64. for i in range(len(F_k)):
  65. print("F_k, k的值:", F_k[i], ",", k[i])

图像:

结论

对于不同的外界影响,产生混沌的图像有较大区别,且混沌的产生地方也显得无规律可循,不能单一的表示出来。
但是对于不同的外界影响来说,混沌都是在一定时间之后才产生的,但是不同的外界影响对混沌的范围有影响.

致谢

感谢张盛同学在程序方面的指导,感谢蔡浩老师的教导及《计算物理》。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注