Ptaaq

Untitled

Jun 5th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.46 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2.  
  3. """
  4. Created on Mon Nov 27 13:38:08 2017
  5.  
  6. @author: Ptaaq
  7. """
  8. import numpy as np
  9. import matplotlib.pyplot as plt
  10. from scipy.integrate import odeint
  11.  
  12. """
  13. ### dane wejsciowe ###
  14. """
  15. beta = 1
  16. gamma = 10
  17. N = 1000
  18.  
  19. """
  20. ### warunki początkowe ###
  21. """
  22. x0 = 900
  23. y0 = 90
  24. z0 = 10
  25. init = [x0, y0, z0] #wektor z warunkami początkowymi, co jest przekazywany do funkcji ODEINT
  26.  
  27. ### czas symulacji ###
  28. n = 1001 #liczba punktów
  29. t = np.linspace(0,70,n) #wektor czasu - punkty w których będzie obliczana symulacja
  30.  
  31. wart_zadana = 10
  32. par = [beta,gamma,N,wart_zadana] #parametry
  33.  
  34.  
  35.  
  36. def moj_PID(wartosc_rzeczywista, wartosc_zadana, Kp, Ki, Kd, wartosc_I_pocz = 0, wartosc_epsilon_pocz = 0):
  37. """
  38. argumenty funkcji:
  39. - wartosc_rzeczywista - aktualna wartosc mierzonej/obliczanej zmiennej
  40. - wartosc_zadana - wartosc jaka chcemu uzyskac
  41. - Kp - wspolczynnik wzmocnienia czlonu proporcjonalnego
  42. - Ki - wspolczynnik wzmocnienia czlonu calkujacego
  43. - Kd - wspolczynnik wzmocnienia czlonu rozniczkujacego
  44. """
  45. k = 0
  46. #inicjalizacja
  47. wartosc_I_pop = wartosc_I_pocz
  48. epsilon_pop = wartosc_epsilon_pocz
  49.  
  50. while 1:
  51. epsilon = (wartosc_zadana - wartosc_rzeczywista) #uchyb regulacji
  52. wartosc_P = Kp*epsilon #odpowiedz czlonu proporcjonlanego
  53. wartosc_I = wartosc_I_pop + Ki*epsilon #odpowiedz czlonu calkujacego
  54. wartosc_D = Kd*(epsilon-epsilon_pop) #odpowiedz czlonu rozniczkujacego
  55. #przypisanie poprzednich wartosci
  56. epsilon_pop = epsilon
  57. wartosc_I_pop = wartosc_I
  58. #oczliczanie wyjscia systemu
  59. PID = wartosc_P + wartosc_I + wartosc_D
  60. k += 1
  61. return PID
  62.  
  63. def model(wektor_stanu,t,par): #funkcja model
  64. # print(t)
  65. x = wektor_stanu[0]
  66. y = wektor_stanu[1]
  67. z = wektor_stanu[2]
  68. wart_obliczana = (1/gamma)*y
  69. //*
  70. regulator = moj_PID(wart_obliczana,wart_zadana,1,1,1)
  71. uchyb = wart_zadana - wart_obliczana
  72. if (uchyb > 0):
  73. gamma = gamma + regulator
  74. else:
  75. gamma = gamma - regulator
  76. *//
  77. x_prim = (-beta/N)*x*y
  78. y_prim = (beta/N)*x*y - wart_obliczana
  79. z_prim = (1/gamma)*y
  80. return [x_prim, y_prim, z_prim]
  81.  
  82. solution = odeint(model,init,t,args=(par,))
  83.  
  84. plt.plot(t, solution[:,0],'b', label='x - narazeni')
  85. plt.plot(t, solution[:,1],'g', label='y - nosiciele')
  86. plt.plot(t, solution[:,2],'r', label='z - uodpornieni')
Advertisement
Add Comment
Please, Sign In to add comment