Fonctions
Christophe Geuzaine
Christophe.Geuzaine at ulg.ac.be
Mon Jul 17 14:08:15 CEST 2000
Francois Henrotte wrote:
>
> Donc,
> Peux-tu me confirmer que l'on peut faire des fonctions
> dependant de plusieurs parametres, comme par exemple
> une reluctivite qui dependrait a la fois de b et de la temperature.
Oui, je confirme.
>
> Dans les notes, les arguments des fonctions sont notes $1,
> moi j'ai toujours vu #1 avec la ritournelle initiale $1#1.
> Quelle est la difference >
C'est une limitation dans la programmation des expressions... $N
represente bien le Nieme argument. Mais quand on l'utilise a plusieurs
reprises dans une expression, et que cette expression est recursive, la
methode employee actuellement est fausse. #N represente la valeur
contenue dans le Nieme "registre". Donc, pour eviter d'evaluer plusieurs
fois un argument dans une expression recursive, on le stocke dans un
registre ($1#1). mais comme $1#1 retourne la valeur de l'argument sur la
pile, on multiplie tout ca par zero. Apres, plus besoin de reevaluer
l'argument : il suffit d'evaluer le registre.
>
> Prendra-ce la forme suivante ?
>
> nu [ SECONDARY ] = $1#1 *0 + $2#2 *0 + <Real>[
> nu0 - sqrt((#2-Tinf)/(Tcur-Tinf)) *
> ( nu0 - nuor * ( (#1<bsat) ? 1.:10.^(1.86*(#1-bsat)) )) ] ;
>
Oui.
> Dois-je comme je le fis ajouter un truc du genre $2#2 *0 ?
>
> Dois dans le champ `Formulation' ecrire
>
> bla bla ... nu[{d a , T}] ...
>
Non.
> ou alors
>
> bla bla ... nu[{d a}, {T}] ... ?
>
Oui : les accolades entourent les "Quantities" a evaluer.
> Peux-t-on scinder une fonction en deux fonctions imbriquees ?
>
> nuref [ SECONDARY ] = $1#1 *0 + <Real>[
> nuor * ( (#1<bsat) ? 1.:10.^(1.86*(#1-bsat)) ) ] ;
>
> nu [ SECONDARY ] = $1#1 *0 + $2#2 *0 + <Real>[
> nu0 - sqrt((#2-Tinf)/(Tcur-Tinf)) *
> ( nu0 - nuref[#1] ) ] ;
>
> (Pour cette derniere question, j'ai l'impression
> que la reponse est non)
Non, ca devrait marcher. Mais je stockerais (une fois pour toutes) les
valeurs des arguments dans nu[], et les utiliserais dans nuref[] :
nuref [ SECONDARY ] = nuor * ( (#1<bsat) ? 1.:10.^(1.86*(#1-bsat)) ) ;
nu [ SECONDARY ] = $1#1 *0 + $2#2 *0 + <Real>[
nu0 - sqrt((#2-Tinf)/(Tcur-Tinf)) *
( nu0 - nuref[] ) ] ;
--
Christophe Geuzaine
Tel: +32-(0)4-366.37.10 mailto:Christophe.Geuzaine at ulg.ac.be
Fax: +32-(0)4-366.29.10 http://www.geuz.org