2009-09-20 47 views
11

Tengo un proyecto BE cuyo código está en MATLAB pero necesito presentar resultados en una página web. Quiero saber si puedo ejecutar mi código directamente en un sitio web. Si no, ¿podría decirme qué idioma sería una mejor opción? Estoy pensando en ASP, HTML y PHP.¿Puedo ejecutar el código de MATLAB en un sitio web?

+0

gracias ... malos probarlo –

Respuesta

2

Debería poder invocar MatLab usando passthru e incluir su salida en la página.

Consulte también las opciones de línea de comandos MatLab on Windows o on Unix.

+0

hay una nueva tecnología para la interfaz de usuario web para MATLAB donde se puede crear interfaces como botones, el botón de carga de archivos y el texto ¿entrada? –

5

Puede compilar su aplicación MATLAB en un ejecutable independiente utilizando el compilador MATLAB.

Escriba "mcrversion" en el indicador para determinar si tiene este paquete instalado: es probable que no lo haga si no lo ha pagado. Al igual que con la mayoría de las extensiones que proporciona Mathworks, debe pagarlo. .

Si no necesita compilar el código, simplemente ejecútelo, puede invocar MATLAB a través de la línea de comandos para hacer lo que necesita.

Como mencionó Sinan, utilizaría una función como passthu en ambos casos.

Otra alternativa es crear una extensión para que PHP utilice MATLAB en C. MATLAB proporciona una API C que le permite llamar al motor utilizando bibliotecas que vienen con MATLAB (consulte ejemplos de su carpeta "extern").

Véase el siguiente enlace en la creación de la extensión (Es bastante fácil):

http://devzone.zend.com/article/1021

Búsqueda de "MATLAB C/Fortran API" en MATLAB o Google para la documentación sobre las funciones. Básicamente, es probable que necesite llamar a EngOpen para llamar al motor y devolver un puntero.

Evalúe una cadena usando engEvalString (puede cargar archivos .m de esta manera o hacer cualquier cosa que pueda hacer en la línea de comandos típica de matlab).

Cuando necesite ver los resultados (cualquier cosa que normalmente salga a la línea de comandos en matlab), simplemente omita el punto y coma después del comando y use engOutputBuffer para capturar la salida.

Aquí es un ejemplo simplificado de algo que escribí:

#include "mat.h" 
#include "engine.h" 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

#define BUFFER_SIZE 256 

int main() 

    Engine *ep; 
    char buffer[BUFFER_SIZE]; // The buffer used to capture output. 

    buffer[BUFFER_SIZE] = '\0'; /* Terminate the last character of the buffer. */ 

    if (!(ep = engOpen(NULL))) { 
     fprintf(stderr, "\nCan't start MATLAB engine\n"); 
     return EXIT_FAILURE; 
    } 

    if (engEvalString(ep, "load data/mymatfile.mat") != 0) 
    printf("error evaluating expression\n"); 

    engOutputBuffer(ep, buffer, BUFFER_SIZE); 

    /* No output returned. */ 
    if (engEvalString(ep, "p = 1+1;") != 0) 
    printf("error evaluating expression\n"); 

    /* Output written to buffer- Note the omitted character (;). */ 
    if (engEvalString(ep, "q = p+1 ")) 
    printf("error evaluating expression\n"); 


    /* You will probably need to trim the whitespace in the buffer contents. 
    I estimated +5 to pull out the prompt: ">>", but it depends on which version 
    you have, for example, the student version displays "EDU >>\n". */ 
    printf("print the contents of the buffer:%s\n", buffer+5); 

    /* Turn off output buffering. */ 
    engOutputBuffer(ep, NULL, 0); 

    /* Close the engine. */ 
    engClose(ep); 

    exit(0); 

} 

Una vez que tenga una extensión de PHP básico compilado, tirar las llamadas al motor anterior en su extensión y se puede llamar a MATLAB mediante la función de PHP que has definido en tu extensión

La compilación de la API MATLAB es probablemente la parte más difícil. Aquí están los contenidos de mi Makefile (sin el código de extensión PHP).

phpmat: phpmat.o 
     gcc phpmat.o 
/usr/local/matlabR2009a/extern/lib/glnx86/version4.o 
/usr/local/matlabR2009a/bin/glnx86/libeng.so 
/usr/local/matlabR2009a/bin/glnx86/libmex.so -o phpmat 

phpmat.o: phpmat.c 
     gcc -c phpmat.c -I/usr/local/matlabR2009a/extern/include 
-L/usr/local/matlabR2009a/extern/lib/glnx86 
-L/usr/local/matlabR2009a/bin/glnx86 
-L/usr/local/matlabR2009a/sys/os/glnx86 -L/usr/local/matlabR2009a/bin/glnx86 

clean: 
     rm *.o 

Usted va a necesitar para establecer LD_LIBRARY_PATH antes de compilar/llamando a la extensión ...Sin embargo, hay alternativas para esto:

LD_LIBRARY_PATH=/usr/local/matlabR2009a/extern/lib/glnx86:/usr/local/matlabR2009a/bin/glnx86:/usr/local/matlabR2009a/sys/os/glnx86:$LD_LIBRARY_PATH 
2

MATLAB tiene gran integración con .NET. Necesita el MATLAB Compiler + el Builder NE toolbox para crear un ensamblado .NET que pueda ejecutar desde una aplicación web basada en .NET.

Algunas alternativas: Usted puede hacer lo mismo usando R (ver this SO question), o posiblemente Python + numpy/scipy sin todos los costos de licencias.

0

Su mejor opción podría ser utilizar el comando de publicación de matlab, que le permite crear HTML a partir de su código de matlab. Si realmente no necesita ejecutar el script en vivo, esto le permitirá generar automáticamente su salida y crear copias de imágenes de sus figuras. Después de generar el HTML y las imágenes, simplemente puede cargarlos en su sitio.

publish command reference

0

SaturnAPI proporciona una interfaz REST para las secuencias de comandos MATLAB, de modo que usted no tiene que instalar nada en su propio servidor. Incluso puede enviarle gráficos en 3D codificados en Base64. Aquí está el demo. A continuación se muestra un diagrama que muestra que puede pasar entradas al script a través de la variable SaturnParams en la llamada HTTP.

enter image description here

Revelación: Yo trabajo en SaturnAPI

Cuestiones relacionadas