# Systèmes du premier ordre/Utiliser SCILAB pour les calculs

Scilab est un logiciel de calculs numériques. Parmi les choses qu’il sait très bien faire se trouve le calcul sur les fonctions de transfert. Il possède son Wikibook intitulé Scilab que nous vous encourageons à parcourir pour apprendre à l’utiliser. En effet nous n'aborderons pas sa présentation générale ici, mais simplement le cas très particulier des fonctions de transfert du premier ordre.
Nous n'allons pas détailler l’utilisation de Scilab dans ce chapitre. Reportez-vous au Wikibook intitulé Scilab pour cela. La seule chose que nous rappelons est que l'ajout d'un point virgule en fin de ligne n’est pas obligatoire et a comme objet simplement de supprimer l’affichage des valeurs calculées. Si au contraire vous voulez afficher, retirer le point virgule.

## Comment décrire une fonction de transfert en Scilab

À ce point seuls les fonctions de transfert du premier ordre sont connues. Nous avons vu qu’elles sont constituées par un quotient de deux polynômes du premier ordre. Commençons donc par détailler ce qu'est un polynôme en Scilab.

### Construire un polynôme en Scilab

Pour construire un polynôme on utilise la fonction "poly" de scilab. Il existe au moins trois façons de faire cela :
* polyn=poly([1 2],'p','c') qui affiche polyn=1+2p On voit que le premier paramètre est une matrice qui contient les coefficients (d'où la présence de 'c' parmi les paramètres). Le deuxième paramètre est le nom de la variable du polynôme.
* polyn=poly([-0.5],'p') qui affiche polyn=0.5+p. Le seul paramètre qui est passé dans la matrice est la racine du polynôme.
* utiliser les opérations normales à partir d'un polynôme de départ : p=poly(0,'p');polyn=2*p+1
Voir aide sur poly.
S'il est possible de diviser un polynôme par un autre pour réaliser une fonction de transfert, il faut plutôt utiliser une fonction pour construire la fonction de transfert.

### Construire la fonction de transfert

La construction de la fonction de transfert se fait avec syslin.
La fonction de transfert générale ${\underline {H}}(p)={\frac {K}{1+p\tau }}$ est impossible à utiliser en Scilab sans donner des valeurs numériques à K et à $\tau$. Scilab est un logiciel de calcul numérique et non pas symbolique.
Voici un petit programme qui réalise numériquement cette fonction de transfert :
Chacun aura reconnu la fonction de transfert ${\underline {H}}(p)={\frac {10}{1+2p}}$ qui sera affichée ${\underline {H}}(s)={\frac {10}{1+2s}}$. La notation anglo-saxonne est donc utilisée même si vous prenez soin de définir vos polynômes en p.
Notez que le premier 'c' du programme a la signification "coefficient" alors que le deuxième a la signification "continu".
Voici un style interactif pour bâtir la fonction de transfert et qui procède différemment :

### Évaluer la fonction de transfert pour certaines fréquences

Il nous faut utiliser la primitive freq. Nous allons chercher à évaluer la fonction de transfert pour la fréquence 200 Hz. Le script Scilab suivant fait ce travail.
On a évalué, bien sûr, pour $p=j\omega =j\cdot 2\cdot \pi \cdot f$. Vous aurez aussi besoin de abs pour trouver le module correspondant. Pour le module et la phase voir phasemag.

## Tracer les diagrammes de Bode

Le tracé des diagrammes de Bode se fait avec la fonction bode. Le diagramme de Bode déjà présenté dans le chapitre correspondant est rappelé ci-dessous :
peut être obtenu à partir du programme suivant :
* Le diagramme de Bode réalisé par Scilab ne donnera pas tout à fait le même résultat car l'axe horizontal est la fréquence en Hz et non la pulsation !
* Comment avons-nous trouvé K = 1 (au numérateur) ? En regardant le diagramme de Bode original on voit que l'asymptote horizontale est à 0 dB ce qui correspond à un gain de 1.
* Comment avons-nous trouvé la valeur 0.005 qui apparaît dans le dénominateur ? Le diagramme de Bode original nous montre un $\omega _{0}=200rad/s$ soit un $\tau =1/200=0.005$.
Il est aussi possible de tracer le diagramme de Bode asymptotique en remplaçant la dernière ligne par la suivante :
* La fonction bode_asymp trace les asymptotes en fonction de la pulsation (rad/s) et non de la fréquence (s-1). Pour un graphique cohérent, il faut donc indiquer à la fonction bode de tracer les courbes selon la pulsation via l'argument rad.
On obtient alors le graphique suivant :

## Tracer d'autres diagrammes
### Le diagramme de Nyquist

Le diagramme de Nyquist se fait avec nyquist.

### Le diagramme de Nichols

Le diagramme de Nicols se fait avec chart ou avec nicolschart.

### Le diagramme de Black-Nichols

Le diagramme de Black-Nichols se fait avec black.

## Tracer les réponses impulsionnelles et indicielles
### La réponse indicielle

La réponse indicielle peut facilement se faire avec csim.
Voici un exemple :
La commande "temps=linspace(0,10,51);" demande de réaliser 51 valeurs réparties entre 0 et 10 et de les mettre dans la variable temps. La commande :
vous montre que les 51 valeurs sont rangées dans une seule ligne et dans 51 colonnes.

### La réponse impulsionnelle

La réponse impulsionnelle peut facilement se faire avec csim.
Voici un exemple :
où l’on a utilisé "plot2d" pour grapher plutôt que "plot".
La commande "csim" peut prendre comme premier paramètre un nom de fonction que vous avez défini. Elle permet donc de trouver la réponse à n’importe quelle entrée.

## Retrouver une représentation d'état

Une primitive permet de passer de la fonction de transfert à la représentation d'état (voir tf2ss)
Si l’on répète la dernière commande sans le point virgule pour affichage, cela donne :
* Discrétisation d'un système du premier ordre