IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Utilisation MATLAB par une application c++


Sujet :

MATLAB

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Par défaut Utilisation MATLAB par une application c++
    bonjour,

    je travaille actuellement sur un projet qui vise a optimiser une chaine de production virtuelle. Mon projet consiste en l´implementation d´une methode d´optimisation a l´aide d´un algorithm fait avec matlab(donc un file.m) dans une application faite en c++ .J´aimerais savoir comment puis je faire communiquer un file.m avec des fichiers c++ et si c´est possible.
    En effet, j´ai besoin de pouvoir echanger des donnees entre l´application c++ et l´algorithm. L´algorithm doit fournir a l´application en c++ les coordonnees des points a evaluer et l´application c++ lance des simulations pour evaluer les points choisis par l´algorithm.Une fois l´evaluation faite l´algorithm a besoin de cette evaluation pour choisir d´autres points a evaluer.

    Mon maitre de projet m´a di que Matlab Compiler pourrait peut etre convenir mais apres avoir rechercher des infos sur ce compiler je suis un peu perdu.
    Quelqu´un peut il m´aider?

  2. #2
    Membre Expert
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Par défaut
    Pas besoin du MATLAB compiler.
    La fonction MEX de MATLAB te suffira pour échanger entre ton code MATLAB et C++.
    What are my options for interfacing MATLAB code with code in other programming languages like C, C++, or FORTRAN?
    Faut juste apprendre à écrire des mex-files en commençant par maitriser les exemples de la doc.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Par défaut
    J´ai regardé plusieurs exemples de mex files mais a chaque fois j´ai l´impression que les mex files utilisent les fonctions du fichier c++ et les affiche dans la commande windows et jamais le contraire.

    Je dois envoyer des vecteurs lignes ou colonnes et des nombres (double) de c++ a .m et de .m a c++.
    Quand j´envoie de .m a c++ j´ai juste besoin de stocker les nombres mais quand j´envoie de c++ a .m j´ai besoin de connaitre le resultat d´une fonction qui est dans le .m applique a ce que j´envoie dans le .m :
    par exemple j´envoie de c++ a .m (nombre,vecteur,vecteur) et je veux avoir en retour le resultat de la fonction initdone(nombre,vecteur,vecteur) qui est dans le file .m de l´algorithm.

    je suis novice en matlab et pas un professionnel en c++.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Par défaut
    En cherchant dans l´help de matlab je suis tombé sur c++ shared library et ca m´a semble bien correspondre a ce que je voulais faire. J´ai voulu tester l´exemple fourni par matlab mais j´ai un probleme quand je rentre cette commande :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     mcc -W cpplib:libmatrixp -T link:lib addmatrix.m multiplymatrix.m eigmatrix.m -v 
     
     
     
    Compiler version: 4.8 (R2008a) 
    Processing C:\Program Files\MATLAB\R2008a research\toolbox\matlab\mcc.enc 
    Processing include files... 
    2 item(s) added. 
    Processing directories installed with MCR... 
    The file mccExcludedFiles.log contains a list of functions excluded from the CTF archive. 
    1 item(s) added. 
    Generating MATLAB path for the compiled application... 
    Created 38 path items. 
    Begin validation of MEX files: Tue Mar 31 16:38:28 2009 
    Validating 'C:\Program Files\MATLAB\R2008a research\toolbox\compiler\deploy\deploywhich.mexw32'. 
    No conflicting M-file found. 
    Validating 'C:\Program Files\MATLAB\R2008a research\toolbox\compiler\deploy\readline.mexw32'. 
    No conflicting M-file found. 
    End validation of MEX files: Tue Mar 31 16:38:28 2009 
    Deleting 2 temporary MEX authorization files. 
    Removing: 'C:\DOCUME~1\STTO00~1.IT0\LOCALS~1\Temp\mathworks_tmp_5948_26828_5948.auth'. 
    Removing: 'C:\DOCUME~1\STTO00~1.IT0\LOCALS~1\Temp\mathworks_tmp_5948_18098_5948.auth'. 
    Parsing file "H:\data\essai_matlab_c++\addmatrix.m" 
    	(Referenced from: "Compiler Command Line"). 
    Parsing file "H:\data\essai_matlab_c++\multiplymatrix.m" 
    	(Referenced from: "Compiler Command Line"). 
    Parsing file "H:\data\essai_matlab_c++\eigmatrix.m" 
    	(Referenced from: "Compiler Command Line"). 
    Parsing file "C:\Program Files\MATLAB\R2008a research\toolbox\compiler\deploy\deployprint.m" 
    	(Referenced from: "Compiler Command Line"). 
    Parsing file "C:\Program Files\MATLAB\R2008a research\toolbox\compiler\deploy\printdlg.m" 
    	(Referenced from: "Compiler Command Line"). 
    Generating file "libmatrixp.h". 
    Generating file "libmatrixp.cpp". 
    Generating file "libmatrixp.exports". 
    Generating file "H:\data\essai_matlab_c++\readme.txt". 
    Generating file "libmatrixp_mcc_component_data.c". 
    Executing command: mbuild  -O -v -output "libmatrixp" "libmatrixp.cpp" "libmatrixp.exports" "libmatrixp_mcc_component_data.c" -link shared 
    'mbuild' is not recognized as an internal or external command, 
    operable program or batch file. 
    Error: An error occurred while shelling out to mbuild (error code = 1). 
    Unable to build executable. 
    ??? Error using ==> mcc
    Error executing mcc, return status = 1.
    J´ai trouvé des post dans des forums qui parlaient de ce probleme mais les liens qu´ils donnaient pour le solutionner etaient tous perimé.
    Quelqu´un a t´il deja eu ce probleme?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Par défaut
    tug 83, j´ai regarde les exemples donnees par matlab pour savoir comment utiliser les mex files mais il semble que ce ne soit pas ce que je veuille faire.En effet les mex files appellent des fonctions de programme en c/c++ pour les utiliser dans matlab.

    Moi je dois ecrire un fichier c++ dans une application ecrite en c++.
    Je recupere des donnees sous formes de tableau de l´application ecrite en c++ dans mon fichier c++ et je dois utiliser des methodes decrites dans un algorithm (fichier .m) ,et les appliquer aux tableaux que j´ai recuperer.
    Apres je dois recuperer le resultat des methodes de l´algorithm ,qui sont de format tableau, dans mon fichier c++ pour pouvoir les reinjecter dans l´application c++.

    Je sais pas si c´est clair mais en me relisant ca me parait assez proche de ce que je veux faire.
    Utiliser c++ shared library ne serait il pas une bonne solution a mon probleme.

  6. #6
    Membre chevronné

    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Par défaut
    Si la machine ou tu vas deployer l'application dispose de MATLAB, tu peux utiliser le 'matlab engine':

    http://www.mathworks.com/access/help...al/f29148.html

    Si ce n'est pas le cas, tu peux compiler tes fichiers m-files avec le MATLAB compiler en temps que librarie. Ceci te permettera d'appeler ces fonctions depuis ton programme C++ (le compiler te fournira typiquement un fichier .h, .lib et .dll).


    Salutations,

    Greg

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Par défaut
    merci paradize,
    en faite on m´a conseille d´utiliser la library DLL cree par matlab compiler, donc je suis entrain d´apprendre comment appeler un .dll avec du C/C++. Mais j´ai un probleme je n´arrive pas a ouvrir mon .dll ni avec matlab ni avec c++ builder 6. En faite je veux pouvoir l´ouvrir pour voir exactement ce qu´il y a dedans.
    Aussi, je trouve pas beaucoup de docs concernant les dll et comment les appeler.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 41
    Par défaut
    Il existe des petits logiciels qui scan ta Dll et indiquent les fonctions utilisables avec leurs arguments associés, de mémoire il me semble qu'un outil associé à Visual Studio permet de faire ceci.

    Par contre une Dll est un fichier compiler, tu ne pourra avoir accès au code si tu ne dispose pas des sources

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Par défaut
    merci sylfurd,
    j´ai reussi a utiliser ma library en modifiant un exemple donne par matlab qui permet d´afficher le resultat d´une fonction faite sous matlab.(matrixdriver.c)
    Mais par contre j´ai du mal avec tous les mxArray et tous les pointeurs a modifier la structure complete du programme.
    Les mxArray sont les tableaux qu´ont echangent entre le c et les libraries de matlab mais les fonctions mx sont toutes avec des pointeurs comme arguments.J´ai pas trop mal compris ce qu´est un pointeur, mais pourtant je comprend pas grand chose sur les mxArray*.
    j´aimerais arrive a stocker les elements qui se trouvent dans les mxArray afin de les exporter vers une application.
    Par quoi faut il commencer avant de se lancer la dedans?
    Faut t il que je passe un peu de temps avec le langage c avant de m´attaquer au fichier .c qui utilise des libraries dll? Ma question est bete mais bon les mxArray* j´ai bien l´impression que c´est un peu difficile quand meme?

Discussions similaires

  1. DLL utilisées par une application Qt
    Par black_hole dans le forum Débuter
    Réponses: 2
    Dernier message: 15/01/2013, 10h43
  2. Utiliser un code MATLAB dans une application Android
    Par Spydeus dans le forum MATLAB
    Réponses: 5
    Dernier message: 17/11/2011, 01h07
  3. Utiliser ssh dans une application java
    Par Samanta dans le forum Sécurité
    Réponses: 12
    Dernier message: 28/02/2007, 16h30
  4. Réponses: 3
    Dernier message: 18/09/2006, 16h42
  5. Utilisation Mémoire d'une application
    Par scorplex dans le forum Composants VCL
    Réponses: 8
    Dernier message: 21/05/2005, 03h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo