Cómo llamar al archivo matlab m en VC
Matlab es una poderosa herramienta de cálculo/simulación matemática. Tiene muchas funciones prácticas listas para usar y, a menudo, nosotros mismos definimos muchas m funciones. Pero en muchos casos tenemos que utilizar la programación VC. Entonces, ¿cómo utilizar los recursos de Matlab en VC? Aquí explicaré brevemente con un ejemplo simple cómo llamar al archivo .m definido en matlab en VC. No entraré en demasiadas teorías, pero hablaré brevemente de un ejemplo. Creo que todos lo aprenderán inmediatamente después de leerlo J
Las partes que se muestran en gris son las partes que requieren entrada manual.
Los pasos son los siguientes:
Primero, por supuesto, primero cree el archivo matlab m.
En aras de la simplicidad, definí una función en matlab y su archivo m es el siguiente:
función y = add_zh(a,b)
y =a+b
Guárdelo como myfunct.m
A continuación, configure el entorno de compilación de matlab. Abra matlab y escriba la línea de comando: mex-setup
Luego aparece el siguiente mensaje
Seleccione un compilador:
[1] Borland C++Builder versión 5.0 en C:/Program Files/Borland
[2] Lcc C versión 2.4 en F:/SOFT/SHARE/MATLAB65/sys/lcc
[3] Microsoft Visual C /C++ versión 6.0 en C:/Archivos de programa/Microsoft Visual Studio
[0] Ninguno
Compilador:
Aquí elegimos '3'. (Si utiliza otros compiladores como BCB, puede seleccionar '1' en consecuencia)
Luego, continúe ingresando el estado de la línea de comando:
mbuild –setup
Elija su compilador para crear aplicaciones MATLAB independientes:
¿Desea que mbuild localice los compiladores instalados [s]/n y
Seleccione un compilador:
[1] Borland C++Builder versión 5.0 en C:/Program Files/Borland
[2] Lcc C versión 2.4 en F:/SOFT/SHARE/MATLAB65/sys/lcc< / p>
[3] Microsoft Visual C/C++ versión 6.0 en C:/Archivos de programa/Microsoft Visual Studio
[0] Ninguno
Compilador:
Aquí se requieren algunos pasos de confirmación. Cada uno puede actuar según la situación.
Configure el entorno del compilador VC tres veces. Configure las rutas para include y lib en el directorio de opciones de herramientas, agregue un elemento respectivamente, apuntando a /extern/include y /extern/lib en el directorio de instalación de matlab. 4. Este paso es más crítico. En este paso, convierta el archivo .m en matlab a dll.
Ingrese en la línea de comando de matlab:
mcc -t -h -L C -W lib:ppp -T link:lib myfunct.m
En este punto, puede encontrar que se generan muchos archivos en el directorio donde se encuentra myfunct.m. Sólo usamos 3 de ellos:
ppp.h ppp.lib ppp.dll
5. Cree un nuevo proyecto VC. Aquí se llama tapete. Para simplificar, creamos aquí un cuadro de diálogo para demostración. De la siguiente manera:
Luego, copie los tres archivos anteriores al directorio donde se encuentra el proyecto VC para que VC pueda llamarlos.
En sexto lugar, realice la programación VC.
Primero, agregue: #include "ppp.h" al archivo cpp.
Luego, configure la biblioteca de enlaces VC. Agregue lo siguiente a los módulos de objeto/biblioteca en el enlace de configuración del proyecto:
ppp.lib libmx.lib libmatlb.lib libmmfile.lib
En este punto, el entorno de compilación de VC es configuración. La siguiente es la parte de programación.
La clave de las siete partes de programación: conversión de interfaces y tipos de datos
Primero proporcione el código fuente de la implementación de VC:
void CMatDlg::OnButton1( )
{ //El archivo m definido en matlab: myfunct, su función es completar la operación de suma de dos números.
CString str;
UpdateData(true);
pppInitialize();
// Para llamar funciones en matlab, debe usar el tipo de datos de matriz y luego llamar a la función matlab para convertirlo a formato matricial (el tipo de datos básico de matlab es matriz)
static double x1[1]={1.0};
static double x2[1]={2.5};
double result;
//Llama a matlab para crear 3 matrices
mxArray *A=mclGetUninitializedArray ( );
mxArray *B=mclGetUninitializedArray();
mxArray *C=mclGetUninitializedArray();
//Asignar valores de variables en lenguaje C a Matlab en matlab
mlfAssign(&A,mlfDoubleMatrix(1,1,x1,NULL));
mlfAssign(&B,mlfDoubleMatrix(1,1,x2,NULL));
mlfAssign(&C,mlfMyfunct(A,B));
//Transfiere el puntero de la matriz en matlab al puntero a duplicar en lenguaje C
double * md=mxGetPr(C);
result=md[0];
//Libera estas matrices
mxDestroyArray(A);< / p>
mxDestroyArray(B);
mxDestroyArray(C);
str.Format ("Es: %f",resultado);
::AfxMessageBox(str);
Creo que lo entenderás después de ver los comentarios que contiene.
La programación VC se usa para llamar a funciones de Matlab. Por ejemplo, en VC, si implementamos la adición de dos tipos dobles, debemos hacer la programación anterior: primero definir dos matrices y almacenarlas. realizar operaciones de función (también conocidos como parámetros reales); luego convertir estas dos matrices en matrices que puedan ser reconocidas por matlab, luego llamar a la función personalizada en el archivo m para operar en la matriz; datos admitidos por VC Formato:
double * md=mxGetPr(C);
result=md[0]
En este punto, los datos procesados. por la función matlab se ha guardado. Se ingresa la variable de resultado en VC.
mlfAssign(&C,mlfMyfunct(A,B));
Como puede ver, al realizar la llamada, utilizamos el nombre de archivo myfunct del archivo m en lugar de add_zh( a,b)
definido en el archivo m