Interfaçage C-Scilab
Discutez d'informatique ici !
-
mysa
- Messages: 3
- Enregistré le: 01 Juin 2010, 15:14
-
par mysa » 01 Juin 2010, 15:19
Bonjour à tous.
je cherche un moyen d'interfacer le package "qhull" (
http://www.qhull.org/), codé en C, sous Scilab.
Ce package permet entre autres de déterminer l'enveloppe convexe d'un ensemble de points.
L'idée serait donc de déterminer l'enveloppe convexe d'un ensemble de points avec Scilab (en faisant appel aux fonctions de qhull).
J'ai réussi à interfacer des fonctions C simples et indépendantes sous Scilab (telles que la multiplication de matrice, l'addition d'entiers etc.) mais cela devient biensûr plus compliqué dans le cas du package "qhull", où il s'agit d'interfacer une vingtaine de fichier .c tous liés les uns aux autres et pouvant comporter 3 ou 4 fonctions chacun.
Avez-vous des pistes ? des idées ?
Merci d'avance.
-
Olympus
- Membre Irrationnel
- Messages: 1668
- Enregistré le: 12 Mai 2009, 11:00
-
par Olympus » 04 Juin 2010, 22:57
Salut,
je ne connais pas bien les CAS ( j'ignorais même qu'on pouvait appeller dynamiquement des fonctions externes d'un programme codé en C par exemple ), mais tu pourrais quand même contacter l'auteur de Qhull par mail sur
qhull@qhull.org , car puisque ce que tu demandes a déjà été fait pour Mathematica, Matlab et Maple, cela ne devrait pas être dur de le faire aussi pour Scilab .
-
mysa
- Messages: 3
- Enregistré le: 01 Juin 2010, 15:14
-
par mysa » 05 Juin 2010, 18:20
merci d'avoir répondu Olympus.
J'ai déjà essayé mais je n'ai pas eu de réponses je vais les relancer.
-
buzard
- Membre Relatif
- Messages: 274
- Enregistré le: 22 Mai 2006, 14:29
-
par buzard » 11 Juin 2010, 23:31
Bonsoir,
tu peut utiliser la fonction call ou fort pour appeler du C ou du fortran (ancienne mouture pas du c++ encore), la syntaxe est lourde mais ça évite l'effort de création d'un adaptateur.
si tu compte appeler la fonction plusieurs fois, je te conseil quand même un wrapper utilisant l'api (voir toolbox pour scilab). de toute manière si les fonctions appelées sont mal formaté, tu n'y échappera pas.
là où tu va buter c'est sur la taille des sorties, étant donné qu'elle est indéterminé il faut tricher un peu mais on s'en sort.
Je ne croit pas qu'il y ai un gain significatif de performance entre une implementation en scilab et l'utilisation de la librairie, là ou tu gagne du temps en acces sur les structures, tu le perd en encapsulation des données.
EDIT: je viens de voir que la librairie qhull marche aussi comme un interpreteur, tu a la possiblité hautement plus simple d'utiliser les fonctions host, unix_g, ...
-
mysa
- Messages: 3
- Enregistré le: 01 Juin 2010, 15:14
-
par mysa » 13 Juin 2010, 17:40
slt buzard.
Oui j'avais déjà vu pour la fonction "call" mais vu que c'est tout un package que je dois interfacer il faudrait que je crée un fichier pour chaque fonction en gros et ça risque d'être très fastidieux...
j'essaye de voir ce que ça donne avec le programme swig, ça a l'air pas mal, je l'utilise sur des fonctions simples pour l'instant.
tu peux préciser le dernier point stp buzard ? qu'entends-tu par le fait que qhull est un interpréteur ? Je ne connais pas bien les fonctions host et unix_g, tu peux m'en dire plus stp?
merci.
-
buzard
- Membre Relatif
- Messages: 274
- Enregistré le: 22 Mai 2006, 14:29
-
par buzard » 14 Juin 2010, 11:06
tu doit quand même mieux connaitre la librairie que moi. Je suis allez sur leur site, et j'ai vu qu'il utilise un interpreteur en ligne de commande rbox ou un truc du genre, il suffit donc de faire un appel shell à cette commande en entrant préalablement les données dans un fichier sous le format souhaité par la libraire, puis tu récupère la sortie de la commande donc les résultats dans un autre fichier :
1. Mettre les données dans un fichier du style "input.data.file"
2. Appelez l'interpreteur avec les commandes souhaités
qconvex "commande.file" "input.data.file" > "output.result.file"
3. Recuperer les résultats depuis le fichier de sortie
avec scilab, les appels shell se font via la commande host (va voir l'aide pour plus d'info sur la syntaxe de la fonction)
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 6 invités