Advertisement
Guest User

Untitled

a guest
Dec 19th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. from scipy.optimize import least_squares, minimize
  4.  
  5.  
  6. def calculate(args):
  7. T = 30
  8. h = 0.01
  9. a=0.7
  10. b=0.8
  11. c=3
  12. z=-0.4
  13. iterations = int(T / h)
  14. t_arr = np.arange(0, T, h)
  15. x_arr = np.array(t_arr)
  16. y_arr = np.array(t_arr)
  17. z_arr=np.array(t_arr)
  18. e_arr = np.array(t_arr)
  19. u_arr = np.array(t_arr)
  20. e_sum = 0
  21. x_arr[0] = 1
  22. y_arr[0] = 1
  23. y_need = 0
  24. e_arr[0] = 0
  25. u_arr[0] = 0
  26. set_up=2
  27. set_down=-1
  28.  
  29. for i in range(iterations-1):
  30. e_arr[i + 1] = y_need - x_arr[i]
  31. e_sum += + e_arr[i] * h
  32.  
  33. u_arr[i + 1] = args[0] * e_arr[i + 1] + args[1] * e_sum + args[2] * ((e_arr[i + 1] - e_arr[i]) / h)
  34. if u_arr[i+1]>set_up:
  35. u_arr[i+1]=set_up
  36. elif u_arr[i+1]<set_down:
  37. u_arr[i+1]=set_down
  38.  
  39. x_arr[i + 1] = x_arr[i] + h * (9*u_arr[i+1]-(z_arr[i]*(a+9))-(x_arr[i]*(a+1)))
  40. y_arr[i+1] = y_arr[i]+ h * (z_arr[i])
  41. z_arr[i + 1] = z_arr[i] + h * (x_arr[i])
  42.  
  43. return e_sum, t_arr, x_arr, y_arr,z_arr, e_arr, u_arr
  44.  
  45.  
  46. def optimize(args):
  47. e_sum, a, b, c,d, e_arr, e = calculate(args)
  48. lam=1.0
  49. return np.sum(abs(e_arr))+lam*(args[0]**2+args[1]**2+args[2]**2)
  50.  
  51.  
  52. args = minimize(optimize, np.array([0.0, 0.0, 0.0], dtype=float), method='BFGS')
  53. print(args)
  54. e_sum, t_arr, x_arr, y_arr,z_arr, e_arr, u_arr = calculate(args.x)
  55.  
  56. plt.subplot(311)
  57. plt.grid(True)
  58. plt.plot(t_arr, x_arr, label="x")
  59. plt.plot(t_arr, y_arr, label="y")
  60. plt.legend(loc="upper right")
  61. plt.ylim()
  62. plt.ylabel("stan")
  63.  
  64. plt.subplot(312)
  65. plt.grid(True)
  66. plt.plot(t_arr, e_arr)
  67.  
  68. plt.ylabel("blad")
  69.  
  70. plt.subplot(313)
  71. plt.grid(True)
  72. plt.plot(t_arr, u_arr, label="wejscie")
  73. plt.ylabel("u")
  74.  
  75. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement