Vous êtes sur la page 1sur 2

Université de Rennes 1 Année 2019 – 2020

UFR Mathématiques Mémo Scilab L3 ANU

Recommandations générales Opérations d’algèbre linéaire


Édition : Utiliser l’éditeur intégré à scilab. Placer les fonctions dans des fichiers suffixés .sci et les norm(X,p) kXkp (p∈ [1, +∞[ ou p= ’inf’)
scripts d’exécution dans des fichiers suffixés .sce. Pour nommer les fichiers, variables ou fonctions norm(A,p) |||A|||p (norme subordonnée lorsque p∈ {1,2,’inf’}, de Frobenius si p=’fro’)
ne pas utiliser de caractères spéciaux : accents, espaces, etc. Utiliser des noms de variables et de det(A) Déterminant de la matrice A
fonctions qui facilitent la programmation, sans toutefois l’alourdir. rank(A) Rang de la matrice A
Penser à commenter les programmes à l’aide du symbole // commentaire. trace(A) Trace de la matrice A
Exécution : Ne pas oublier de se placer préalablement dans le répertoire de travail qui contient les inv(A) Inverse de la matrice A
fichiers à utiliser. A\b Résolution d’un système linéaire Ax = b
Vos fonctions sont rendues utilisables par le logiciel une fois préalablement exécutées (exec fichier. kernel(A) Base orthonormée du noyau de A
sci ou touche play de l’éditeur). Toute modification d’une fonction ne sera effective qu’après nouvelle spec(A) Vecteur des valeurs propres de A avec multiplicité
exécution du fichier la contenant. [P,D]=spec(A) A = P DP −1 , P contient les vecteurs propres lorsqu’ils existent
Deboguage : Pour la résolution d’une erreur, commencer par l’identifier !
La commande pause glissée dans une fonction ou un programme permet d’interrompre l’exécution et Booléens et opérateurs logiques
de récupérer la main dans la ligne de commande afin d’examiner les variables ; l’exécution est reprise %T, %F Booléens VRAI et FAUX, respectivement
par resume ou interrompue définitivement par abort. ==,>,<,>=,<= Tests =, >,<,≥,≤, respectivement
Un message d’erreur de scilab indique le lieu et la nature de l’erreur, mais il faut souvent examiner & Opérateur logique ET
les quelques lignes précédentes qui peuvent en être la source réelle. | Opérateur logique OU
Dans la recherche d’une erreur affectant le résultat d’un algorithme, une stratégie de deboguage
efficace consiste à décliner une série de tests élémentaires et progressifs qui permettent de valider
les différentes étapes de l’algorithme indépendamment les unes des autres. Cette validation peut/doit Quelques fonctions et variables
être effectuée au fil de la programmation qui est alors elle-même progressive. sqrt, log, exp, cos, sin, tan, cosh, sinh, tanh, abs, int, floor, sign, real, imag
À l’aide ! User et abuser des commandes help ou apropos. %pi, %e, %i, %inf, %eps, %nan

Structures de contrôle
Définition de vecteurs et matrices function [ y1 , y2 ]= f ( x1 , x2 , x3 ) Le programme de la fonction f doit impérativement définir
... les arguments de sortie y1 et y2 (elle n’est pas destinée à
[ ] Définition d’un vecteur ou d’une matrice (séparateurs , et ;) endfunction
faire autre chose, comme du tracé graphique).
a:h:b Vecteur incrémental de pas h entre a et b
linspace(a,b,N) Vecteur de N valeurs équiréparties entre a et b
for i = LISTE LISTE est un vecteur de valeurs parcourues successive-
... ment par la variable i, le plus souvent un vecteur incré-
zeros(m,n) Matrice nulle de taille m×n end
ones(m,n) Matrice de 1 de taille m×n mental 1:n ou décrémental n:-1:1
rand(m,n) Matrice aléatoire (coeff. unif. distribués dans [0, 1]) de taille m×n while condition condition est un booléen
...
eye(m,n) Matrice de type identité de taille m×n end
diag(X) Construction de la matrice carrée dont la (0-ième) diagonale est le vecteur X
if cond_1 then On peut utiliser plusieurs elseif successifs. Attention à la
diag(X,i) Construction de la matrice carrée dont la i-ième diagonale est le vecteur X ... position de then : une erreur courante et difficile à repérer
elseif cond_2 then
...
est de placer then sur la ligne suivant le booléen cond_1.
else
...
Manipulation de vecteurs et matrices end
length(X) Longueur d’un vecteur (ou nombre de composantes d’une matrice X)
size(A) Taille m×n de la matrice A
size(A,1) Nombre de lignes de la matrice A Messages d’erreurs fréquents
size(A,2) Nombre de colonnes de la matrice A Index invalide. Tentative d’accès à une composante inexistante d’une
A(I,J) Extraction de la sous-matrice des coeff. de A situés aux lignes I et colonnes J, matrice : vérifier les «effets de bord» dans les boucles,
I et J pouvant être des listes d’entiers la nature des indices (réels, entiers, positifs, non-nuls et
A(:,1) Extraction de la première colonne de A inférieurs aux tailles des vecteurs).
A(2:$-1,1) Extraction de la première colonne de A excepté le premier et le dernier coefficient Multiplication incoherente. Produit incompatible de matrices.
diag(A) Extraction du vecteur formant la diagonale de A La sous-matrice n’est pas Affectation d’une sous-matrice avec dimensions incompa-
diag(A,i) Extraction du vecteur formant la i-ième diagonale de A correctement definie. tibles.
A.#B où l’opérateur binaire # ∈ {*,/,^}, Opération composante par composante entre Division par zero... Le message est limpide.
les matrices A et B Attention : La matrice est Ce n’est pas une erreur mais un «warning». La résolu-
A’ Adjoint de la matrice A (transconjuguée dans le cas de matrices de complexes) presque singuliere ou mal tion d’un système linéaire faisant intervenir une matrice
A.’ Transposée de la matrice A conditionnee. rcond = ... «presque non-inversible».
Université de Rennes 1 Année 2019 – 2020
UFR Mathématiques Un exemple de programme L3 ANU
1 // Fichier / Users /~ name / TP / fonctions . sci
2
Remarque. L’exemple suivant utilise très peu de fonctionnalités intégrées au logiciel et est 3 function y = f ( x )
plutôt un pretexte pour illustrer les usages de syntaxe et les possibilités de vectorisation. 4 y = (1+25* x .^2) .^( -1)
5 endfunction
6
7 function D = diffdiv (x , y )
Un problème d’interpolation 8 n = length ( x ) ;
9 D = zeros (n , n ) ;
Étant données différentes valeurs d’un entier n ∈ N, on souhaite éprouver la qualité de 10 D (: ,1) = y ;
l’interpolation de Lagrange de la fonction f : x 7→ (1+25x 2 )−1 , en n+1 points uniformément 11 for j =2: n
répartis dans l’intervalle [−1, 1] : xj = j/n, pour 0 ≤ j ≤ n. 12 for i =1:( n - j +1)
13 D (i , j ) = ( D ( i +1 ,j -1) -D (i ,j -1) ) /( x ( i +j -1) -x ( i ) ) ;
Le polynôme d’interpolation est calculé sous sa forme de Newton : 14 end
15 end
p(X) = f (x0 ) + f [x0 , x1 ](X − x0 ) + . . . + f [x0 , x1 , . . . , xn ](X − x0 ) . . . (X − xn−1 ), 16 endfunction
17
pour laquelle les coefficients sont obtenus en calculant récursivement les différences divisées 18 function y = fastexp (x ,D , t )
(généralisation du taux d’accroissement aux ordres supérieurs) : 19 n = length ( x ) ;
20 y = D (1 , n ) * ones ( t ) ;
f [x1 , x2 , . . . , xj ] − f [x0 , x1 , . . . , xj−1 ] 21 for k =n -1: -1:1
f [x0 , x1 , . . . , xj ] = .
xj − x0 22 y = (t - x ( k ) ) .* y + D (1 , k ) ;
23 end
Le polynôme p est alors évalué par exponentiation rapide (algorithme de Horner). 24 endfunction

1 // Fichier / Users /~ name / TP / script . sce


2
3 clear ;
4 exec fonctions . sci ;
5 x = linspace ( -1 ,1 ,400) ; x = x ’; y = f ( x ) ;
6
7 z = []; Z = [];
8 for n = [1:10]
9 X = linspace ( -1 ,1 , n +1) ;
10 val = f ( X ) ; D = diffdiv (X , val ) ;
11 yp = fastexp (X ,D , x ) ; Z = [Z , yp ];
12 end
13
14 scf (1) ; clf ;
15 plot (x ,y , ’ - ’) ; plot (x ,Z , ’ -- ’) ;
16 title ( " Polynomes d ’ ’ interpolation de degre n " ) ;
17 legend ([ " f " ," n = " + string ([1:10]) ]) ;
18 xs2png (1 , " graphe . png " ) ;

Initialisation :
Chargement de l ’ environnement de travail

--> cd / Users /~ name / TP /;


--> exec script . sce ;