système différentiel linéaire à coefficient constant
Publié : mar. nov. 30, 2010 11:07 am
par nuvia
Bonjour à tous,
je souhaiterais résoudre un système différentiel linéaire du premier ordre à coefficient constant (de la forme Y'=AY+B)
Ma matrice A est de taille 12x12 et ne semble pas être diagonalisable.
Si je me réferre à mes cours de maths la solution de l'équation homogne est de la forme: Y=Y0exp(At)
Or je ne parviens pas à calculer d'exponentielle matricielle avec XCAS...
Quelqun saurait il effectuer ce calcul ou de manière générale, résoudre un système différentiel du premier degré à coefficient constant avec XCas?
Merci d'avance!
Re: système différentiel linéaire à coefficient constant
Publié : mar. nov. 30, 2010 2:10 pm
par parisse
C'est la meme chose en fait, pour avoir une solution formelle avec Xcas, il faut que le polynome caracteristique de A soit completement factorisable en mode exact. Vous pouvez le verifier en faisant cfactor(pcar(A,x)), il ne doit y avoir que des termes de degre 1.
Re: système différentiel linéaire à coefficient constant
Publié : mar. nov. 30, 2010 3:05 pm
par nuvia
Merci beaucoup pour votre réponse.
Cependant je ne suis pas sur de comprendre:
lorsque je calcule le polynome caractéristique de ma matrice, il est bien complètement factorisable avec seulement des termes de degré 1 sur C.
Cela signifie que ma matrice devrait être diagonalisable sur C.
Ce qui n'est pas gênant, puisqu'il suffirait des lors de resoudre le probleme dans C puis de basculer l'ensemble des solutions dans R.
Comment faire pour diagonaliser une matrice dans C avec XCas?
Par ailleurs j'ai remarqué que lorsque j'utilse l'opérateur Jordan pour simplifier l'expression de la matrice, la matrice de passage retournée n'est pas inversible...
Voici la matrice en question:
[[0,0,1,0,0,0,0,0,0,0,721.875,-721.875],[0,0,0,1,0,0,0,0,0,0,-721.875,721.875],[-1,0,0,0,0,0,0,0,0,0,721.875,-721.875],[-1,0,0,0,0,0,0,0,0,0,-721.875,721.875],[22.5,0,0,0,0,0,0,0,0,0,433.125,-433.125],[0,23.2,0,0,0,0,0,0,0,0,57.75,-433.125],[0,0,0,0,0,0,0,0,0,0,-1,0],[0,0,0,0,0,0,0,0,0,0,0,-1],[0,0,0,0,0.00428082191781,0,0,0,0,0,0,0],[0,0,0,0,0,1.86215753425,0,0,0,0,0,0],[0,0,0,0,0,0,1.00170989138,0,-22.4989740652,0,0,0],[0,0.0126978717516,0,0,0,0,0,0.998248368335,0,-23.1998598695,0,0]]
Merci encore pour votre aide...
Re: système différentiel linéaire à coefficient constant
Publié : mar. nov. 30, 2010 3:19 pm
par parisse
Il faut passer en mode complexe, en cliquant sur la barre de configuration ou via le menu Cfg. Mais il semble qu'il y a un probleme avec la matrice de passage renvoyee, det renvoie 0. Je ne sais pas si c'est parce que la matrice est a coeff numeriques avec des vecteurs propres "mal conditionnes" ou si c'est un bug... a suivre!
Re: système différentiel linéaire à coefficient constant
Publié : mar. nov. 30, 2010 3:29 pm
par parisse
bon, ca a tout l'air d'etre une erreur numerique sur les vecteurs propres, il faut dire que jordan a ete ecrit pour des valeurs propres exactes (la methode est le calcul par l'algorithme de Fadeev). Je vais reflechir a ameliorer ca, en faisant des iterations inverses de la methode de la puissance.
Re: système différentiel linéaire à coefficient constant
Publié : mar. nov. 30, 2010 4:51 pm
par parisse
Bon, j'avance, en effet si on fait A:=exact(votre matrice) puis
factor(pcar(A,x)) on voit que 0 est valeur propre de multiplicité 3, par contre ker(A) ne renvoie que 2 vecteurs propres, donc il y a un bloc de Jordan non trivial, ce qui est rédhibitoire en diagonalisation numérique. Mais jordan(A) semble marcher, il faudrait juste que je normalise les vecteurs propres et caractéristiques correspondant à 0 (ce n'est pas fait actuellement parce que ça compliquerait beaucoup P et J et ça ne sert à rien en exact) pour pouvoir continuer numériquement.
Re: système différentiel linéaire à coefficient constant
Publié : mer. déc. 01, 2010 10:35 am
par nuvia
Merci beaucoup!
En attendant, grace à vos conseils et en utilisant une autre matrice légèrement différente, je parviens à diagonaliser la matrice sur C à l'aide de jordan et les matrices de passages retournées sont bien inversibles cette fois.
Je peux donc résoudre les équations différentielles sur C (je les basculerai sur R ensuite).
Au moment de déterminer les constantes à l'aide des conditions limites, je dois résoudre un système linéaire de 12 équations à 12 inconnues avec des équations très lourdes (en complexe)... J'utilise la fonction fsolve, mais elle me retourne bad argument value.
Peut etre est ce parce que j'appele les équations dans fsolve par des paramètres (pour éviter d'avoir à réécrire toutes les équations dans la ligne de commande), ou bien à cause des termes complexes..?
Y aurait il une autre fonction utilisable dans ce cas?
Meci beaucoup pour votre aide!
Re: système différentiel linéaire à coefficient constant
Publié : mer. déc. 01, 2010 11:39 am
par parisse
Pour un systeme lineaire, vous pouvez utiliser linsolve (ou solve). fsolve s'utilise plutot pour rechercher (par la methode de Newton) une solution proche d'une valeur initiale donnee.