Contenu de variables
Modérateur : xcasadmin
Contenu de variables
Bonjour,
Je travaille sur un projet qui me demande de définir des variables dépendantes. J'ai différents traitements à effectuer sur ces variables. Le problème est que xcas remplace directement les expressions par le contenu de la variable.
Je m'explique dans l'expression de p[1], j'aimerai gardé explicitement p[0], est ce possible?
// Definition of the homogeneous transformation matrices.
T0G[0]:= Trotz(q[0]) * Tdisp(lc/2,0,0);
T0G[1] := Tdisp(p[1],0,0) * Trotz(-p[0]) * Tdisp(-lr/2,0,0);
T0G[2] := Tdisp(p[1],0,0);
// Dependent parameters.
p[0] := arcsin(lc*sin(q[0])/lr);
p[1] := lc*cos(q[0]) + lr*cos(p[0]);
Merci d'avance
Alexandre
Je travaille sur un projet qui me demande de définir des variables dépendantes. J'ai différents traitements à effectuer sur ces variables. Le problème est que xcas remplace directement les expressions par le contenu de la variable.
Je m'explique dans l'expression de p[1], j'aimerai gardé explicitement p[0], est ce possible?
// Definition of the homogeneous transformation matrices.
T0G[0]:= Trotz(q[0]) * Tdisp(lc/2,0,0);
T0G[1] := Tdisp(p[1],0,0) * Trotz(-p[0]) * Tdisp(-lr/2,0,0);
T0G[2] := Tdisp(p[1],0,0);
// Dependent parameters.
p[0] := arcsin(lc*sin(q[0])/lr);
p[1] := lc*cos(q[0]) + lr*cos(p[0]);
Merci d'avance
Alexandre
Alexandre Mollet
Re: Contenu de variables
Oui, c'est possible en indiquant un niveau d'évaluation (2ème paramètre optionnel d'eval) ou en empechant l'évaluation par des quotes. Le niveau d'évaluation désigne le nombre de fois qu'une variable doit être remplacé par son contenu récursivement.
Par exemple
a:=b+1;
b:=c+1;
Attention à l'ordre de définition de a et b, si on définit b avant a, il faudra écrire a:='b'+1 pour que b ne soit pas remplacé par c+1 dans la définition de a.
Ensuite si on fait a+1, ça renvoie c+1+1+1 (b a été remplacé), par contre si on fait eval(a,1)+1 ca renvoie b+1+1 (b n'a pas été remplacé).
Par défaut en mode interactif, le niveau d'évaluation est de 25 (pas plus pour éviter des défintions récursives). Par contre dans un programme, le niveau est de 1. On peut changer ces paramètres dans la configuration (clic sur la ligne d'état, champs eval et prog au début).
Par exemple
a:=b+1;
b:=c+1;
Attention à l'ordre de définition de a et b, si on définit b avant a, il faudra écrire a:='b'+1 pour que b ne soit pas remplacé par c+1 dans la définition de a.
Ensuite si on fait a+1, ça renvoie c+1+1+1 (b a été remplacé), par contre si on fait eval(a,1)+1 ca renvoie b+1+1 (b n'a pas été remplacé).
Par défaut en mode interactif, le niveau d'évaluation est de 25 (pas plus pour éviter des défintions récursives). Par contre dans un programme, le niveau est de 1. On peut changer ces paramètres dans la configuration (clic sur la ligne d'état, champs eval et prog au début).
Re: Contenu de variables
Merci pour votre réponse mais j'ai quand-même un problème avec l'attribution d'une valeur à une variable. Dans l'exemple ci-dessous:
p[0] := arcsin(lc*sin(q[0])/lr);
tmp[0]:=p[0];
purge(p[0]);
print(p[0]);
p[1] := lc*cos(q[0]) + lr*cos('p[0]');
print(p[1]);
__________________________________
p[0] --> asin((lc*sin(q[0]))/lr)
p[1] --> lc*cos(q[0])+lr*cos(p[0])
Il ne m'enlève pas la valeur de la variable...
Par contre, lorsque je veux que l'utilisateur rentre la valeur d'une variable:
Input("Quel est le nom du fichier ? ",FichierUtil);
Il n'y a rien dans la variable Fichier Util...
J'avoue que je suis un peu perdu...
p[0] := arcsin(lc*sin(q[0])/lr);
tmp[0]:=p[0];
purge(p[0]);
print(p[0]);
p[1] := lc*cos(q[0]) + lr*cos('p[0]');
print(p[1]);
__________________________________
p[0] --> asin((lc*sin(q[0]))/lr)
p[1] --> lc*cos(q[0])+lr*cos(p[0])
Il ne m'enlève pas la valeur de la variable...
Par contre, lorsque je veux que l'utilisateur rentre la valeur d'une variable:
Input("Quel est le nom du fichier ? ",FichierUtil);
Il n'y a rien dans la variable Fichier Util...
J'avoue que je suis un peu perdu...
Alexandre Mollet
Re: Contenu de variables
C'est parce que p[0] n'est pas un nom de variable. Lorsque vous ecrivez
p[0] := arcsin(lc*sin(q[0])/lr);
vous creez une table (dans la variable p) avec une entree 0 -> arcsin(lc*sin(q[0])/lr). Et xcas ne fait rien pour purge(p[0]). Il faudrait faire purge(p) mais ca effacerait aussi p[1].
Je pense que je vais modifier ca et faire que purge(p[0]) efface l'entree 0 de la table p.
Pour Input, ca marche bien chez moi, est-ce que vous utilisez la derniere mise a jour de Xcas et si oui pour quel OS?
p[0] := arcsin(lc*sin(q[0])/lr);
vous creez une table (dans la variable p) avec une entree 0 -> arcsin(lc*sin(q[0])/lr). Et xcas ne fait rien pour purge(p[0]). Il faudrait faire purge(p) mais ca effacerait aussi p[1].
Je pense que je vais modifier ca et faire que purge(p[0]) efface l'entree 0 de la table p.
Pour Input, ca marche bien chez moi, est-ce que vous utilisez la derniere mise a jour de Xcas et si oui pour quel OS?
Re: Contenu de variables
Bonjour,
Je pense que je vais pouvoir m'en sortir. Une dernière question, les champs eval et prog peuvent-ils être modifiés en cours de programme? Quelles sont les instructions à taper dans un programme pour modifier ces champs dans le programme et pas dans le paramétrage config xcas > ...
Merci d'avance
Je pense que je vais pouvoir m'en sortir. Une dernière question, les champs eval et prog peuvent-ils être modifiés en cours de programme? Quelles sont les instructions à taper dans un programme pour modifier ces champs dans le programme et pas dans le paramétrage config xcas > ...
Merci d'avance
Alexandre Mollet
Re: Contenu de variables
J'ai fait la modif pour que purge(p[0]) marche (version win a jour, les autres prochainement).
Pour la gestion des niveaux d'evaluation, il n'y a actuellement pas de commandes Xcas mais c'est assez facile a ajouter, par exemple on pourrait definir eval_level et prog_eval_level.
Pour la gestion des niveaux d'evaluation, il n'y a actuellement pas de commandes Xcas mais c'est assez facile a ajouter, par exemple on pourrait definir eval_level et prog_eval_level.
Re: Contenu de variables
OK, Pourriez-vous me tenir informer si vous pouvez faire ces modifications?
Si oui, me dire dans quelle version je pourrai les retrouver?
Merci c'avance,
Alexandre Mollet
PS: Mon programme se termine, je vous enverrai un descriptif précis du tout quand il sera terminé. Merci encore pour votre aide et votre réactivité lors des derniers mois.
Si oui, me dire dans quelle version je pourrai les retrouver?
Merci c'avance,
Alexandre Mollet
PS: Mon programme se termine, je vous enverrai un descriptif précis du tout quand il sera terminé. Merci encore pour votre aide et votre réactivité lors des derniers mois.
Alexandre Mollet
Re: Contenu de variables
j'ai oublie de vous dire que j'ai mis a jour la version de xcas pour win (et autres os), avec la commande eval_level qui je l'espere fonctionne!