Découvrir Scilab/Calculs élémentaires
Un livre de Wikibooks.
2. Calculs élémentaires
Scilab peut s'utiliser comme une calculatrice scientifique, de type calculatrice graphique. Il suffit de taper une formule dans une syntaxe relativement standard, et d'appuyer sur le retour chariot pour avoir le résultat.
Sections |
[modifier] Opérateurs et fonctions classiques
Scilab utilise les fonctions et opérateurs classiques :
+(addition),-(soustraction),*(produit),/(division),^ou**(élévation à une puissance),sqrt()(racine carrée),cos(),sin(),tan()pour les fonctions trigonométriques de base,acos(),asin(),atan()pour leurs réciproques,cotg()pour la cotangente ;- les fonctions trigonométriques hyperboliques
cosh(),sinh(),tanh(),acosh(),asinh(),atanh() log()pour le logarithme népérien (ln),log10()pour le logarithme en base 10 (log10),log2()pour le logarithme en base 2 (log2),exp()pour la fonction exponentielle,floor()pour la partie entière,int()pour la troncature (arrondit à l'entier vers 0, différent defloorpour les nombres négatifs),round()pour l’arrondi au plus proche (0,5 → 1),abs()pour la valeur absolue,erf()pour la fonction d'erreur de Gauss,randpour avoir un nombre aléatoire entre 0 et 1, suivant une loi uniforme ;rand(1,'normal')pour avoir un nombre aléatoire suivant une loi normale centrée réduite (moyenne 0, variance 1) ;- la factorielle de n peut s'obtenir par
prod(1:n)ou bien pargamma(n+1); - …
Le séparateur décimal est le point.
Les puissances de 10 se notent avec la lettre « e » en minuscule ou en capitale : 5,2·103 s'écrit 5.2e3 ou 5.2E3, 5,2·10-3 s'écrit 5.2e-3 ou 5.2E-3. On peut aussi utiliser le « d » minuscule ou capital.
Par défaut, Scilab affiche les résultats avec dix caractères (signe et point décimal inclus). On peut modifier le nombre de caractères avec la fonction format(n) où n est le nombre de caractères.
- Vocabulaire
- Dans Scilab, une « fonction interne[1] » est une fonction prédéfinie. Par opposition, les fonctions définies par l'utilisateur sont appelées « fonctions extérieures ».
[modifier] Constantes particulières
Pour entrer l’imaginaire i, il faut utiliser %i ; il figure simplement sous la forme « i » dans les résultats.
Pour entrer l’infini ∞, il faut utiliser %inf ; il figure simplement sous la forme « inf » dans les résultats.
La valeur de π s’obtient par %pi, et la constante de Neper e par %e.
Lorsqu'une opération invalide se produit, certains programmes retournent un nombre particulier appelé « NaN » pour not a number (littéralement « ceci n'est pas un nombre »)[2]. Dans Scilab, cette valeur est obtenue par %nan et s'affiche sous la forme Nan.
[modifier] Variables
On peut définir des variables simplement sous la forme NomVariable=valeur. NomVariable est une chaîne de caractères commençant par une lettre ; Scilab est sensible à la casse, c'est-à-dire que les variables « a » et « A » sont deux variables différentes. Le type de la variable (entier, réel, imaginaire) est géré automatiquement.
La variable ans contient le dernier résultat (pour answer, « réponse » an anglais).
La fonction who affiche les variables déclarées (who? signifie « qui ? » en anglais). On remarque que dès l'ouverture, Scilab a défini de nombreuses variables, notamment des variables dites « d'environnement », c'est-à-dire des paramétrages de fonctionnement de Scilab.
[modifier] Exemples
- Exemple 1
-->asin(sqrt(2)/2)
ans =
0.7853982
-->ans/%pi*180
ans =
45
- (puisque sin(45°) = √2/2)
- Exemple 2
-->%e^(%i*%pi/2)
ans =
6.1273D-17 + i
- notez que dans l'absolu, on devrait obtenir i.
- Exemple 3
- calcul de la pression, en Pa, de 2,5 moles de gaz parfait dans un volume de un litre (10-3 m3) à une température de 300 K (26,85 °C)
-->n=2.5;R=8.314472;T=300;V=1e-3;
-->n*R*T/V
ans =
6235854
- soit environ 6,2·106 Pa.
[modifier] Booléens
Lorsque l’on assigne une valeur booléenne, on utilise %t pour « vrai » (true) et %f pour « faux » (false). Le résultat de l’opération affiché est respectivement T ou F.
L’opérateur ou est noté « | » (tube), et est noté « & » (esperluette), non est noté « ~ » (tilde).
- Exemple
-->(%t & %f) | %f ans = F.
Un booléen peut également s’obtenir en comparant deux valeurs, avec les relations d’égalité == et de différence <> ou ~=, et les relations d'ordre <, <=, > et >=.
- Exemple
-->a=3
a =
3.
-->a==3
ans =
T
-->a<2
ans =
F
[modifier] Polynômes et fractions rationnelles
Scilab manipule les polynômes et fractions rationnelles formels, c'est-à-dire non pas en tant que fonction, mais en tant qu'objets mathématiques, éléments du corps des polynômes ou des fractions rationnelles.
La première opération pour définir un polynôme est de définir le monôme x. Ceci se fait par la commande x = poly(0, 'x'). Cette commande indique que la variable x est un polynôme (commande poly()) dont l'indéterminée est notée « x » (le 'x' situé à l'intérieur de la parenthèse) et la racine est 0.
Puis, le polynôme ou la fraction rationnelle est définie par une formule contenant ce x.
- Exemple de définition de polynôme
-->x = poly(0, 'x'); p = x ^ 2 + 2 * x + 1
p =
2
1 + 2x + x
- Exemple de définition de fraction rationnelle
-->x = poly(0, 'x'); q = (1 + x) / (1 - x)
q =
1 + x
-----
1 - x
Les polynôme et fractions rationnelles se manipulent ensuite de manière formelle comme les autres variables. Voici des exemples à partir des objets définis ci-dessus.
- Exemple
-->1/q
ans =
1 - x
-----
1 + x
--> p*q
ans =
2 3
1 + 3x + 3x + x
----------------
1 - x
La fonction derivat() fait la dérivée formelle du polynôme ou de la fonction rationnelle.
De manière interne, Scilab représente les polynôme et fractions rationnelles comme des matrices. Ainsi, avec les exemples précédents, p(1) va nous renvoyer 1+2x+x2, q(2) donnera 1+x ; on ne peut donc pas utiliser un polynôme comme une fonction classique. L'évaluation, c'est-à-dire l'utilisation du polynôme ou de la fraction rationnelle comme fonction numérique, se fait avec la fonction horner :
horner(f,val)calcule ƒ(val).- Exemple
-->horner(p,2)
ans =
9.
[modifier] Fonctions spécifiques aux polynômes
La fonction roots(p) donne les racines du polynôme p, la fonction coeff(p) donne une matrice dont les coefficients sont les coefficients du polynôme p. La fonction varn(p) renvoit le nom de l’indéterminée de p (ici, x).
En fait, la commande x = poly(0, 'x') définit que x est le polynôme le plus simple dont l’indéterminée est le caractère « x » et dont la racine est 0, c’est-à-dire le monôme x. La commande A = poly(2, 'x') définit de même le polynôme le plus simple ayant pour racine 2, c’est-à-dire x - 2.
- Note
- Si l'on écrit
x = poly(2, 'x'), alors la variable x sera le polynôme « x - 2 ». Il faut bien distinguer la notion d'indéterminée (chaîne de caractère attachée au polynôme) et la variable x. Si l'on écritA = poly(2, 'x')puisx = 1, a sera toujours le polynôme « x - 2 », l'indéterminée ne sera pas remplacée par la valeur de la variable x.
Cette fonction permet de définir un polynôme ayant plusieurs racines, en utilisant une matrice ligne au lieu d’un simple nombre. Par exemple, A=poly([1 2],'x') définit le polynôme le plus simple ayant pour racines 1 et 2, soit le polynôme x2 - 3x + 2.
On peut aussi utiliser cette fonction pour générer un polynôme dont les coefficients sont contenus dans une matrice ligne, en ajoutant le caractère 'c' à la fin des arguments. Par exemple, A = poly([a0, a1, …, an], 'x', 'c') définit le polynôme a0 + a1·x + … + an·x n.
[modifier] Fonctions spécifiques aux fractions rationnelles
La fraction rationnelle q est le rapport de deux polynômes, notés q.num (numérateur) et q.den (dénominateur), qui peuvent se manipuler comme des polynômes normaux.
- Exemple
-->q.num
ans =
1+x
-->q.num^2
ans =
2
1 - 2x + x
La fonction simp() fait la simplification de la fraction rationnelle.
[modifier] Chaînes de caractère
L'opérateur « + » permet la concaténation de deux chaînes de caractère. La fonction evstr() permet de transformer une chaîne en une expression Scilab (on parle « d'évaluation de la chaîne »). La fonction execstr() permet d'exécuter le contenu de la chaîne.
- Exemple
-->a='1';
-->evstr(a)*2
ans =
2.
-->b='x';c='=5';execstr(b+c)
-->x^2
ans =
25.
- la chaîne b+c est 'x=5', cette chaîne est exécutée, ce qui signifie que la valeur 5 est attribuée à la variable x, ce que confirme le calcul fait par la suite.
Chaque caractère est représenté par un code (nombre entier), qui est différent du code ASCII :
- les chiffres de 0 à 9 sont représentés par les codes 0 à 9 ;
- les lettres minuscules de « a » à « z » sont représentés par les codes 10 à 35 ;
- les lettres capitales de « A » à « Z » sont représentés par les codes -10 à -35.
On peut déterminer le code d'un caractère avec la fonction str2code :
- Exemple
--> str2code('a')
ans =
10.
Si l'on met une chaîne de caractères, alors la fonction génère une matrice colonne contenant les codes de chaque caractère.
La fonction code2str permet à l'inverse de transformer un entier en un caactère, ou une matrice colonne en une chaîne de caractères.
- Exemple
--> a = [1 ; 2]; --> code2str(a) ans = 12
Ceci est utile pour « fabriquer » des chaînes de caractère.
Mais Scilab manipule aussi les codes ASCII. La fonction ascii renvoit :
- si on lui donne un caractère ou une chaîne : le code ASCII du caractère ou le vecteur contenant les codes ASCII de chaque caractère de la chaîne ;
- si on lui donne un entier ou un vecteur d'entiers : le caractère dont le code ASCII est l'entier, ou la chaîne de caractères.
- Exemple
--> ascii('a')
ans =
97.
--> ascii(65)
ans =
A
[modifier] Matrices
Scilab a été conçu pour le calcul matriciel. Les éléments des matrices peuvent être de tout type (nombre réel, nombre complexe, booléen, polynôme, fraction rationnelle, chaîne de caractères…).
[modifier] Définir une matrice
Pour définir une matrice à partir de ses coefficients, on les place entre deux crochets […]. Les éléments d’une ligne sont séparés d’un espace ou d’une virgule, les lignes sont séparées d’un point-virgule. À l’affichage, la matrice est représentée comme un tableau encadré par des points d’exclamation.
- Exemple
-->[1,0,0;0,1,0;0,0,1] ans = ! 1. 0. 0. ! ! 0. 1. 0. ! ! 0. 0. 1. !
La matrice vide est notée par [].
L’expression M(i,j) désigne l’élément (i, j) de la matrice M.
Le caractère : (deux-points) signifie « tous les indices », par exemple M(1, :) est la première ligne de la matrice (c’est un vecteur ligne). Le caractère $ (dollar) désigne le dernier indice (ligne ou colonne) d’une matrice.
L’expression N1:N2 permet de générer une matrice-ligne dont le premier coefficient est N1, le dernier est inférieur ou égal à N2, et le pas entre les coefficients est 1. L’expression N1:pas:N2 permet de générer une matrice-ligne en choisissant le pas. Par exemple
-->1.1:5.2 ans = ! 1.1 2.1 3.1 4.1 5.1 ! --> 1:2:5 ans = ! 1 3 5 ! -->'a' :'d' ans = abcd
On peut aussi utiliser la fonction
linspace(x1, x2, n)
pour générer une matrice ligne de n valeurs espacées régulièrement entre x1 et x2.
La fonction zeros(m,n) crée une matrice m×n remplie de 0 ; la fonction ones(m,n) crée une matrice m×n remplie de 1. La fonction eye(n,n) crée une matrice unité n×n. On peut aussi passer une matrice M en paramètre de ces fonctions ; elles créent alors une matrice de même dimension que la matrice M. Par exemple, M=zeros(M) met tous les coefficients de M à zéro.
Si ƒ est une fonction extérieure (c’est-à-dire par définie par deff ou par function, voir ci-après), et que x et y sont des vecteurs, alors la fonction feval permet de bâtir une matrice z = ƒ(x, y)
z = feval(x, y, f): on a z(i, j) = f(x(i), y(j))
[modifier] Fonctions et opérateurs sur les matrices
Toutes les fonctions numériques s’appliquent à des matrices ; par exemple si M est une matrice, alors cos(M) sera la matrice dont les coefficients sont les cosinii des coefficients de M.
La fonction size(M) renvoit la taille de la matrice sous la forme d’une matrice 2×1 contenant le nombre de lignes puis le nombre de colonnes. La fonction size(M,'*') (ou size(M,"*")) renvoit le produit des deux valeurs, soit le nombre total d'éléments dans la matrice.
Les opérations spécifiques aux matrices classiques sont :
- la transposition : il suffit de mettre une apostrophe
’après la matrice ; - le produit de matrices :
*; - produit et rapport élément par élément :
.*et./; - le produit tensoriel
.*.; - le déterminant d’une matrice carrée M :
det(M)(determ()pour une matrice de polynômes etdetr()pour une matrice de fraction rationnelle) ; - la trace d’une matrice carrée M :
trace(M); - l’inverse d’une matrice inversible M :
inv(M); - la somme de tous les éléments de la matrice :
sum(M)</sum> ; - le produit de tous les éléments de la matrice :
prod(M).
La fonction max(M) renvoit la plus grand élément de la matrice, et la fonction min(M) renvoit le plus petit.
Si l'on tape [m,k]=max(A), alors Scilab met la valeur du maximum dans la variable m et sa position dans la matrice (sous la forme d'un vecteur ligne [i,j]) dans la variable k — on peut utiliser d'autres noms de variable que m et k. De même pour [m,k]=max(A).
On peut ajouter un paramètre après la matrice, sous la forme d'une caractère :
max(A, 'c')etmin(A, 'c')renvoient les extrema de chaque colonne de la matrice ;max(A, 'r')etmin(A, 'r')renvoient les extrema de chaque ligne de la matrice (« r » pour row).
On peut mettre une suite de matrices de même taille dans min et max. Alors, Scilab renvoit une matrice m de taille identique dont chaque élément m(i, j ) est l'extremum des éléments (i, j ) des matrice, et éventuellement une matrice k dont chaque élément k(i, j ) contient le numéro d'ordre de la matrice (dans la liste) qui contient ce maximum.
- Exemple
--> A = [1,2;3,4], B = [4,3;2,1]
A =
1. 2.
3. 4.
B =
4. 3.
2. 1.
-->[m,k] = max(A,B)
k =
2. 2.
1. 1.
m =
4. 3.
3. 4.
la matrice m(1,1) contient « 4 » qui est le maximum entre A(1,1) et B(1,1), et k(1,1) contient « 2 » ce qui indique que c'est la seconde matrice (donc B) qui contient ce maximum.
[modifier] Vecteur
Un vecteur est une matrice ligne ou colonne (matrice 1 × n ou n × 1) ; l’expression V(i) désigne la composante i du vecteur V.
Si l'on veut avoir la taille d'un vecteur v (ligne ou colonne) sous la forme d'un entier, on peut utiliser
max(size(v))ou biensize(v,'*')
Si V1 et V2 sont des vecteurs colonnes, alors le produit scalaire est
V1' * V2;
si ce sont des vecteurs lignes, le produit scalaire est
V1 * V2'.
[modifier] Importance des matrices dans Scilab
Les matrices sont très utilisées dans Scilab pour définir les paramètres. Ainsi, pour tracer une courbe, il utilise un nuage de point sous forme de matrice, ou encore, pour effectuer une boucle itérative, il prend les indices dans une matrice ligne ou colonne.
La syntaxe propre aux matrices va donc se retrouver dans de nombreux endroits.
[modifier] Voir aussi
- Dans Wikipédia
- Algèbre booléenne
- American Standard Code for Information Interchange (ASCII)
- Concaténation
- Fraction rationnelle
- IEEE 754
- Matrice
- NaN
- Polynôme
- Relation d'ordre
- Vecteur
[modifier] Notes
- ↑ la documentation utilise le terme de « primitive » ; il y a une ambiguité en français que nous avons décidé de lever dans le présent ouvrage en changeant le terme (en anglais, le problème ne se pose pas puisque la primitive d'une fonctions est appelée « antiderivative »)
- ↑ dans la représentation des nombres à virgule flottante IEEE 754, un NaN est un nombre dont l'exposant ne contient que des 1 et la mantisse n'est pas nulle