Section : Calcul numérique
Précédent : Calcul numérique
Suivant : Intégration

Algèbre linéaire

Tout traitement mathématique est vu par Scilab comme une manipulation de matrices. Pour l'algèbre linéaire, les fonctionnalités sont donc particulièrement développées. Dans une utilisation un peu avancée, on aura intérêt à tirer parti de la structure de matrice creuse (sparse) que nous n'aborderons pas. Il est important de garder à l'esprit que tous les calculs numériques dépendent de la représentation des nombres réels en machine, et que donc les résultats ``exacts'' n'existent pas. La détection de singularités dépend d'une précision prédéfinie et n'est donc pas infaillible.
rank([1,1;1,1])
rank([1.00000000000001,1;1,1])
rank([1.000000000000001,1;1,1])
inv([1,1;1,1])
A=[1,2,3;4,5,6;7,8,9]
det(A)
rank(A)
inv(A)     // le calcul est effectue
A*inv(A)   // ce n'est pas l'identite
Si A et B sont deux matrices, alors A\B retourne une matrice X telle que A*X=B, et B/A une matrice X telle que X*A=B pourvu que les dimensions de A et B soient compatibles. Si A n'est pas une matrice carrée inversible, ces commandes retourneront un résultat, qu'il y ait une infinité de solutions ou qu'il y en ait aucune.
A=[1,2,3;4,5,6;7,8,9]
b=[1;1;1]
x=A\b       // le systeme a une infinite de solutions
A*x
b=[1,1,1]
x=b/A       // le systeme a une infinite de solutions  
x*A        
b=[1;1;2]
x=A\b       // le systeme n'a pas de solution
A*x
b=[1,1,2]
x=b/A       // le systeme n'a pas de solution 
x*A
Pour résoudre un système linéaire quand on craint une singularité, il vaut mieux utiliser linsolve, qui détecte les impossibilités et peut retourner une base du noyau de la matrice en cas de solutions multiples. Attention, linsolve(A,b) résout A*x=-b.
A=[1,2,3;4,5,6;7,8,9]
b=[1;1;1]
[x,k]=linsolve(A,b)
A*x
A*k
b=[1;1;2]
[x,k]=linsolve(A,b)  // erreur
La commande [D,U]=bdiag(A) retourne (en théorie) une matrice diagonale D et une matrice inversible U telles que U*D*inv(U)=A.
A=diag([1,2,3]); P=rand(3,3); A=P*A*inv(P)
spec(A)
[D,U]=bdiag(A)       // matrice diagonalisable
inv(U)*A*U
U*D*inv(U)-A
A=[1,0,0;0,1,1;0,0,1]; P=rand(3,3); A=P*A*inv(P)
spec(A)
[D,U]=bdiag(A)       // matrice non diagonalisable
inv(U)*A*U
U*D*inv(U)-A
Opérations matricielles
A' transposée de A
rank rang
inv inverse
expm exponentielle matricielle
det déterminant
trace trace
poly(A,"x") polynôme caractéristique de A
spec valeurs propres de A
bdiag diagonalisation
svd décomposition en valeurs singulières
A\b solution de A*x=b
b/A solution de x*A=b
linsolve(A,b) solution de A*x=-b


Section : Calcul numérique
Précédent : Calcul numérique
Suivant : Intégration

© B. Ycart (2001)