Advertisement
Guest User

Untitled

a guest
Nov 21st, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.97 KB | None | 0 0
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3.  
  4. y_target0 = 50
  5. y_target1 = 50
  6. y_target2 = 50
  7.  
  8.  
  9. def y_target(t):
  10.     if t < 25:
  11.         return y_target0
  12.     elif t < 50:
  13.         return y_target1
  14.     else:
  15.         return y_target2
  16.  
  17.  
  18.  
  19. def init_arr(x0, shape):
  20.     arr = np.zeros(shape)
  21.     arr[0] = x0
  22.     return arr
  23.  
  24.  
  25. def x1_prim(x1, x2, u):
  26.     return -x1 + x2 + u
  27.  
  28.  
  29. def x2_prim(x1, x2, x3):
  30.     return x1 -(2 * x2) + x3
  31.  
  32.  
  33. def x3_prim(x2, x3):
  34.     return x2 - x3
  35.  
  36.  
  37. def error(y, t):
  38.     return y_target(t) - y
  39.  
  40.  
  41. def reg(e, e_integral):
  42.     return k_p * e + k_i * e_integral
  43.  
  44.  
  45. h = 0.01
  46. t0 = 0
  47. T = 10
  48. x1_0 = 0
  49. x2_0 = 0
  50. x3_0 = 0
  51.  
  52. k_p = 0.05
  53. k_i = 6
  54.  
  55.  
  56. t_arr = np.arange(t0, T, h)
  57. x1_arr = init_arr(x1_0, np.shape(t_arr))
  58. x2_arr = init_arr(x2_0, np.shape(t_arr))
  59. x3_arr = init_arr(x3_0, np.shape(t_arr))
  60. e_arr = init_arr(error(x1_arr[0], t_arr[0]), np.shape(t_arr))
  61. e_sum = e_arr[0] * h
  62. u_arr = init_arr(reg(e_arr[0], e_sum), np.shape(t_arr))
  63.  
  64.  
  65. for i in range(t_arr.shape[0] - 1):
  66.     x1_arr[i + 1] = x1_arr[i] + h * x1_prim(x1_arr[i], x2_arr[i], u_arr[i])
  67.     x2_arr[i + 1] = x2_arr[i] + h * x2_prim(x1_arr[i + 1], x2_arr[i], x3_arr[i])
  68.     x3_arr[i + 1] = x3_arr[i] + h * x3_prim(x2_arr[i + 1], x3_arr[i])
  69.  
  70.     e_arr[i + 1] = error(x1_arr[i + 1], t_arr[i + 1])
  71.     e_sum = e_sum + e_arr[i + 1] * h
  72.     u_arr[i + 1] = reg(e_arr[i + 1], e_sum)
  73.  
  74.  
  75. f, axes = plt.subplots(3, sharex='all')
  76.  
  77. y_target_arr = np.ones(t_arr.shape)
  78.  
  79. for i in range(y_target_arr.shape[0]):
  80.     y_target_arr[i] = y_target(t_arr[i])
  81.  
  82.  
  83. axes[0].plot(t_arr, x1_arr, label='x1', color='orange')
  84. axes[0].plot(t_arr, x2_arr, label='x2', color='green')
  85. axes[0].plot(t_arr, x3_arr, label='x3, y', color='blue')
  86. axes[0].plot(t_arr, y_target_arr, label='target y', color='red')
  87. axes[1].plot(t_arr, e_arr, label='error')
  88. axes[2].plot(t_arr, u_arr, label='U')
  89.  
  90. for ax in axes:
  91.     ax.grid(True)
  92.     ax.legend(loc='upper right')
  93.     ax.set_xlabel('Czas')
  94. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement