Simulation temporelle
CODE | FONCTION |
|---|---|
| Calcule les points (t en abscisse et s en ordonnée) pour le tracé de la réponse temporelle à un échelon unitaire, puis trace cette réponse temporelle. |
| Calcule les points (t en abscisse et s en ordonnée) pour le tracé de la réponse temporelle à un échelon de 3, puis trace cette réponse temporelle. |
| Précise la durée de simulation (alors que dans les cas précédents, elle est déterminée automatiquement). |
Fonction pour déterminer le temps de réponse
## Définition de la fonction temps de réponse
def tr(H) :
![]()
[t,s]=control.step_response(H)
![]()
![]()
sfinale=s[-1]
![]()
index_tr5_possible=np.where((s>1.05*sfinale)|( s<0.95*sfinale))[0] #identification des index pour lesquelles la réponse indicielle s>1.05×sfinale OU <0.95×sfinale
![]()
index_tr5=index_tr5_possible[-1] #récupération du dernier index
![]()
tr5=t[index_tr5] #recherche du temps (le tr5%) situé à l'index index_tr5
![]()
print("tr5% =",format(tr5, '.2g'),"s") #renvoie le temps de réponse avec 2 chiffres significatifs
Exemple d'utilisation de cette fonction :
F=control.tf([1],[83,5.5,1])
tr(F)
Fonction pour déterminer les dépassements
## Définition de la fonction dépassement
def Dep(H) :
![]()
[t,s]=control.step_response(H)
![]()
![]()
sfinale=s[-1]
![]()
![]()
# calcul des dépassements
![]()
index_dépassementmax=scipy.signal.argrelextrema(s, np.greater) #détermine les index des max
![]()
index_dépassementmin=scipy.signal.argrelextrema(s, np.less) #détermine les index des min
![]()
index_dépassement=index_dépassementmax[0].tolist()+index_dépassementmin[0].tolist() #convertit les 2 tableaux précédents en liste et les additionne
![]()
index_dépassement.sort() #trie la liste index.dépassement par ordre croissant
![]()
dépassementA=[]
![]()
dépassementR=[]
![]()
for i in index_dépassement:
![]()
![]()
dépassementA.append(abs(s[i]-sfinale)) #détermine la valeur des dépassements absolus
![]()
![]()
dépassementR.append(abs(s[i]-sfinale)/delta_s*100) #détermine la valeur des dépassements relatifs
![]()
![]()
#supprime les dépassements <1%
![]()
dépassementR=np.array(dépassementR) #convertit la liste en tableau
![]()
index_dépassement_faible=np.where(dépassementR<1)
![]()
dépassementR=dépassementR.tolist() #convertit le tableau en liste
![]()
del dépassementA[min(index_dépassement_faible[0]):]
![]()
del dépassementR[min(index_dépassement_faible[0]):]
![]()
![]()
print("Nombre de dépassement > 1%: ",len(dépassementR))
![]()
for k in range(len(dépassementR)):
![]()
![]()
print("D"+str(k+1),"=",format(dépassementA[k], '.2g')," D"+str(k+1),"% =",format(dépassementR[k], '.2g'),"%")
Exemple d'utilisation de cette fonction :
F=control.tf([1],[83,5.5,1])
Dep(F)