Simulation temporelle

CODE

FONCTION

[t,s]=control.step_response(A)

plt.plot(t,s)

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.

[t,s]=control.step_response(3*A)

plt.plot(t,s)

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.

t = np.linspace(0,10,200)

[t,s]=control.step_response(A,t)

plt.plot(t,s)

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)