MATLAB y C
jueves, 26 de enero de 2012
viernes, 4 de noviembre de 2011
PRUEBA DE CODIGO HUFFMAN C
Saludos Compañeros, si me ayudan con lo siguiente, debido a que se a optado por elegir el lenguaje C como el lenguaje a ser usado con matlab, seria bueno probar el siguiente código, creo que así como el "suma.c" que se ha mencionado y probado seria útil, para seguir continuando con el desarrollo del codigo
"RECALCO QUE SOLO ES PARA PROBAR LA CONEXION QUE HAN INDICADO C MATLAB y generar el archivo MEX"
Adjunto el link del paquete con todos los archivos del proyecto C para Huffman
1.- Descargar ps4.zip y descomprimirlo en su directorio personal.
2.- El archivo ps4.zip archivo contiene una solución de Visual Studio y el código fuente c para la aplicación de codificación de Huffman.
3.- Hacer clic en el archivo de Visual Studio PS4.sln debe abrir, y se podrá ver una vista que muestra el archivo de origen huffman.c
La parte derecha de la ventana muestra todos los archivos de origen del proyecto que son tres:
huffman.c - en donde se define main (int, char **) (la función llamada al inicio de la ejecución), y readInputFile (FILE *) para la lectura de todos los caracteres en un file string.
htree.c - define los procedimientos para la implentacion de la codificación y decodificación Huffman
htree.h - archivo de cabecera que define el tipo de datos htree que utilizamos para poner en práctica un árbol de Huffman
4.- Se debe entonces obtener el ejecutable que seria huffman.exe
5.- Luego Intentarlo ejecutar desde el shell de Windows:
C: \ cs216 \ ps4 \ Debug> Huffman
Uso: Huffman [-d] [-b] <entrada> [<salida>]
La opción-d se utiliza para la decodificación. La opción-b se utiliza para seleccionar bits de codificación (en lugar de imprimir 0 y 1 como caracteres en el archivo de salida)
AGREGO EL LINK DE DONDE SE A OBTENIDO TAL INFORMACION Y PARA QUE VERIFIQUEN CUALQUIER DUDA CON RESPECTO AL FUNCIONAMIENTO
jueves, 27 de octubre de 2011
Partes esenciales de un archivo MEX
Todos los archivos MEX que se requieren para enlazar código escrito en C y código de MATLAB contienen componentes necesarios para su correcto funcionamiento.
Dentro de éstos se incluyen; una librería "mex.h" que contiene las funciones de la API del sistema operativo, una función llamada "mexFunction" que permite realizar funciones de gateway, un arreglo llamado "mxArray" y funciones propias de la API.
La librería mex.h se incluye en las declaraciones del código tal como se muestra a continuación:
#include <stdio.h>
#include <stdlib.h>
#include "mex.h"
#include <stdlib.h>
#include "mex.h"
Luego se declara la función principal del código por medio de mexFunction, y se utilizan cuatro parámetros básicos, tal como se muestra a continuación:
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
{
código
}
Los parámetros se describen en la siguiente tabla:
mexFunction | Name of the gateway routine (same for every MEX-file) |
nlhs | Number of expected mxArrays (Left Hand Side) |
plhs | Array of pointers to expected outputs |
nrhs | Number of inputs (Right Hand Side) |
prhs | Array of pointers to input data. The input data is read-only and should not be altered by your mexFunction . |
Por otra parte mxArray permite trabajar con distintos tipos de datos en forma estructurada, y es la forma en cómo los datos del código en C se comunican con los datos del código propio de MATLAB.
Finalmente, las funciones usadas, propias de la API que estan en la librería mex.h, se caracterizan por tener como prefijo la palabra mex, sin embargo tienen la misma funcionalidad que el lenguaje C. Por ejemplo la función printf() del lenguaje C equivale a la función mexprintf() de las funciones de esta interfaz.
Ejemplo de Programa en C portado a Matlab
1. Necesitamos el programa desarrolado en c, con la siguiente libreria y cabecera:
#include "mex.h"
/* mexFunction es la rutina de enlace con el código C. */
/* mexFunction es la rutina de enlace con el código C. */
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
/*Codigo*/
}
2. Guardar el archivo .c en la carpeta de trabajo de matlab
3. Para compilar el codigo utilizar el siguiente comando:
>> mex -v -g archivo.c
4. Matlab nos genera un archivo .mexw32, quese guarda automaticamente en la carpeta de trabajo de matlab, este archivo lo llamamos como una funcion desde la ventana de comandos o desde un script de matlab
>> archivo
Código en C:
#include <stdio.h>
#include <stdlib.h>
#include "mex.h"
/* mexFunction es la rutina de enlace con el código C. */
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
double a, b, suma,resta, multiplicacion,division;
a=2;
b=3;
mexPrintf ("valor de a:%g \n",a);
mexPrintf ("valor de b:%g \n\n",b);
suma=a+b;
resta=a-b;
multiplicacion=a*b;
division=a/b;
mexPrintf ("Valor de suma:%g\n",suma);
mexPrintf ("Valor de resta:%g\n",resta);
mexPrintf ("Valor de multiplicacion:%g\n",multiplicacion);
mexPrintf ("Valor de division:%g\n",division);
/*return EXIT_SUCCESS;*/
}
Guardamos el archivos en la carpeta MATLAB
Compilación desde la ventana de comandos de matlab
Se crea el archivo suma.mexw32
Ejecutamos como una función
miércoles, 26 de octubre de 2011
Configurar el compilador a utilizar
1. Mediante el comando mex -setup elegir el tipo de compilador a utilizar
>> mex -setup
Please choose your compiler for building external interface (MEX) files:
Please choose your compiler for building external interface (MEX) files:
2. Aceptamos que el computador busque los compiladores instalados con y
Would you like mex to locate installed compilers [y]/n? y
3. Seleccionamos un compilador de la lista y aceptamos
Select a compiler:
[1] Lcc-win32 C 2.4.1 in C:\PROGRA~1\MATLAB\R2009a\sys\lcc
[2] Microsoft Visual C++ 2008 SP1 in C:\Program Files\Microsoft Visual Studio 9.0
[0] None
Compiler: 1
Please verify your choices:
Compiler: Lcc-win32 C 2.4.1
Location: C:\PROGRA~1\MATLAB\R2009a\sys\lcc
Are these correct [y]/n? y
Trying to update options file: C:\Users\PAMR\AppData\Roaming\MathWorks\MATLAB\R2009a\mexopts.bat
From template: C:\PROGRA~1\MATLAB\R2009a\bin\win32\mexopts\lccopts.bat
Done . . .
**************************************************************************
Warning: The MATLAB C and Fortran API has changed to support MATLAB
variables with more than 2^32-1 elements. In the near future
you will be required to update your code to utilize the new
API. You can find more information about this at:
http://www.mathworks.com/support/solutions/data/1-5C27B9.html?solution=1-5C27B9
Building with the -largeArrayDims option enables the new API.
**************************************************************************
Suscribirse a:
Entradas (Atom)