|
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: 29 Aoû 2011 10:57 Sujet du message: Problème d'affectation de variables |
|
|
Bonjour,
J'ai un programme qui utilise une variable lambda que j'utilise à plusieurs reprises. Mais, j'ai des problèmes d'affectation de sa valeur. Les lignes de code à partir de "Détermination du mode propre 2" ne fonctionne plus et j'aimerais les faire fonctionner. J'ai par contre du mal à expliquer mon soucis car je ne comprends pas l'erreur. J'espère que vous allez pouvoir à partir de mon code m'indiquer les corrections à faire.
Je vous remercie d'avance pour votre aide
Code: |
restart;
with(linalg):
with(LinearAlgebra):
Détermination des pulsations propres et modes propres
Phi:=x->C_*sin(x/lambda)+D_*cos(x/lambda)+E_*sinh(x/lambda)+F_*cosh(x/lambda);
Theta:=D(Phi);
#Equations du système
eq1:=Phi(0)=0;
eq2:=Theta(0)=0;
eq2:=expand(map(x->x*lambda,eq2));
eq3:=Phi(L)=0;
eq4:=Theta(L)=0;
eq4:=expand(map(x->x*lambda,eq4));
#Mise sous forme matricielle du système
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);
#Détermination des valeurs propres
L:=1.350;
lambda[1]:=fsolve(det(A)=0,lambda=0.2..0.5);
beta[1]:=1/lambda[1]:
XX[1]:=beta[1]^2*L^2;
lambda[2]:=fsolve(det(A)=0,lambda=0.15..0.2);
beta[2]:=1/lambda[2]:
XX[2]:=beta[2]^2*L^2;
lambda[3]:=fsolve(det(A)=0,lambda=0.10..0.15);
beta[3]:=1/lambda[3]:
XX[3]:=beta[3]^2*L^2;
lambda[4]:=fsolve(det(A)=0,lambda=0..0.15);
beta[4]:=1/lambda[4]:
XX[4]:=beta[4]^2*L^2;
E:=210*10^9;
b:=25*10^(-3);
h:=4*10^(-3);
s:=b*h;
Iq:=(b*h^3)/12;
rho:=7800;
omega[1]:=evalf(1/lambda[1]*sqrt((E*Iq)/(rho*s)));
omega[2]:=evalf(1/lambda[2]*sqrt((E*Iq)/(rho*s)));
omega[3]:=evalf(1/lambda[3]*sqrt((E*Iq)/(rho*s)));
omega[4]:=evalf(1/lambda[4]*sqrt((E*Iq)/(rho*s)));
#Détermination du mode propre 1
C_:=1;
lambda:=lambda[1];
s:=solve({eq2,eq3,eq4},{D_,E_,F_});
assign(s);
evalm(A&*X);
plot(Phi(x),x=0..L);
#Détermination du mode propre 2
C_:=1;
unsassign(lambda);
unsassign(s);
lambda:=lambda[2];
s:=solve({eq2,eq3,eq4},{D_,E_,F_});
assign(s);
evalm(A&*X);
plot(Phi(x),x=0..L);
|
|
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 30 Aoû 2011 8:19 Sujet du message: |
|
|
Bonjour,
Le problème était la perte de la valeur de lambda[2] suite à l'instruction unsassign(lambda);
J'ai donc baptisé les valeurs propres l[k] plutôt que lambda[k] pour ne plus avoir ce problème, et je désaffecte les valeurs de D_,E_,F_ avec les instructions D_:='D_': E_:='E_': F_:='F_':
Tout semble normalement fonctionner maintenant.
Code: |
> restart;
> with(linalg):
> with(LinearAlgebra):
> #Détermination des pulsations propres et modes propres
> Phi:=x->C_*sin(x/lambda)+D_*cos(x/lambda)+E_*sinh(x/lambda)+F_*cosh(x/lambda);
> Theta:=D(Phi);
>
> #Equations du système
>
> eq1:=Phi(0)=0;
> eq2:=Theta(0)=0;
> eq2:=expand(map(x->x*lambda,eq2));
> eq3:=Phi(L)=0;
> eq4:=Theta(L)=0;
> eq4:=expand(map(x->x*lambda,eq4));
>
> #Mise sous forme matricielle du système
>
> 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);
>
>
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
eq2 := C_ + E_ = 0
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
L L L
eq4 := C_ cos(------) - D_ sin(------) + E_ cosh(------)
lambda lambda lambda
L
+ F_ sinh(------) = 0
lambda
A :=
[0 , 1 , 0 , 1]
[1 , 0 , 1 , 0]
[ L L L L ]
[sin(------) , cos(------) , sinh(------) , cosh(------)]
[ lambda lambda lambda lambda ]
[ L L L L ]
[cos(------) , -sin(------) , cosh(------) , sinh(------)]
[ lambda lambda lambda lambda ]
[C_]
[ ]
[D_]
X := [ ]
[E_]
[ ]
[F_]
[0]
[ ]
[0]
B := [ ]
[0]
[ ]
[0]
[0 , 1 , 0 , 1]
[1 , 0 , 1 , 0]
[ L L L L ]
[sin(------) , cos(------) , sinh(------) , cosh(------)]
[ lambda lambda lambda lambda ]
[ L L L L ] &*
[cos(------) , -sin(------) , cosh(------) , sinh(------)]
[ lambda lambda lambda lambda ]
[C_] [0]
[ ] [ ]
[D_] [0]
[ ] = [ ]
[E_] [0]
[ ] [ ]
[F_] [0]
> #Détermination des valeurs propres
>
> L:=1.350;
>
> l[1]:=fsolve(det(A)=0,lambda=0.2..0.5);
> beta[1]:=1/l[1]:
> XX[1]:=beta[1]^2*L^2;
>
> l[2]:=fsolve(det(A)=0,lambda=0.15..0.2);
> beta[2]:=1/l[2]:
> XX[2]:=beta[2]^2*L^2;
>
> l[3]:=fsolve(det(A)=0,lambda=0.10..0.15);
> beta[3]:=1/l[3]:
> XX[3]:=beta[3]^2*L^2;
>
> l[4]:=fsolve(det(A)=0,lambda=0..0.15);
> beta[4]:=1/l[4]:
> XX[4]:=beta[4]^2*L^2;
>
> E:=210*10^9;
> b:=25*10^(-3);
> h:=4*10^(-3);
> s:=b*h;
> Iq:=(b*h^3)/12;
> rho:=7800;
>
> omega[1]:=evalf(1/l[1]*sqrt((E*Iq)/(rho*s)));
> omega[2]:=evalf(1/l[2]*sqrt((E*Iq)/(rho*s)));
> omega[3]:=evalf(1/l[3]*sqrt((E*Iq)/(rho*s)));
> omega[4]:=evalf(1/l[4]*sqrt((E*Iq)/(rho*s)));
>
L := 1.350
l[1] := 0.2854098036
XX[1] := 22.37328545
l[2] := 0.1719043454
XX[2] := 61.67282285
l[3] := 0.1227762958
XX[3] := 120.9033916
l[4] := 0.07813060814
XX[4] := 298.5555353
E := 210000000000
b := 1/40
h := 1/250
s := 1/10000
Iq := 1/7500000000
rho := 7800
omega[1] := 20.99243550
omega[2] := 34.85337663
omega[3] := 48.79970400
omega[4] := 76.68501549
> #Détermination du mode propre 1
>
> C_:=1;
> lambda:=l[1];
> s:=solve({eq2,eq3,eq4},{D_,E_,F_});
> assign(s);
> evalm(A&*X);
> plot(Phi(x),x=0..L);
>
C_ := 1
lambda := 0.2854098036
s := {D_ = -1.017809414, E_ = -1., F_ = 1.017809411}
[ -8]
[-0.3 10 ]
[ ]
[ 0. ]
[ ]
[ -7 ]
[0.2 10 ]
[ ]
[ -7 ]
[0.2 10 ]
> #Détermination du mode propre 2
>
> C_:=1;
> lambda:=l[2];
> D_:='D_': E_:='E_': F_:='F_':
> s:=solve({eq2,eq3,eq4},{D_,E_,F_});
> assign(s);
> evalm(A&*X);
> plot(Phi(x),x=0..L);
>
C_ := 1
lambda := 0.1719043454
s := {D_ = -0.9992242786, E_ = -1., F_ = 0.9992232915}
[ -6]
[-0.9871 10 ]
[ ]
[ 0. ]
[ ]
[ 0. ]
[ ]
[ 0. ]
|
A plus tard. |
|
Revenir en haut de page |
|
|
bendesarts
Inscrit le: 27 Fév 2009 Messages: 234
|
Posté le: 30 Aoû 2011 9:08 Sujet du message: |
|
|
Merci beaucoup pour votre aide.
D'autant que j'ai trouvé que je n'étais pas particulièrement clair dans la question précédente...
Moralité, quand on utilise [] pour faire une notation sur des variables, mieux vaut repartir sur une nouvelle variable (ici l à la place de lambda). |
|
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.
|