Bonjour,


J'ai parcouru le forum à la recherche d'informations, mais n'ai cependant pas trouvé ce que je cherche.
Je vous expose donc ma situation et ce que je souhaite faire afin de pouvoir trouver une solution ensemble.

Le principe général de ma demande est simple, j'ai un programme Matlab que je souhaite appeler depuis une API C++ programmée.
Engine.h permettant de le faire, j'ai procédé à quelques tests.
Quand j'ai un programme Matlab "simple" du style résolution d'équation comme suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
function S = solvesystem
 
A = [4 2 ; 1 -5];
B = [5 ; 4];
 
S = A\B;
Je fais en C++
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
Engine *ep;
mxArray *S;
ep = engOpen(NULL);
engEvalString(ep, "addpath('chemin')");
engEvalString(ep, "S = solvesystem");
 
result = engGetVariable(ep, "S");
S = mxGetPr(result);
printf("S = [%f %f]", S[0], S[1]);
 
engClose(ep);
J'obtiens mon résultat, ceci fonctionne.
Je pars donc du principe que pour tout programme Matlab de ce genre, ce raisonnement est bon.

------

Voici la situation dans laquelle je suis :
Je dispose sur Matlab de fichiers classes, de fichier définissant les algorithmes de Dijkstra et A*, d'un fichier définissant la matrice d'adjacence, d'un fichier exécutant les algorithmes, et d'un fichier permettant l'affichage des résultats sur Matlab.
Je souhaite dans un premier temps que l'API transmette des informations à Matlab afin de générer de nouvelles matrices adjacences (la taille sera fixée par un autre fichier .cpp) automatiquement, puis dans un second temps que Matlab renvoie le résultat de l'exécution de mes algo à l'API.
S'offrent à moi deux possibilités :
* La première est d'appeler le fichier affichant les résultats
* La seconde est d'appeler le fichier exécutant les algorithmes
Pour chacune de ces deux possibilité le fichier que j'appellerai dépend de plusieurs fichiers (au moins 2 chacun).
Mon objectif est de récupérer l'ensemble des résultats de l'exécution des algorithmes, et de les stocker dans des variables C++ afin de les utiliser via mon API.

Mon problème est que je ne vois pas comment procéder.
C'est la première fois que j'utilise engine.h


Si je prend la première option, je disposerai de plusieurs fichiers à appeler, est-ce que je dois déclarer un nouveau *ep pour chacun d'eux ou un seul suffit-il ?
Dans l'exemple en haut, le double *S est très utilise puisque je n'ai que des nombres, cependant, je dépend ici de variables graph (de type graph créés sur Matlab). Je ne suis donc pas convaincu que double soit bien adéquat à ma situation.

Si je prend la seconde, j'appellerai une fonction ayant plusieurs paramètres (graph, point de départ, destination). Comment indiquer ces paramètres depuis C++ ?

Ou alors, autre solution pour laquelle je n'ai pas encore vraiment réfléchi :
Est-ce que faire un nouveau programme Matlab dans lequel je stocke tous les résultats dans un tableau, qui lui sera appelé par mon API ne serait pas plus judicieux ?



Autre point aussi, j'ai cru voir du côté C++ des fonction mxSet. Est-ce que l'une d'elle me permettait de transmettre mes info à Matlab ou dois-je utiliser autre chose ?



Je vous remercie par avance pour votre compréhension et vos réponses,

Bien cordialement.