Red de conocimiento informático - Material del sitio web - Cómo mezclar archivos c en matlab simulink

Cómo mezclar archivos c en matlab simulink

Método/Pasos

Menú: Proyecto → Propiedades... Seleccione el directorio VC++ en Propiedades de configuración. Agregue archivos de inclusión relacionados con matlab en la columna del directorio de inclusión. Mi matlab está instalado en la unidad F. Solo necesito configurar los dos directorios F:\MatLab\extern\include\win64 y F:\MatLab\extern\include. x64; de lo contrario, se producirá un error. Las versiones inferiores no tienen win64, solo win32. De esta manera, puede crear un proyecto x86 o win32

Agregue el archivo lib relacionado con matlab en la columna del directorio de la biblioteca. Por ejemplo: F:\MatLab\extern\lib\win32\microsoft; F:\MatLab\extern\lib\win32 F:\MatLab\extern\lib\win64\microsoft; ;

Tenga en cuenta que esto es para diferentes proyectos y dígitos de máquina, es mejor agregarlos todos para evitar errores.

Menú: Propiedades del proyecto Seleccione Conector → Entrada en Propiedades de configuración.

En la columna Dependencias adicionales, ingrese la biblioteca de archivos lib de matlab a la que el proyecto debe hacer referencia.

libmat.lib libeng.lib libmx.lib

Menú: Propiedades del proyecto Seleccione Conector → General en Propiedades de configuración.

En la columna Directorio de biblioteca adicional, agregue el nombre del directorio donde se encuentra la biblioteca. Por ejemplo: F:\MatLab\bin\win64

Este paso es muy importante; de ​​lo contrario, no se pueden encontrar varios archivos dll, no se pueden encontrar archivos lib y otros errores.

Prueba: busque un código aleatorio en Internet

#include #include usando el espacio de nombres std;#include #include

void main(){ // Definir variables de bucle int i = 0, j = 0

// Variable de estado

int nStatus = 0; // Definir el puntero del motor MATLAB Engine *ep;

// Definir el puntero de la variable mxArray mxArray *A, *B;

// Definir la matriz de matriz

/ / Nota: El orden de las filas y columnas de la matriz en VC es exactamente opuesto al de MATLAB y debe transponerse. doble arData[3][3] = {{7.5,16.3,9.6},{13.2,8.9,12.3},{9.6,5.4,13.7}}; doble arResData[3][3];

// Genera la matriz original cout<<"La matriz original es: "<

"<

// Si se muestra la ventana de MATLAB: true-display; false-hide.

nStatus = engSetVisible(ep, false) ;

if(nStatus != 0)

{

cout<<"Error al establecer las propiedades de visualización de MATLAB. "<

exit(EXIT_FAILURE);

}

// Asignar espacio para la variable mxArray A = mxCreateDoubleMatrix(3,3,mxREAL); B = mxCreateDoubleMatrix(3,3,mxREAL); if(A == NULL || B == NULL) { cout<<"Error al asignar espacio para la variable mxArray. "<

exit(EXIT_FAILURE); }

//Escribe los datos de la matriz en el espacio mxArray

memcpy((void*) mxGetPr(A),(void*)arData,sizeof(arData));

// Escribir la variable de matriz A en el espacio del motor MATLAB

nStatus = engPutVariable(ep, "A" ,A);

if(nStatus != 0)

{

cout<<"La variable de matriz no se pudo escribir en el espacio del motor MATLAB. "<

exit(EXIT_FAILURE);

}

//Ejecute el comando del motor para encontrar la matriz inversa de la matriz A

nStatus = engEvalString(ep,"B=inv(A)");

if(nStatus != 0)

{

cout< <"Error al ejecutar el comando del motor MATLAB. "<

exit(EXIT_FAILURE);

}

// Leer los resultados de la ejecución desde el espacio del motor MATLAB

B = engGetVariable(ep,"B");

//Copiar la variable de matriz B a la matriz arResData

memcpy((void*)arResData,(void*)mxGetPr( B) ,sizeof(arResData));

// Liberar espacio de variable de matriz

mxDestroyArray(A);

mxDestroyArray(B);

// Cerrar el motor MATLAB

engClose(ep);

// Generar los resultados del cálculo

cout<<"La matriz inversa es:"< < endl;

for(i = 0; i < 3; i++)

{

for(j = 0; j < 3; j++)< / p>

{

cout<

}

cout <

}

// Pausar el programa y ver los resultados

system("pause");

}