|
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: 24 Aoû 2011 9:41 Sujet du message: Formation d'un système matriciel AX=B à partir d'équations |
|
|
Bonjour,
J'aimerais à partir de 4 équations formées un système de la forme AX=B. Y a-t-il une fonction qui fait celà ?
Dans mon cas, X = (C D E F)
Voici les 4 équations ci-dessous:
Code: | Phi:=x->C*sin(x/lambda)+D*cos(x/lambda)+E*sinh(x/lambda)+F*cosh(x/lambda);
Theta:=x->diff(Phi(x),x);
eq1:=Phi(0)=0;
eq2:=Theta(0)=0;
eq3:=Phi(L)=0;
eq4:=Theta(L)=0;
|
Rq: Au passage, ma deuxième équation est mal identifié dans maple. Est-ce que vous sauriez me dire ce que je dois rectifier?
Merci d'avance pour votre aide |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 24 Aoû 2011 10:18 Sujet du message: Re: |
|
|
Bonjour,
Voici ce que je vous propose:
Pour la seconde fonction, ce qui posait problème était le remplacement de x par 0 dans diff(Phi(x),x); par la commande eq2:=Theta(0)=0;
J'ai donc utilsé D(Phi) qui donne la fonction dérivée première de Phi.
Pour la matrice, je construis une séquence double des coefficients de vars[k] dans eq||i , où vars=[C,D,E,F] désigne la liste des 4 variables, sur laquelle j'applique matrix.
Code: |
> Phi:=x->C*sin(x/lambda)+D*cos(x/lambda)+E*sinh(x/lambda)+F*cosh(x/lambda);
> Theta:=D(Phi);
> eq1:=Phi(0)=0;
> eq2:=Theta(0)=0;
> eq3:=Phi(L)=0;
> eq4:=Theta(L)=0;
>
x x x
Phi := x -> C sin(------) + D cos(------) + E sinh(------)
lambda lambda lambda
x
+ F cosh(------)
lambda
x x x
C cos(------) D sin(------) E cosh(------)
lambda lambda lambda
Theta := x -> ------------- - ------------- + --------------
lambda lambda lambda
x
F sinh(------)
lambda
+ --------------
lambda
eq1 := D + F = 0
C E
eq2 := ------ + ------ = 0
lambda lambda
L L L
eq3 := C sin(------) + D cos(------) + E sinh(------)
lambda lambda lambda
L
+ F cosh(------) = 0
lambda
L L L
C cos(------) D sin(------) E cosh(------)
lambda lambda lambda
eq4 := ------------- - ------------- + --------------
lambda lambda lambda
L
F sinh(------)
lambda
+ -------------- = 0
lambda
> vars:=[C,D,E,F]:
> A:=matrix([seq([seq(coeff(lhs(eq||i),vars[k]),k=1..nops(vars))],i=1..4)]);
A :=
[0 , 1 , 0 , 1]
[ 1 1 ]
[------ , 0 , ------ , 0]
[lambda lambda ]
[ L L L L ]
[sin(------) , cos(------) , sinh(------) , cosh(------)]
[ lambda lambda lambda lambda ]
[ L L L L ]
[cos(------) sin(------) cosh(------) sinh(------)]
[ lambda lambda lambda lambda ]
[----------- , - ----------- , ------------ , ------------]
[ lambda lambda lambda lambda ]
> X:=matrix([seq([vars[k]],k=1..nops(vars))]);
[C]
[ ]
[D]
X := [ ]
[E]
[ ]
[F]
> B:=matrix([ seq([rhs(eq||i)],i=1..4) ] );
[0]
[ ]
[0]
B := [ ]
[0]
[ ]
[0]
> evalm(A) &* evalm(X) = evalm(B);
[0 , 1 , 0 , 1]
[ 1 1 ]
[------ , 0 , ------ , 0]
[lambda lambda ]
[ L L L L ]
[sin(------) , cos(------) , sinh(------) , cosh(------)]
[ lambda lambda lambda lambda ]
[ L L L L ]
[cos(------) sin(------) cosh(------) sinh(------)]
[ lambda lambda lambda lambda ]
[----------- , - ----------- , ------------ , ------------]
[ lambda lambda lambda lambda ]
[C] [0]
[ ] [ ]
[D] [0]
&* [ ] = [ ]
[E] [0]
[ ] [ ]
[F] [0]
|
A bientôt sur ce forum. |
|
Revenir en haut de page |
|
|
bendesarts
Inscrit le: 27 Fév 2009 Messages: 234
|
Posté le: 24 Aoû 2011 11:29 Sujet du message: |
|
|
Super merci pour ton aide.
J'arrive à ce code
Code: | Phi:=x->C*sin(x/lambda)+D*cos(x/lambda)+E*sinh(x/lambda)+F*cosh(x/lambda);
Theta:=D(Phi);
eq1:=Phi(0)=0;
eq2:=Theta(0)=0;
eq3:=Phi(L)=0;
eq4:=Theta(L)=0;
vars:=[C,D,E,F]:
A:=matrix([seq([seq(coeff(lhs(eq||i),vars[k]),k=1..nops(vars))],i=1..4)]);
X:=matrix([seq([vars[k]],k=1..nops(vars))]);
B:=matrix([ seq([rhs(eq||i)],i=1..4) ] );
evalm(A) &* evalm(X) = evalm(B);
(solve(det(A)=0,lambda));
|
J'ai par contre encore un petit soucis:
En gros, il faut que je résolve une équation avec du cos, ch, sin, sh. Par contre, une résolution avec un solve me donne un réponse avec un rootOf. Comment est-ce que je peux faire pour spécifier un intervalle dans la résolution de mon solve pour ne pas avoir de RootOf.
Avec ceci
Code: |
L:=1.350;
assume(0 < lambda, lambda < 100);
solve(det(A)=0,lambda);
J'obtiens float infini
|
Merci d'avance pour ton aide |
|
Revenir en haut de page |
|
|
bendesarts
Inscrit le: 27 Fév 2009 Messages: 234
|
Posté le: 24 Aoû 2011 12:10 Sujet du message: |
|
|
Autre chose, J'espère ne pas être trop casse bonbons...
Comment est-ce que je peux faire pour simplifier les lambda constants dans les équations eq2 et eq4 ? |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 25 Aoû 2011 7:30 Sujet du message: |
|
|
Bonjour,
Utilise plutôt fsolve pour les résolutions approchées, et en plus on peut spécifier un intervalle, ici lambda=0..100.
La fonction det est dans la package linalg.
Code: |
> L:=1.350:
> fsolve(linalg[det](A),lambda=0..100);
0.1227762958
|
Citation: |
Comment est-ce que je peux faire pour simplifier les lambda constants dans les équations eq2 et eq4 ?
|
On applique la fonction qui multiplie par lambda sur les 2 équations, et on développe:
Code: |
> eq2:=expand(map(x->x*lambda,eq2));
eq2 := C + E = 0
> eq4:=expand(map(x->x*lambda,eq4));
1.350 1.350 1.350
eq4 := C cos(------) - D sin(------) + E cosh(------)
lambda lambda lambda
1.350
+ F sinh(------) = 0
lambda
|
A plus tard. |
|
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.
|