Une fonction qui renvoie une fonction

Utilisation de Xcas

Modérateur : xcasadmin

cdeval
Messages : 192
Inscription : mer. juin 03, 2009 4:28 pm

Une fonction qui renvoie une fonction

Message par cdeval » lun. déc. 07, 2009 10:33 am

Bonjour à tous (et à Bernard en particulier !)
Je définis une fonction par morceau, ça marche :

Code : Tout sélectionner

test():={
local f,t;
f(t):=ifte(t<3,t+1,6-2t);
return f;
}
:;
test()(1) revoie le bon résultat.

mais test()(t) renvoie : "Ifte: Unable to check test Error: Bad Argument Value"
et j'aimerais aussi faire :
assume(t<3)
test()(t) pour obtenir t-->6-2t

ceci pour mon cours sur les courbes B-spline avec mes BTS.
Merci de vos idées

parisse
Messages : 5894
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: Une fonction qui renvoie une fonction

Message par parisse » lun. déc. 07, 2009 4:38 pm

Il y a un problème de masquage de l'hypothèse à cause de la variable de f qui est la même que la valeur de l'argument. Je ne vois pas comment le résoudre... Il faut donc utiliser un autre nom de variable. Ou alors remplacer ifte par when pour eviter l'erreur et évaluer la réponse.

Code : Tout sélectionner

test():={
local f,t;
f(t):=when(t<3,t+1,6-2t);
return f;
}:;
assume(t<3);
eval(test()(t))

cdeval
Messages : 192
Inscription : mer. juin 03, 2009 4:28 pm

Re: Une fonction qui renvoie une fonction

Message par cdeval » lun. déc. 07, 2009 10:11 pm

merci,
j'ai choisi l'option "changement du nom de variable" parce qu'avec when un appel du genre test()(t+1) donne le même résultat que test()(t)... alors que c'est bon avec ifte.
A+

parisse
Messages : 5894
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: Une fonction qui renvoie une fonction

Message par parisse » mar. déc. 08, 2009 7:49 am

C'est parce que t ne doit pas etre declaree comme une variable locale, car c'est de fait une variable globale. Ou alors il faut la purger.

Code : Tout sélectionner

test():={
local f,t;
purge(t);
f(t):=when(t<3,t+1,6-2t);
return f;
}:;

Répondre