Advertisement
Guest User

Untitled

a guest
Dec 19th, 2018
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.24 KB | None | 0 0
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. from scipy.optimize import least_squares, minimize
  4. import random
  5.  
  6. lambda_ch = True
  7. sat_u_ch = False
  8. sat_upri_ch = False
  9.  
  10. x_rand = round(random.uniform(0, 1), 1)
  11. r1 = np.random.rand()*10
  12. r2 = np.random.rand()*10
  13. r3 = np.random.rand()*10
  14.  
  15. def calculate(args):
  16. T = 80
  17. h = 0.01
  18. iterations = int(T / h)
  19. t_arr = np.arange(0, T, h)
  20. x_arr = np.array(t_arr)
  21. y_arr = np.array(t_arr)
  22. e_arr = np.array(t_arr)
  23. u_arr = np.array(t_arr)
  24. e_sum = 0
  25. y = 0.1
  26. x = x_rand
  27. y_need = 0.3
  28. e = y_need - x
  29. u = 0
  30. sat_arr = [-1, 2]
  31. for i in range(iterations):
  32. x_arr[i] = x
  33. y_arr[i] = y
  34. e_arr[i] = e
  35. u_arr[i] = u
  36.  
  37. e = y_need - x
  38. e_sum += + e * h
  39. e_diff = e - e_arr[i]
  40. u = args[0] * e + args[1] * e_sum + args[2] * e_diff / h
  41.  
  42. if sat_upri_ch:
  43. u_prev = 0 if i == 0 else u_arr[i]
  44. change = 0.1
  45. if abs(u_prev - u) > 0.2:
  46. u = u_prev + (change if u_prev < u else -1 * change)
  47.  
  48. if sat_u_ch:
  49. if u < sat_arr[0]:
  50. u = sat_arr[0]
  51. elif u > sat_arr[1]:
  52. u = sat_arr[1]
  53. else:
  54. pass
  55.  
  56. x = x + h * (y)
  57. y = y + h * (np.sin(x) - u * np.cos(x))
  58.  
  59. return e_sum, t_arr, x_arr, y_arr, e_arr, u_arr
  60.  
  61.  
  62. def checkParams(args, max):
  63. for val in args:
  64. if abs(val) > max or val < 0:
  65. return True
  66. return False
  67.  
  68.  
  69. def optimize(args):
  70.  
  71. p_lambda = 1.0
  72. e_sum, a, b, c, e_arr, e = calculate(args)
  73.  
  74.  
  75. return np.sum(abs(e_arr))+p_lambda*(args[0]**2+args[1]**2+args[2]**2)
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82. args = minimize(optimize, np.array([r1, r2, r3], dtype=float), method='BFGS') # BFGS
  83. print(args)
  84. e_sum, t_arr, x_arr, y_arr, e_arr, u_arr = calculate(args.x)
  85.  
  86.  
  87. plt.subplot(311)
  88. plt.grid(True)
  89. plt.plot(t_arr, x_arr, label="y")
  90. plt.plot(t_arr, y_arr, label="x")
  91. plt.legend(loc="upper right")
  92. plt.ylim()
  93. plt.ylabel("stan")
  94.  
  95. plt.subplot(312)
  96. plt.grid(True)
  97. plt.plot(t_arr, e_arr)
  98.  
  99. plt.ylabel("blad")
  100.  
  101. plt.subplot(313)
  102. plt.grid(True)
  103. plt.plot(t_arr, u_arr, label="wejscie")
  104. plt.ylabel("u")
  105.  
  106. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement