 |
Apprendre Maple Site dédié au logiciel de calcul formel Maple
|
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
bendesarts
Inscrit le: 27 Fév 2009 Messages: 234
|
Posté le: 03 Fév 2012 18:14 Sujet du message: système matriciel |
|
|
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 |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 04 Fév 2012 8:50 Sujet du message: |
|
|
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 |
|
 |
bendesarts
Inscrit le: 27 Fév 2009 Messages: 234
|
Posté le: 04 Fév 2012 14:52 Sujet du message: |
|
|
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 |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 05 Fév 2012 9:10 Sujet du message: |
|
|
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 |
|
 |
bendesarts
Inscrit le: 27 Fév 2009 Messages: 234
|
Posté le: 05 Fév 2012 20:53 Sujet du message: |
|
|
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 |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 06 Fév 2012 8:51 Sujet du message: |
|
|
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 |
|
 |
|
|
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
|

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.
|