2009-09-20 5 views
11

Ich habe ein BE-Projekt, dessen Code in MATLAB ist, aber ich muss Ergebnisse auf einer Webseite präsentieren. Ich möchte wissen, ob ich meinen Code direkt auf einer Website ausführen kann. Wenn nicht, könnten Sie mir sagen, welche Sprache eine bessere Option wäre? Ich denke vielleicht ASP, HTML und PHP.Kann ich MATLAB-Code auf einer Website ausführen?

+0

danke ... krank versuchen es –

Antwort

2

Sie sollten MatLab mit passthru aufrufen und seine Ausgabe auf der Seite einbeziehen können.

Siehe auch MatLab-Befehlszeilenoptionen on Windows oder on Unix.

+0

gibt es eine neue Technologie für Web-UI für Matlab, wo Sie Schnittstellen wie Schaltflächen erstellen können, Datei-Upload-Button und Text Eingang? –

5

Sie können Ihre MATLAB-Anwendung mit dem MATLAB-Compiler in eine eigenständige ausführbare Datei kompilieren.

Geben Sie "mcrversion" an der Eingabeaufforderung ein, um festzustellen, ob Sie dieses Paket installiert haben. Wahrscheinlich haben Sie es nicht, wenn Sie nicht dafür bezahlt haben. Wie bei den meisten Erweiterungen von Mathworks müssen Sie dafür bezahlen .

Wenn Sie Ihren Code nicht kompilieren, sondern einfach ausführen müssen, können Sie MATLAB möglicherweise über die Befehlszeile aufrufen, um das auszuführen, was Sie benötigen.

Wie Sinan erwähnt, würden Sie in beiden Fällen eine Funktion wie passthus verwenden. Eine andere Alternative ist es, eine Erweiterung für PHP zu erstellen, um MATLAB in C zu verwenden. MATLAB bietet eine C-API, mit der Sie die Engine mithilfe von Bibliotheken aufrufen können, die mit MATLAB geliefert werden (Beispiele finden Sie in Ihrem Ordner "extern").

Siehe folgenden Link, um die Erweiterung auf der Schaffung von (Es ist ganz einfach):

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

Suche nach "MATLAB C/Fortran API" in MATLAB oder Google für die Dokumentation auf Funktionen. Grundsätzlich müssen Sie EngOpen aufrufen, um die Engine aufzurufen und einen Zeiger zurückzusetzen.

Werten Sie eine Zeichenfolge mit engEvalString aus (Sie können .m-Dateien auf diese Weise laden oder alles tun, was Sie in der typischen matlab-Befehlszeile tun könnten).

Wenn Sie die Ergebnisse sehen müssen (alles, was normalerweise in der Befehlszeile in Matlab ausgegeben wird), lassen Sie einfach das Semikolon nach dem Befehl weg und verwenden Sie engOutputBuffer, um die Ausgabe zu erfassen.

Hier ist ein vereinfachtes Beispiel von etwas, das ich schrieb:

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

} 

Sobald Sie eine grundlegende PHP-Erweiterung kompiliert erhalten haben, die Anrufe an den Motor in die Verlängerung oben werfen und Sie können MATLAB die PHP-Funktion aufrufen dass Sie in Ihrer Erweiterung definiert haben.

Das Kompilieren der MATLAB API ist wahrscheinlich der schwierigste Teil. Hier sind die Inhalte meines Makefiles (ohne den PHP-Erweiterungscode).

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 

Sie müssen wahrscheinlich Ihren LD_LIBRARY_PATH vor dem Kompilieren/Aufrufen der Erweiterung festlegen ...Allerdings gibt Alternativen dazu sind:

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

Ich würde nicht viel darauf wetten, da es eingestellt wird. – Agos

+0

Aber die Seite enthält auch zwei Alternativen. –

+0

Eine Bearbeitung gemacht, um ein Missverständnis zu vermeiden, sorry, war meine Schuld. –

2

MATLAB hat große Integration mit .NET. Sie benötigen die MATLAB Compiler + die Builder NE toolbox, um eine .NET-Assembly zu erstellen, die Sie von einer .NET-basierten Webanwendung ausführen können.

Einige Alternativen: Sie können die gleiche Sache mit R (siehe this SO question) oder möglicherweise Python + numpy/scipy ohne alle Lizenzkosten tun.

0

Am besten verwenden Sie den Befehl matlab publish, mit dem Sie HTML aus Ihrem Matlab-Code erstellen können. Wenn Sie das Skript nicht wirklich ausführen müssen, können Sie Ihre Ausgabe automatisch generieren und Bildkopien Ihrer Figuren erstellen. Nachdem Sie den HTML-Code und die Bilder erstellt haben, können Sie diese einfach auf Ihre Website hochladen.

publish command reference

0

SaturnAPI bietet eine REST-Schnittstelle für Matlab und Octave-Skripte, so dass Sie müssen nicht alles auf Ihrem eigenen Server installieren. Es kann sogar Base64-kodierte 3D-Diagramme an Sie senden. Hier ist die demo. Unten sehen Sie ein Diagramm, das zeigt, dass Sie Eingaben über die Variable SaturnParams im HTTP-Aufruf an das Skript übergeben können.

enter image description here

Disclosure: Ich auf SaturnAPI arbeiten

Verwandte Themen