[users-fr] Passer des arguments par référence à une fonction écrite en scilab.
Adrien Vogt-Schilb
vogt at centre-cired.fr
Lun 4 Juin 14:34:44 CEST 2012
On 01/06/2012 22:56, Binoyte wrote:
> Bonjour,
>
> je voudrais savoir si il est possible de passer les arguments par
> référence a une fonction écrite en Scilab. En gros je cherche une
> analogie à l'écriture C++ suivante :
>
> void ma_fonction(struct & parametre)
> {
>
> parametre.propriete = ....;
>
> }
>
>
> En Scilab je ne trouve pas trop d'autres solutions que d'écrire :
>
> function this = ma_fonction (parametre)
>
> this = parametre;
> this.propriete = .....
>
> endfunction
>
>
> Le problème c'est qu'avec la version Scilab on fait d'abord une copie
> de la variable, ça prend du temps et beaucoup de ressources. D'autant
> qu'ensuite, dans mon programme, les fonctions sont appelées de
> nombreuses fois vue que je lance par la suite des fonctions
> d’optimisation. J'utilise des structures qui décrivent les composants
> mécaniques d'un système. L’optimisation peut faire varier le nombre de
> composants. Dans ce cas je ne pense pas pouvoir utiliser les variables
> globales, en tout cas, pas selon l'exemple ci- après :
>
> function ma_fonction (parametre)
>
> global parametre;
>
> parametre.propriete = .....
>
> endfunction
>
> //************
>
> global Monsieur;
> Monsieur.Age = 31;
>
> ma_fonction(Monsieur);
>
> Je vous remercie par avance de vos conseils.
>
> Cordialement,
>
En fait je ne suis pas sur de comprendre votre exemple
ma_fonction ne devrait-elle pas déclarer Monsieur comme global, plutot
que de le prendre comme argument? (comme le a dans mon premier mail)
allez vous utiliser un fsolve ou tout autre routine scilab pour
l'optimisation? si ce n'est pas le cas, je ne vois pas à priori pourquoi
vous ne pourriez pas utiliser de variables globales.
PS: êtes vous sur que la copie des arguments de vos fonctions occupe une
part significative du temps de calcul?
-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <https://lists.scilab.org/pipermail/users-fr/attachments/20120604/77db8b48/attachment.htm>
Plus d'informations sur la liste de diffusion users-fr