Section : Calcul numérique
Précédent : Calcul numérique
Suivant : Intégration
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)