2009-09-20 8 views
11

Mam projekt BE, którego kod jest w MATLAB, ale muszę przedstawić wyniki na stronie internetowej. Chcę wiedzieć, czy mogę uruchomić mój kod bezpośrednio na stronie internetowej? Jeśli nie, czy możesz mi powiedzieć, który język będzie lepszym rozwiązaniem? Myślę, że może ASP, HTML i PHP.Czy mogę uruchomić kod MATLAB na stronie internetowej?

+0

dziękuję ... chory spróbować –

Odpowiedz

2

Powinieneś być w stanie wywołać MatLab używając passthru i dołączyć jego wynik na stronie.

Zobacz także opcje wiersza poleceń MatLab: on Windows lub on Unix.

+0

jest tam nowa technologia interfejsu WWW dla MATLAB, gdzie można tworzyć interfejsy, takie jak przyciski, przycisk Dodaj plik i tekst wkład? –

5

Możesz skompilować aplikację MATLAB do samodzielnego pliku wykonywalnego za pomocą kompilatora MATLAB.

Wpisz "mcrversion" w monicie, aby ustalić, czy masz zainstalowany ten pakiet. - Prawdopodobnie nie robisz tego, jeśli nie zapłaciłeś za to. Jak w przypadku większości rozszerzeń, które oferuje Mathworks, musisz za to zapłacić .

Jeśli nie musisz kompilować kodu, ale po prostu go uruchomisz, możesz wywołać MATLAB za pomocą wiersza poleceń, aby zrobić to, czego potrzebujesz.

Jak wspomniał Sinan, w obu przypadkach używałbyś funkcji podobnej do passthu.

Inną alternatywą jest utworzenie rozszerzenia dla PHP do korzystania z MATLAB w C. MATLAB dostarcza C API, który pozwala na wywoływanie silnika za pomocą bibliotek, które pochodzą z MATLAB (zobacz przykłady w folderze "extern").

Zobacz poniższy link na tworzeniu rozszerzenie (Jest to dość łatwe):

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

wyszukiwania dla "MATLAB C/Fortran API" w MATLAB lub google dla dokumentacji dotyczącej funkcji. Zasadniczo prawdopodobnie będziesz musiał zadzwonić do EngOpen, aby zadzwonić do silnika i zwrócić wskaźnik.

Oceń ciąg za pomocą engEvalString (możesz załadować pliki .m w ten sposób lub zrobić wszystko, co możesz zrobić w typowej linii poleceń matlab).

Gdy chcesz zobaczyć wyniki (wszystko, co zwykle jest wysyłane do wiersza poleceń w programie Matlab), po średniku pominąć średnik i użyć engOutputBuffer do przechwycenia danych wyjściowych.

Oto uproszczony przykład z czegoś I napisał:

#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); 

} 

Gdy masz podstawową rozszerzenie PHP skompilowany, rzucać połączeń do silnika powyżej do swojego rozszerzenia i można nazwać MATLAB przy użyciu funkcji PHP które zdefiniowałeś w swoim rozszerzeniu.

Kompilowanie MATLAB API jest prawdopodobnie najtrudniejszą częścią. Oto zawartość mojego pliku Makefile (bez kodu rozszerzenia 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 

Najprawdopodobniej będziesz musiał ustawić swoją LD_LIBRARY_PATH przed kompilowaniem/wywołaniem rozszerzenia ...Jednakże istnieją alternatywy do tego:

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 ma doskonała integracja z .NET. Potrzebujesz MATLAB Compiler + the Builder NE toolbox, aby utworzyć zestaw .NET, który możesz uruchomić z aplikacji internetowej opartej na .NET.

Niektóre alternatywy: Możesz zrobić to samo, używając R (patrz this SO question) lub ewentualnie Python + numpy/scipy bez wszystkich kosztów licencjonowania.

0

Najlepszym rozwiązaniem może być użycie polecenia matlab publish, które umożliwia tworzenie kodu HTML z kodu matlab. Jeśli tak naprawdę nie musisz wykonywać skryptu na żywo, umożliwi to automatyczne generowanie danych wyjściowych i tworzenie kopii obrazków. Po wygenerowaniu kodu HTML i obrazów możesz po prostu przesłać je do swojej witryny.

publish command reference

0

SaturnAPI zapewnia interfejs REST dla skryptów MATLAB i Octave, tak że nie trzeba niczego instalować na własnym serwerze. Może nawet wysłać Ci zakodowane grafiki 3D Base64. Oto demo. Poniżej znajduje się diagram pokazujący, że można przekazać dane wejściowe do skryptu za pomocą zmiennej SaturnParams w wywołaniu HTTP.

enter image description here

Disclosure: Pracuję na SaturnAPI

Powiązane problemy