Table des matières:

Créer un fichier Matlab MEX : 3 étapes
Créer un fichier Matlab MEX : 3 étapes

Vidéo: Créer un fichier Matlab MEX : 3 étapes

Vidéo: Créer un fichier Matlab MEX : 3 étapes
Vidéo: Matlab 01 Presentation 2024, Novembre
Anonim
Créer un fichier Matlab MEX
Créer un fichier Matlab MEX

Instructions sur la façon d'intégrer le code C compilé avec Matlab. MEX signifie MATLAB Executable. Les fichiers MEX sont des sous-programmes liés dynamiquement produits à partir du code source C ou Fortran qui, une fois compilés, peuvent être exécutés à partir de MATLAB de la même manière que les fichiers M MATLAB ou les fonctions intégrées. Les fonctions d'interface externe offrent des fonctionnalités pour transférer des données entre des fichiers MEX et MATLAB, et la possibilité d'appeler des fonctions MATLAB à partir de code C ou Fortran. Ici, je vais vous montrer tout ce dont vous avez besoin pour créer rapidement un fichier mex utile. besoin:= un éditeur de texte= matlab 6.1 ou supérieur (les versions antérieures peuvent faire des fichiers mex aussi mais un format légèrement différent) = matlab a son propre compilateur c qui l'accompagne, mais j'ai utilisé le compilateur visual c++ parce que je l'avais.

Étape 1: le code

Le code
Le code

téléchargez le fichier que j'ai joint: mextest1p0.cpp

cpp signifie c++ ……… Voici ce que fait le code:……… il prend un numéro que vous lui envoyez depuis l'invite de commande matlab. Il imprime "hello world" dans matlab, il renvoie deux arguments à matlab, un tableau de nombres à deux éléments et une chaîne le premier élément du tableau de nombres renvoyé est 1 + le nombre que vous lui avez envoyé le deuxième élément du tableau de nombres renvoyé est 2 + le numéro que vous lui avez envoyé ………. Voici comment l'implémenter:………… enregistrez le fichier sur votre ordinateur démarrez matlab naviguez dans matlab jusqu'au répertoire où se trouve le fichier puis suivez les instructions de compilation et d'exécution en haut du fichier.cpp. Je ne peux pas écrire ces instructions ici car instructables édite automatiquement les commandes et les fait apparaître de manière incorrecte. Dans l'image ci-dessous, vous pouvez voir le code fonctionner. Ne vous inquiétez pas de l'"avertissement de la ligne de commande", cela ne semble rien affecter. Remarquez sur le côté gauche, le répertoire courant contient le fichier.cpp. Sur la droite, vous pouvez me voir compiler le code puis l'exécuter à partir de matlab. Lisez le fichier dans votre éditeur de texte (par exemple le bloc-notes dans Windows), il est très bien documenté et explicite, vous pourrez faire presque tout ce dont vous avez besoin en suivant les conventions du code (c'est-à-dire le copier-coller et faire légères modifications) ################################################ ######################## …….. REMARQUE…….. en raison de certaines auto-éditions ennuyeuses que instructables fait, le code comme on le voit sur le page suivante NE FONCTIONNERA PAS, vous DEVEZ TÉLÉCHARGER LE FICHIER que j'ai joint au lieu de le copier-coller. ##################################################### ########################

Étape 2: Ceci est le code, NE PAS COPIER ET COLLER

Ceci est le code, NE PAS COPIER ET COLLER
Ceci est le code, NE PAS COPIER ET COLLER

##################################################### ####################…….. REMARQUE……..en raison de certaines auto-éditions ennuyeuses qu'instructables fait, le code comme vu sur cette page NE SERONT PAS TRAVAILLEZ, vous DEVEZ TÉLÉCHARGER LE FICHIER que j'ai joint au lieu de le copier-coller.################################## ########################################//Ceci a été écrit en c++ par leevonk// c'est un code pour un fichier matlab mex//le code prendra une valeur numérique et produira deux valeurs numériques//les deux nombres de sortie sont calculés à partir du nombre d'entrée//le code produira également une valeur de chaîne//le code aussi imprimer "hello world"#include "mex.h"void mexFunction(int nlhs, mxArray *plhs, int nrhs, mxArray *prhs) {//############## ##############################//########--print "hello world"--### ########//######################################## ###mexPrintf("Bonjour tout le monde");//###################################### #####//########--Obtenir des trucs de Matlab--##########//################ ############################/ * déclarer une variable de tableau pour contenir les valeurs entrantes */double* InValues;/* obtenir les valeurs envoyées depuis matlab */InValues = mxGetPr(prhs[0]);/* pour utiliser ces valeurs envoyées depuis matlab, faire InValues [0], InValue[1], etc selon le nombre de valeurs. Les InValues seront utilisées ci-dessous *///######################################## ##//########--Renvoyer un tableau de nombres--##########//################## ########################/* déclare le tableau qui sera envoyé à matlab (le * en fait un tableau) */double* OutValues;/ * Créer/allouer un argument de retour, une matrice 1x2 (1 ligne 2 colonnes) pour le premier emplacement du tableau de retour (plhs[0]) */plhs[0]=mxCreateDoubleMatrix(1, 2, mxREAL); /* Récupère le pointeur vers l'argument de retour */OutValues = mxGetPr(plhs[0]); /* attribuer des valeurs aux OutValues qui résideront dans le premier emplacement du tableau de retour, ici nous utilisons les InValues pour calculer les OutValues */OutValues[0] = InValues[0] + 1;OutValues[1] = InValues[0] + 2;//############################################// ##########--Renvoyer une chaîne--##############//################## ############################/* déclare la variable chaîne à envoyer à matlab */char* str;/* affecte une valeur au string */str = "byebye";/* place la chaîne dans le second slot du tableau de retour (plhs[1]) */plhs[1]=mxCreateString(str);//########## ##################################//###########--revenir Plus de matériel--############//################################ ############/* pour renvoyer plus de choses, suivez les règles générales ci-dessus mais placez les choses dans d'autres emplacements plhs, plhs[somenumber] */ }

Étape 3: Si, pour une raison quelconque, il ne compile pas

Si pour une raison quelconque, il ne compile pas
Si pour une raison quelconque, il ne compile pas

Si, pour une raison quelconque, il ne compile pas (il devrait fonctionner correctement sur mon ordinateur), consultez ces ressources, c'est de là que j'ai appris. Ils ont de petits défauts (l'utilisation d'une vieille grammaire non fonctionnelle, etc.) mais si vous faites des allers-retours entre les deux, vous devriez pouvoir concocter quelque chose qui fonctionne. Documentation/Calcul/matlab5v11/docs/00009/009a1.htmhttps://cnx.org/content/m12348/latest/

Conseillé: