|
Apprendre Maple Site dédié au logiciel de calcul formel Maple
|
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
didou31
Inscrit le: 08 Juin 2011 Messages: 2
|
Posté le: 08 Juin 2011 18:47 Sujet du message: Mais qu'est-ce qui te prend, Eval ? |
|
|
Bonjour,
Je débute avec Maple.
Et j'ai un problème avec l'évaluation. J'utilise Eval pour l'évaluation différée mais ça pourrait être pareil avec eval, je pense.
J'ai une expression avec la variable x, et des paramètres en x indicés avec A et B (pour mémoire, écrits de cette façon x_A, x_B).
J'ai écrit par exemple :
Eval(expr, x = 1);
Mais il effectue une substitution naïve. C'est à dire qu'il remplace xA et xB par 1A et 1B.
Y-a-t'il un moyen pour diriger la substitution ou faut-il que je renomme xA et xB ?
Peut-être faut-il déclarer xA et xB autrement que je ne l'ai fait.
Je vous remercie de m'éclairer. |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 10 Juin 2011 6:47 Sujet du message: |
|
|
Bonjour, n'avez vous pas oublié value(%) qui donne la valeur de l'expression précédemment affichée?
Code: |
> expr:=x^2+3*x+2:
> Eval(expr,x=1);
> value(%);
2 |
(x + 3 x + 2)|
|x = 1
6
|
On peut aussi utiliser subs:
Code: |
> expr:=x^2+3*x+2:
> subs(x=1,expr);
6
|
ou mieux, transformer l'expression en une fonction f de x:
Code: |
> expr:=x^2+3*x+2:
> f:=unapply(expr,x):f(1);
6
|
A bientôt. |
|
Revenir en haut de page |
|
|
didou31
Inscrit le: 08 Juin 2011 Messages: 2
|
Posté le: 12 Juin 2011 1:19 Sujet du message: |
|
|
J'ai remarqué la définition d'une fonction est traduite sous la forme d'une procédure (proc ... end proc).
Ce qui signifie que xa, ya, etc ... sont des variables non liées et globales. Ce qui est contraire la programmation, notamment dite fonctionnelle.
Je pense donc qu'il est plus attendu de déclarer xa, ya, ... comme des paramètres au même titre que x. Ca va sans doute m'attirer moins de problème, non ? |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 13 Juin 2011 6:27 Sujet du message: |
|
|
Absolument.
Les paramètres passés à une procédure MAPLE ne peuvent pas être modifiés par le code à l'intérieur de la procédure.
Exemple: Diviser un entier positif x par 2 tant qu'il est pair.
Code: |
> div:=proc(x::posint)
> while type(x,even) do x:=x/2 end do;
> end proc;
> div(48);
Error, (in div) illegal use of a formal parameter
|
La tentative d'affecter au paramètre formel x sa valeur divisée par 2 a provoqué une erreur.
On peut modifier la procédure de la manière suivante (on fait une copie de x dans la variable locale y et on travaille sur y):
Code: |
> div:=proc(x::posint)
> local y;
> y:=x;
> while type(y,even) do y:=y/2 end do;
> y
> end proc;
> div(48);
3
|
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.
|