Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.30 KB | None | 0 0
  1. #Oppgave 1c
  2.  
  3. # x''_t(X, t) = (a/m)*(v_w - x'_t(X, t))
  4. # m = 10^(-2) kg, a = 5 * 10^(-5) Ns/m
  5.  
  6. # tenker at x2[i+1] = x2[i] + (h/2)*(f(x2[i])+f(x2[i+1]))
  7. # og videre x1[i+1] = x1[i] + (h/2)*(x2[i]+ x2[i+1])
  8.  
  9. from matplotlib import pyplot as plt
  10. import numpy as np
  11.  
  12. L = 100
  13. m = 1/100
  14. alpha = 5/(10**5)
  15. k = alpha/m
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23. def f(X1, X2, t):
  24. x_deriv = k*(V_w(X1, t)[0] - X2[0])
  25. y_deriv = k*(V_w(X1, t)[1] - X2[1])
  26. return [x_deriv, y_deriv]
  27.  
  28. def V_w(X1, t):
  29. x = X1[0]
  30. y = X1[1]
  31. R = np.sqrt(x*x + y*y)
  32. T = 24*3600 #sek
  33. x_vec = -(2*(np.pi)*R/T)*(y/R)
  34. y_vec= (2*(np.pi)*R/T)*(x/R)
  35.  
  36. return [x_vec, y_vec]
  37.  
  38. def forward_Euler(f, h, X1, X2, t):
  39. x_koord = X2[0] + h*(f(X1, X2, t)[0])
  40. y_koord = X2[1] + h* (f(X1, X2, t)[1])
  41.  
  42.  
  43. return [x_koord, y_koord]
  44.  
  45.  
  46. def explixit_trap_eq1(f, h, X1, X2, t):
  47. X2_ip1 = forward_Euler(f, h, X1, X2, t)
  48. u_ip1 = X2[0] + (h/2)*(f(X1, X2, t)[0] + f(X1, X2_ip1, t)[0])
  49. v_ip1 = X2[1] + (h/2)*(f(X1, X2, t)[1] + f(X1, X2_ip1, t)[1])
  50.  
  51. X2_ip1 = [u_ip1, v_ip1]
  52.  
  53. x_koord = X1[0] + (h/2)*(X2[0]+u_ip1)
  54. y_koord = X1[1] + (h/2)*(X2[1]+v_ip1)
  55. X1_ip1 = [x_koord, y_koord]
  56.  
  57. return X1_ip1, X2_ip1
  58.  
  59. x_list=[]
  60. y_list=[]
  61. n=10000
  62. L=100
  63. x_list.append(L)
  64. y_list.append(0)
  65.  
  66. u_list=[]
  67. v_list=[]
  68. u_list.append(0)
  69. v_list.append(0)
  70.  
  71. for i in range(n):
  72. X1 = [x_list[i], y_list[i]]
  73. X2 = [u_list[i], v_list[i]]
  74.  
  75. X1_ip1, X2_ip1 = explixit_trap_eq1(f, 48*3600/n, X1, X2, 0)
  76.  
  77. x_list.append(X1_ip1[0])
  78. y_list.append(X1_ip1[1])
  79.  
  80. u_list.append(X2_ip1[0])
  81. v_list.append(X2_ip1[1])
  82.  
  83.  
  84. plt.figure(figsize= (20,20))
  85. plt.title('Numerisk løsning av likning 1', fontsize=25)
  86. plt.xlabel('x(t)', fontsize=20)
  87. plt.ylabel('y(t)', fontsize=20)
  88. plt.plot(x_list, y_list)
  89. plt.show()
  90.  
  91.  
  92.  
  93.  
  94. #analytisk løsning
  95. L=100
  96. alpha=5.0E-5
  97. m=1.0E-2
  98. k=alpha/m
  99. w=2*np.pi/(24*3600)*k
  100.  
  101. A=np.array([[0, 0, 1, 0], [0, 0, 0, 1], [0, -w, -k, 0], [w, 0, 0, -k]])
  102.  
  103. lamb, V = np.linalg.eig(A)
  104. X_0 = np.array([L, 0., 0., 0.])
  105. C = np.linalg.solve(V, X_0)
  106.  
  107. t = 48*3600 #sek
  108. X = V.dot(C*np.exp(lamb*t))
  109. print('Prosisjon etter 48 timer, analytisk: ', X[0].real, X[1].real)
  110. print('Posisjon etter 48 timer, numerisk: ', x_list[-1], y_list[-1])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement