Tabla de contenido:

Hacer un archivo MEX de Matlab: 3 pasos
Hacer un archivo MEX de Matlab: 3 pasos

Video: Hacer un archivo MEX de Matlab: 3 pasos

Video: Hacer un archivo MEX de Matlab: 3 pasos
Video: crear archivo .m matlab 2024, Mes de julio
Anonim
Hacer un archivo MEX de Matlab
Hacer un archivo MEX de Matlab

Instrucciones sobre cómo integrar código C compilado con Matlab. MEX son las siglas de MATLAB Executable. Los archivos MEX son subrutinas vinculadas dinámicamente producidas a partir del código fuente de C o Fortran que, cuando se compilan, se pueden ejecutar desde MATLAB de la misma manera que los archivos M de MATLAB o las funciones integradas. Las funciones de la interfaz externa brindan funcionalidad para transferir datos entre archivos MEX y MATLAB, y la capacidad de llamar a funciones de MATLAB desde código C o Fortran. Aquí le mostraré todo lo que necesita para crear rápidamente un archivo mex útil. necesita: = un editor de texto = matlab 6.1 o superior (las versiones anteriores también pueden hacer archivos mex pero un formato ligeramente diferente) = matlab tiene su propio compilador c que viene con él, pero utilicé el compilador visual c ++ porque lo tenía.

Paso 1: el código

El código
El código

descarga el archivo que adjunto: mextest1p0.cpp

cpp significa c ++ ……… Esto es lo que hace el código: ……… se necesita un número que se envía desde el símbolo del sistema de matlab. Imprime "hola mundo" en matlab devuelve dos argumentos a matlab, una matriz de números de dos elementos y una cadena el primer elemento de la matriz de números devueltos es 1 + el número que le envió el segundo elemento de la matriz de números devueltos es 2 + el número que lo envió ………. Así es como implementarlo: ………… guarde el archivo en su computadora inicie matlab navegue en matlab hasta el directorio donde está el archivo luego siga las instrucciones de compilación y ejecución en la parte superior de la Archivo.cpp. No puedo escribir estas instrucciones aquí porque instructables edita automáticamente los comandos y hace que aparezcan incorrectamente. En la imagen de abajo puede ver el código funcionando. No se preocupe por la "advertencia de la línea de comandos", no parece tener ningún efecto. Observe que en el lado izquierdo, el directorio actual contiene el archivo.cpp. A la derecha puede verme compilando el código y luego ejecutándolo desde matlab. Lea el archivo en su editor de texto (por ejemplo, el bloc de notas en Windows), está muy bien documentado y se explica por sí mismo, podrá hacer casi todo lo que necesite siguiendo las convenciones del código (es decir, copiarlo, pegarlo y hacer ligeras modificaciones) ############################################# ########################################################################################################################################################################################################################################################################################################. La página siguiente NO FUNCIONARÁ, TIENE QUE DESCARGAR EL ARCHIVO que adjunto en lugar de copiar y pegar este. ################################################ ######################

Paso 2: Este es el código, NO COPIAR NI PEGAR

Este es el código, NO COPIAR NI PEGAR
Este es el código, NO COPIAR NI PEGAR

################################################ #################### …….. NOTE ……..debido a una molesta edición automática que hacen los instructables, el código como se ve en esta página NO SERÁ TRABAJA, TIENES QUE DESCARGAR EL ARCHIVO que adjunto en lugar de copiar y pegar esto. ################################ ##################################### // Esto fue escrito en c ++ por leevonk // es código para un archivo matlab mex // el código tomará un valor numérico y generará dos valores numéricos // los dos números de salida se calculan a partir del número de entrada // el código también generará un valor de cadena // el código generará también imprime "hola mundo" #include "mex.h" void mexFunction (int nlhs, mxArray * plhs , int nrhs, mxArray * prhs ) {// ############# ############################ // ####### - imprimir "hola mundo" - ### ######### // ##################################### ### mexPrintf ("Hola mundo"); // ################################### ##### // ######## - Obtener material de Matlab - ######### // ################ ########################## / * declarar una variable de matriz para contener los valores entrantes * / double * InValues; / * obtener los valores enviados desde matlab * / InValues = mxGetPr (prhs [0]); / * para usar estos valores que fueron enviados desde matlab, haga InValues [0], InValue [1], etca de acuerdo con la cantidad de valores que haya. Los InValues se utilizarán a continuación * /// ###################################### ## // ######## - Devuelve una matriz de números - ######### // ################## ###################### / * declara la matriz que se enviará a matlab (el * lo convierte en una matriz) * / double * OutValues; / * Crear / asignar argumento de retorno, una matriz 1x2 (1 fila 2 columna) para el primer espacio de la matriz de retorno (plhs [0]) * / plhs [0] = mxCreateDoubleMatrix (1, 2, mxREAL); / * Obtener puntero al argumento de retorno * / OutValues = mxGetPr (plhs [0]); / * asigna valores a OutValues que residirán en la primera ranura de la matriz de retorno, aquí estamos usando InValues para computar los OutValues * / OutValues [0] = InValues [0] + 1; OutValues [1] = InValues [0] + 2; // ######################################## // ########### - Devuelve una cadena - ############# // ################ ######################### / * declara la variable de cadena que se enviará a matlab * / char * str; / * asigna un valor al string * / str = "byebye"; / * poner la cadena en la segunda ranura de las matrices de retorno (plhs [1]) * / plhs [1] = mxCreateString (str); // ########## ##################################//###########--regreso mas cosas--############//################################ ############ / * para devolver más cosas, sigue las reglas generales anteriores pero pon las cosas en otros espacios de plhs, plhs [un número] * /}

Paso 3: si por alguna razón no se compila

Si por alguna razón no se compila
Si por alguna razón no se compila

Si por alguna razón no se compila (debería, funciona bien en mi computadora) veo estos recursos, es de donde aprendí. Tienen pequeños fallos (el uso de gramática antigua, no funcional, etc.) pero si va y viene entre los dos debería poder improvisar algo que funcione. Documentation / Calcul / matlab5v11 / docs / 00009 / 009a1.htmhttps://cnx.org/content/m12348/latest/

Recomendado: