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