Sommario:

Creare un file MEX Matlab: 3 passaggi
Creare un file MEX Matlab: 3 passaggi

Video: Creare un file MEX Matlab: 3 passaggi

Video: Creare un file MEX Matlab: 3 passaggi
Video: Tutorial: 6 》 Create .EXE (Executable) File from MATLAB Script (.m) File | MATLAB Compiler. 2024, Luglio
Anonim
Creare un file MEX Matlab
Creare un file MEX Matlab

Istruzioni su come integrare codice C compilato con Matlab. MEX sta per eseguibile MATLAB. I file MEX sono subroutine collegate dinamicamente prodotte dal codice sorgente C o Fortran che, una volta compilati, possono essere eseguiti da MATLAB allo stesso modo dei file M MATLAB o delle funzioni integrate. Le funzioni dell'interfaccia esterna forniscono funzionalità per trasferire dati tra file MEX e MATLAB e la possibilità di chiamare funzioni MATLAB da codice C o Fortran. Qui ti mostrerò tutto ciò di cui hai bisogno per creare rapidamente un utile file mex. bisogno: = un editor di testo = matlab 6.1 o versioni successive (le versioni precedenti possono fare anche file mex ma in un formato leggermente diverso) = matlab ha il proprio compilatore c che viene fornito con esso, ma ho usato il compilatore visual c ++ perché ce l'avevo.

Passaggio 1: il codice

Il codice
Il codice

scarica il file che ho allegato: mextest1p0.cpp

cpp sta per c++ ………Questo è ciò che fa il codice:……… ci vuole un numero che gli invii dal prompt dei comandi di matlab. Stampa "ciao mondo" in matlab restituisce due argomenti a matlab, un array di numeri di due elementi e una stringa il primo elemento dell'array di numeri restituito è 1 + il numero che gli hai inviato il secondo elemento dell'array di numeri restituito è 2 + il numero che hai inviato ………. Ecco come implementarlo:………… salva il file sul tuo computer avvia matlab naviga in matlab fino alla directory in cui si trova il file quindi segui le istruzioni di compilazione ed esecuzione nella parte superiore del file.cpp. Non posso scrivere queste istruzioni qui perché istruibili modifica automaticamente i comandi e li fa apparire in modo errato. Nell'immagine qui sotto puoi vedere il codice funzionante. Non preoccuparti per il "avviso della riga di comando", non sembra avere effetto su nulla. Notare sul lato sinistro, la directory corrente contiene il file.cpp. Sulla destra puoi vedermi compilare il codice e poi eseguirlo da matlab. Leggi il file nel tuo editor di testo (ad esempio il blocco note in Windows), è molto ben documentato ed esplicativo, sarai in grado di fare quasi tutto ciò di cui hai bisogno seguendo le convenzioni nel codice (cioè copiandolo e incollandolo e facendo lievi modifiche) ############################################## ######################## …….. NOTA…….. a causa di alcuni fastidiosi auto-editing che fanno, il codice come visto sul pagina successiva NON FUNZIONA, DEVI SCARICARE IL FILE che ho allegato invece di copiare e incollare questo. ################################################# ######################

Passaggio 2: questo è il codice, NON COPIARE E INCOLLARE

Questo è il codice, NON COPIARE E INCOLLARE
Questo è il codice, NON COPIARE E INCOLLARE

################################################# #####################…….. NOTA……..a causa di qualche fastidioso auto-editing che fa interactables, il codice come visto in questa pagina NON VERRÀ FUNZIONA, DEVI SCARICARE IL FILE che ho allegato invece di copiare e incollare questo.################################ ######################################//Questo è stato scritto in c++ da leevonk// è il codice per un file matlab mex//il codice prenderà un valore numerico e produrrà due valori numerici//i due numeri di output sono calcolati dal numero di input//il codice produrrà anche un valore stringa//il codice sarà stampa anche "hello world"#include "mex.h"void mexFunction(int nlhs, mxArray *plhs, int nrhs, mxArray *prhs) {//############# ############################//#######--stampa "ciao mondo"--### #########//###################################### ###mexPrintf("Ciao mondo");//#################################### #####//########--Ricevi roba da Matlab--#########//################ ##########################/ * dichiarare una variabile array per contenere i valori in entrata */double* InValues;/* ottenere i valori inviati da matlab */InValues = mxGetPr(prhs[0]);/* per utilizzare questi valori inviati da matlab, eseguire InValues [0], InValue[1], etcsecondo quanti valori ci sono. Gli InValues verranno utilizzati di seguito *///####################################### ##//########--Restituisci un array di numeri--#########//################### #######################/* dichiara l'array che verrà inviato a matlab (il * lo rende un array) */double* OutValues;/ * Crea/alloca argomento di ritorno, una matrice 1x2 (1 riga 2 colonna) per il primo slot dell'array di ritorno (plhs[0]) */plhs[0]=mxCreateDoubleMatrix(1, 2, mxREAL); /* Ottieni il puntatore all'argomento di ritorno */OutValues = mxGetPr(plhs[0]); /* assegna valori a OutValues che risiederanno nel primo slot dell'array di ritorno, qui stiamo usando InValues per computer OutValues */OutValues[0] = InValues[0] + 1;OutValues[1] = InValues[0] + 2;//##########################################// ###########--Restituisci una stringa--#############//################# ##########################/* dichiara la variabile stringa da inviare a matlab */char* str;/* assegna un valore al string */str = "arrivederci";/* inserisci la stringa nel secondo slot dell'array di ritorno (plhs[1]) */plhs[1]=mxCreateString(str);//########## ##################################//###########--Restituzione più roba--############//################################ ############/* per restituire più cose, segui le regole generali sopra ma metti le cose in altri plhs slot, plhs[somenumber] */ }

Passaggio 3: se per qualsiasi motivo non viene compilato

Se per qualsiasi motivo non viene compilato
Se per qualsiasi motivo non viene compilato

Se per qualsiasi motivo non si compila (dovrebbe, funziona bene sul mio computer) vedi queste risorse, sono dove ho imparato. Hanno piccoli difetti (l'uso di una vecchia grammatica non funzionale, ecc.) Ma se vai avanti e indietro tra i due dovresti essere in grado di mettere insieme qualcosa che funzioni.https://web.ccr.jussieu.fr/ccr/ Documentazione/Calcul/matlab5v11/docs/00009/009a1.htmhttps://cnx.org/content/m12348/latest/

Consigliato: