Apprendre Maple Index du Forum Apprendre Maple
Site dédié au logiciel de calcul formel Maple
 
  Page d'accueilPage d'accueil   FAQFAQ    RechercherRechercher    Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs 
S'enregistrerS'enregistrer    ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

système matriciel

 
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Maple en algèbre linéaire
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
bendesarts



Inscrit le: 27 Fév 2009
Messages: 234

MessagePosté le: 03 Fév 2012 18:14    Sujet du message: système matriciel Répondre en citant

Bonjour,

Je cherche à résoudre un système d'équations linéaires. X1 et F8 sont connus, H est une matrice 2*2 connu et je cherche à déterminer X8 et F1. Voici, le produit matriciel concerné :






Comment est-ce que je peux obtenir X8 et F1 en faisant des produits de matrices? ou en tout cas des opérations matriciels sur H. Je suis sur que je n'ai pas à redevelopper mes équations.

Merci d'avance pour votre aide.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 04 Fév 2012 8:50    Sujet du message: Répondre en citant

Bonjour,
Généralement, un sysème linéaire s'écrivant matriciellement sous la forme X'=HX, si la matrice H est inversible la solution unique est X=H^(-1)X'.

Exemple:
Code:

> H := Matrix([[1, 3], [5, 7]]);
 
>  Xprime := Vector([a, b]);
 
>  X := evalm(H^(-1) &*  Xprime);

                                 [1    3]
                            H := [      ]
                                 [5    7]


                                      [a]
                            Xprime := [ ]
                                      [b]


                         [  7 a   3 b  5 a      ]
                    X := [- --- + ---, --- - b/8]
                         [   8     8    8       ]

Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
bendesarts



Inscrit le: 27 Fév 2009
Messages: 234

MessagePosté le: 04 Fév 2012 14:52    Sujet du message: Répondre en citant

D'accord, merci.
Par contre, là ma difficulté, c'est que je crois qu'il ne suffit pas d'inverser H car j'ai des inconnues dans X et X prime.

En d'autres termes, par rapport à mon exemple, c'est X8 et F1 qui sont inconnus (et pas X8 et F8 par exemple) et X1 et F8 qui sont connues.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 05 Fév 2012 9:10    Sujet du message: Répondre en citant

Bonjour,
Effectivement, ça complique le problème. On aura du mal à résoudre dans ce cas par des produits matriciels. C'est pourquoi je vous propose cette procédure de résolution:

Code:

> resol:=proc(H::Matrix,a,b)
> local X,Y,V,s:
> Y:=Vector([x,b]): X:=Vector([a,y]):
> V:=convert(evalm(H&*X-Y),set):
> s:=solve(V,{x,y}):
> Vector([rhs(s[1]),rhs(s[2])])
> end proc:
 
> resol(Matrix([[1,3],[5,7]]),a,b);

                            [  8 a   3 b]
                            [- --- + ---]
                            [   7     7 ]
                            [           ]
                            [  5 a      ]
                            [- --- + b/7]
                            [   7       ]
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
bendesarts



Inscrit le: 27 Fév 2009
Messages: 234

MessagePosté le: 05 Fév 2012 20:53    Sujet du message: Répondre en citant

Super merci. En m'inspirant fortement de votre code, j'ai pu arriver à mes fins. Au passage, je ne connaissais pas la fonction convert(, set) qui est ici très pratique.

Sinon, dans mon calcul, il y a une dernière étape (petite étape) qui ne fonctionne pas. Je n'arrive pas à simplifier les solutions données par le solve. Voilà mon code :

Code:
H_71 := simplify(MatrixMatrixMultiply(H_76, H_61));
                           Matrix(%id = 537883284)
> V7 := Vector([X[7], F[7]]); V1 := Vector([X[1], F[1]]);
                       Vector[column](%id = 537884756)
                       Vector[column](%id = 537884820)
eq := convert(evalm(`&*`(H_71, V1)-V7), set);
         /                             
         |           F[1]             
        < X[1] + ------------- - X[7],
         |       k + I omega c         
         \                             

                           /        2                \            \
                  2        \-m omega  + k + I omega c/ F[1]       |
          -m omega  X[1] + -------------------------------- - F[7] >
                                    k + I omega c                 |
                                                                  /
s := solve(convert(evalm(H_71&*V1-V7), set), {F[1], X[7]});
 /              2                   3                                         
 |       m omega  X[1] k + I m omega  X[1] c + I F[7] omega c + F[7] k         
< F[1] = -------------------------------------------------------------, X[7] =
 |                                 2                                           
 \                         -m omega  + k + I omega c                           

                                  2                             2  2     \
  I F[7] omega c + F[7] k + X[1] k  + 2 I k X[1] omega c - omega  c  X[1]|
  ----------------------------------------------------------------------- >
                /        2                \                              |
                \-m omega  + k + I omega c/ (k + I omega c)              /
F[7]:=F;X[1]:=0;
                                      F
                                      0
s[1]; s[2];
                                 I F omega c + F k   
                      F[1] = -------------------------
                                     2               
                             -m omega  + k + I omega c
                                 I F omega c + F k             
             X[7] = -------------------------------------------
                    /        2                \               
                    \-m omega  + k + I omega c/ (k + I omega c)


Je reçois le message d'erreur suivant : Error, (in simplify/table) too many levels of recursion quand je vais un "simplify" sur mes solutions données par le solve.


Code:
simplify(s[2]);
                                 I F omega c + F k   
                      F[1] = -------------------------
                                     2               
                             -m omega  + k + I omega c
Error, (in simplify/table) too many levels of recursion


Merci d'avance pour votre aide
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 06 Fév 2012 8:51    Sujet du message: Répondre en citant

Bonjour, c'est parce qu'il y a F qui intervient à la fois dans le membre de gauche et le membre de droite de l'équation que ce message est généré.
Je vous suggère d'opérer ainsi:

Code:

> restart:
> s[1]:=F[1]=(I*F*omega*c+F*k)/(-m*omega^2+k+I*omega*c): s[2]:=X[7]=(I*F*omega*c+F*k)/(-m *omega^2+k+I*omega*c)/(k+I*omega*c):
> simplify(evalc(rhs(s[1])));

                       2      2        2  2        3
             F (m omega  k - k  - omega  c  + omega  c m I)
           - ----------------------------------------------
                2      4            2      2        2  2
               m  omega  - 2 m omega  k + k  + omega  c

> simplify(evalc(rhs(s[2])));

                                         2
                     (omega c I + m omega  - k) F
             - -----------------------------------------
                2      4            2      2        2  2
               m  omega  - 2 m omega  k + k  + omega  c

> F[1]:=%%;
> X[7]:=%;

                           2      2        2  2        3
                 F (m omega  k - k  - omega  c  + omega  c m I)
       F[1] := - ----------------------------------------------
                    2      4            2      2        2  2
                   m  omega  - 2 m omega  k + k  + omega  c


                           2      2        2  2        3
                 F (m omega  k - k  - omega  c  + omega  c m I)
       X[7] := - ----------------------------------------------
                    2      4            2      2        2  2
                   m  omega  - 2 m omega  k + k  + omega  c
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Maple en algèbre linéaire Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


phpBB

Développé par phpBB © 2001, 2006 phpBB Group
Traduction par : phpBB-fr.com


Apprendre Maple - ©  - Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.