Vous êtes sur la page 1sur 4

INTRODUCTION À SCILAB ET MÉTHODES ITÉRATIVES

1. Syntaxe générale
1.1. Vecteurs. Tapez les commandes suivantes
A = [1, 2, 3]
B = [1 : 3]
C = B!
D = [1; 2]
E = [1; 2];
D−E
Exercise 2. En deduire deux manières de saisir un vecteur ligne F contenant les
nombres de 1 à 20.
Calculer [1 : 0.5 : 10] − F/2
Les constantes universelles sont precedees d’un %.
Exemple, π = %pi . . .
Les multiplications et divisions par des scalaires se font de manière naturelle
+, −, /, ∗.
L’opération de conjugaison se note conj. Le module, ou la valeur absolue pour
les réels, se note abs.
Exercise 3. Calculer par exemple le conujgué de 1 + i.
Pour les vecteurs, le signe ! indique la transposition.
La multiplication ∗signifie la multiplication matrice-vecteurs .
Exercise 4. Vérifier, parmi les 4 operations A ∗ A, A ∗ A! , A! ∗ A, A! ∗ A! que les
seules possibles sont celles qui ont un sens en algébre linéaire.
L’operation .∗ signifie la multiplication composante par composante (de manière
generale, à toute opération matricielle correspond une opération composante par
composante qui se note par le même symbole, précedé d’un point). Vérifier que les
quatres operations A. ∗ A, A. ∗ A! , A! . ∗ A, A! . ∗ A! sont possibles.
Exercise 5. Remplir un vecteur colonne avec les carres des 100 premiers entiers.
5.1. Matrices. On peut les définir ligne par ligne,
A = [1 : 3; 4, 5, 6; 7 : 9]
ou élément par élément
A(2, 2) = 11.
On multiplie les matrices comme les vecteurs. La résolution du système
Ax = b
peut se faire soit en tapant x = A \b (ce qui correspond à la résolution du système
par L.U.), soit en calculant x = inv(A) ∗ b (ce qui est a priori plus couteux.
1
INTRODUCTION À SCILAB ET MÉTHODES ITÉRATIVES 2

Example 5.1. Créer une matrice remplie de données aléatoires

A = rand(5, 5)

vérifier que son determinant est non nul (pourquoi?).

Trouver un b tel que la solution du systeme Ax = b soit x = [1, 2, 3, 4, 5]t.

Exercise 6. Tester sur quelques matrices aléatoires la borne donnée par le condi-
tionnement, en fonction d’une perturbation des données: on choisira une

6.1. Puissances. On peut calculer les puissances de matrices avec l’operateur ˆ.

Exercise 7. Calculer A,A(−1) et A(3) .

L’élévation de chaque terme à la puissance k s’ecrit .ˆ.


Scilab calcule d’ailleurs correctement la racine d’une matrice! Le vérifier pour
une matrice symetrique définie positive (dont les coefficients sont aléatoires).

7.1. Autres objets et opérations utiles.


• Le vecteurs ones (dont vous pouvez trouver la notice en tapant ”help ones”)
• L’opérateur size
• L’opérateur clear
• L’opérateur spec

7.2. Boucle vs. Vectoriel. Une boucle commence par for et fini par end
for i=1:3
a=i
end
On peut incrémenter de pas non entiers
for i=1:0.3:3
a=i
end
De facon générale, la syntaxe for x=a où a est un vecteur, parcourt chaque
composante du vecteur a
l=[1 3 7 2 4 8]
for i=l
i
end

Exercise 8. Calculer
n !
! n
i×j
i=1 j=i

De deux manières: par une double boucle, puis vectoriellement.


Nota: on pourra prendre par exemple n = 1000. Ne pas oublier de se réserver
de la mémoire, par la commande

stacksize(4000000)
INTRODUCTION À SCILAB ET MÉTHODES ITÉRATIVES 3

8.1. Ecriture d’un programme. Plutot que par une série de commandes, on va
écrire le calcul de la somme
n !
! n
i×j
i=1 j=i

comme un script (ou un programme).


(1) Un script en scilab se distingue par son extension , “.sce”
(2) Ouvrir une fenetre de l’editeur scilab
(3) taper les commandes correspondant au calcul de la somme par une boucle,
avec en première ligne clear, puis tic();
la dernière commande sera toc() (pour compter le temps écoulé)
(4) taper ensuite les commandes correspondant au calcul vectoriel de cette
somme, encadré à nouveau de tic&toc.
• une fois le programme écrit, on le sauve avec un nom finissant en .sce (ex:
Script1.sce).
• On le lance ensuite en éxécutant ’exec Script1.sce’

8.2. Ecriture d’une fonction. On peux écrire des fonctions plutôt que des scripts.
Ils doivent alors avoir pour suffixe
”.sci”, et commencer par

function resu=NomFonc(x)

où x est la (sont les) donnée(s) entrantes et résu la (les) sorties


Programmer la boucle comme une fonction de n

9. Premiers Programmes
9.1. Formes quadratiques définies positives. On souhaite écrire deux pro-
grammes, pour comparer leur vitesse relative, permettant de tester si une matrice
symétrique est définie positive
Le premier programme utilise le fait que chaque valeur propre doit être stricte-
ment positive.
Vous aurez sans doute besoin de la commande if, qui s’emploie ”comme toujours”
if condition then
instructions
(éventuellement else instructions)
end
Le second programme utilise le théorème démontré en TD: les déterminants des
mineurs principaux doivent tous être positifs.
Vos programmes devront être des fonctions prenant en entrée une matrice, et
sortir une réponse booléenne (T ou F, pour vrai ou faux).

9.2. Méthode de Jacobi-Gauss-Seidel-SOR. Programmer la méthode de Ja-


cobi: correspondant à la décomposition A = D − (D − A):
xn+1 = D−1 b + (Id − D−1 A)xn
au départ, sous forme d’un script puis sous forme d’une fonction. Vous aurez sans
doute besoin de la commande diag.
INTRODUCTION À SCILAB ET MÉTHODES ITÉRATIVES 4

Algorithm 1 Algorithme du gradient conjugué


Initialisation:
• Calcul de la première direction
d0 = ∇J(x0 )
= Ax0 − b
= r0 .
2
• Calcul du résidu %r0 %
• Choix d’un nombre maximal d’itérations (en fonction du conditionnement
de A)
• Choix de la précisionε.
Iteration:
2
• Calcul du pas αk = (Adk1,dk ) %∇J(xk )%
• Nouvelle solution xk+1 = xk − αk dk
• Mise à jour de l’écart rk+1 = rk − αk Adk
2
• Calcul du résidu %rk+1 % :
2
– Si %rk+1 % < ε2 , on affiche le résultat et le nombre d’itération (k + 1),
– Sinon on continue, et on met à jour la direction
2
%∇J(xk+1 )%
dk+1 = rk+1 + dk
%∇J(xk )%2
• Si k < kmax , l’algorithme n’a pas convergé.

La méthode de Gauss-Seidel correspond à la méthode de Jacobi pour le découpage


A = (L + D) − ((L + D) − A) où L est la partie triangulaire inférieure. Pour la
programmer, vous aurez sans doute besoin de la commande tril.
La méthode
"" 1 SOR # (Sur Relaxation# Successive) correspond au découpage A =
1
ω D + L − ω − 1 D − (A − D − L) , qui mène a l’itération
" #
xk+1 = Q−1 −1
ω b + Id − Qω A xk où Qω = ω
−1
(D + ωL).
Faites différents choix de paramètres pour inverser des matrices plus ou moins
bien conditionnées (entre 0 et 2).
On pourra prendre comme exemple la matrice
1
Aij =
i+j−1
(dans Rn×n ).
9.3. Méthode du gradient conjugué. L’algorithme du gradient conjugué est le
suivant
Le traduire sous forme d’opérations matricielles (normalement, la seule boucle
doit etre celle des itérations.
Essayez de ne pas multiplier le nombre de variables.
Pour tester sa robustesse, et sa rapidité, comparez le aux opérations d’inversion
habituelles sur des matrices aléatoires, ou sur la matrices exemple donnée précédement
(en faisant varier n..) . Vérifier aussi son comportement sur des matrices non
symétriques.

Vous aimerez peut-être aussi