Advertisement
Guest User

Untitled

a guest
Mar 26th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.67 KB | None | 0 0
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. a2 = -3.35
  4. a1 = 3.15
  5. a0 = -0.9
  6.  
  7.  
  8. x = []
  9. u = 1
  10.  
  11. def odpSkok(x0, u, A, B, C, D):
  12. x = []
  13. y = []
  14. for i in range(20):
  15. xk = A*x0 + B*u
  16. yk = C*xk + D*u
  17. x0 = xk
  18.  
  19. #x.append(xk)
  20. y.append(yk.item(0))
  21. return y
  22.  
  23.  
  24.  
  25. x0 = np.matrix([0,0,0])
  26. x0 = np.transpose(x0)
  27. Aa = np.matrix([[-a2, -a1, -a0], [1, 0, 0], [0, 1, 1]])
  28. Ba = np.transpose(np.matrix([1, 0, 0]))
  29. Ca = np.matrix([1, 1, 1])
  30. Da = [0]
  31. #x0 = np.zeros(3)
  32. y = odpSkok(x0, 1, Aa, Ba, Ca, Da)
  33.  
  34. def Riccatiego(A, B, Q, R):
  35. Pp = 0*np.identity(3)
  36. P = Pp
  37. for i in range(10):
  38. P = Q + np.transpose(A)*(Pp - Pp*B*(R + np.transpose(B)*P*B)**(-1)*
  39. np.transpose(B)*P)*A
  40. Pp = P
  41.  
  42. return P
  43.  
  44.  
  45. def sterownik(c1, c2, A, B):
  46. Q = c1*np.identity(3)
  47. R = c2
  48. P = Riccatiego(A, B, Q, R)
  49.  
  50. F = (R + np.transpose(B)*P*B)**(-1)*np.transpose(B)*P*A
  51. return F
  52. pass
  53.  
  54. plt.figure(1)
  55.  
  56. plt.subplot(221)
  57. plt.plot(y)
  58. plt.title("bez sterownika")
  59. #plt.show()
  60.  
  61. F = sterownik(1, 1, Aa, Ba)
  62. Anowe = Aa - Ba*F
  63. ynowe = odpSkok(0, 1, Anowe, Ba, Ca, Da)
  64. plt.subplot(223)
  65. plt.plot(ynowe)
  66. plt.title("c1 = 1 c2 = 1")
  67.  
  68.  
  69. def uk(x0, u, A, B, C, D, F):
  70. x = []
  71. y = []
  72. uk = []
  73. print F
  74. for i in range(20):
  75. xk = A*x0 + B*u
  76. #yk = C*xk + D*u
  77. x0 = xk
  78. uk_buf = -np.dot(F,xk)
  79.  
  80.  
  81. #x.append(xk)
  82. #uk.append(uk_buf)
  83. uk = np.append(uk, uk_buf)
  84. print xk
  85. return uk
  86.  
  87. uk = uk(x0, 1, Anowe, Ba, Ca, Da, F)
  88. plt.subplot(224)
  89. plt.plot(uk)
  90. plt.title("uk")
  91. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement