Могу ли я запустить код MATLAB на веб-сайте?

У меня есть проект BE, код которого находится в MATLAB, но мне нужно представить результаты на веб-странице. Я хочу знать, могу ли я запускать свой код непосредственно на веб-сайте? Если нет, не могли бы вы сказать, какой язык будет лучшим вариантом? Я думаю, может быть, ASP, HTML и PHP.

Ответ 1

Вы можете скомпилировать ваше приложение MATLAB в автономный исполняемый файл с использованием компилятора MATLAB.

В командной строке введите "mcrversion", чтобы определить, установлен ли этот пакет. Вероятно, вы этого не сделаете, если не заплатили за него. Как и в большинстве расширений, которые предоставляет Mathworks, вам нужно заплатить за это.

Если вам не нужно компилировать свой код, а просто запустите его, вы можете запустить MATLAB через командную строку, чтобы выполнить то, что вам нужно.

Как упоминал Синан, в обоих случаях вы должны использовать такую ​​функцию, как passthu.

Другой альтернативой является создание расширения для PHP для использования MATLAB в C. MATLAB предоставляет API-интерфейс C, который позволяет вам вызывать механизм с использованием библиотек, которые поставляются с MATLAB (например, в вашей папке "extern" ).

См. следующую ссылку при создании расширения (это довольно просто):

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

Найдите "MATLAB C/Fortran API" в MATLAB или google для документации по функциям. В принципе, вам, вероятно, потребуется вызвать EngOpen, чтобы вызвать движок и вернуть указатель.

Оцените строку с помощью engEvalString (вы можете загружать файлы .m таким образом или сделать что-нибудь, что вы могли бы сделать в типичной командной строке Matlab).

Когда вам нужно увидеть результаты (все, что обычно выводится в командной строке в Matlab), просто опустите точку с запятой после команды и используйте engOutputBuffer для захвата вывода.

Вот упрощенный пример из того, что я написал:

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

}

После того, как вы скомпилировали базовое PHP-расширение, бросьте вызовы к движку выше в ваше расширение, и вы можете вызвать MATLAB с помощью функции PHP, которую вы определили в своем расширении.

Компиляция API MATLAB, вероятно, самая сложная часть. Вот содержимое моего Makefile (без кода расширения 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

Вероятно, вам нужно установить LD_LIBRARY_PATH перед компиляцией/вызовом расширения... Однако есть альтернативы этому:

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 с помощью passthru и включать его вывод на страницу.

См. также параметры командной строки MatLab в Windows или в Unix.

Ответ 4

MATLAB имеет отличную интеграцию с .NET. Вам нужен MATLAB Compiler + Инструмент Builder NE для создания сборки .NET, которую вы можете запустить из веб-приложения на .NET.

Некоторые альтернативы: вы можете сделать то же самое, используя R (см. this SO вопрос), или, возможно, Python + numpy/scipy без всех затрат на лицензирование.

Ответ 5

Лучше всего использовать команду публикации matlab, которая позволяет вам создавать HTML-код из вашего кода. Если вам действительно не нужно выполнять script live, это позволит вам автоматически генерировать ваш вывод и создавать копии изображений ваших рисунков. После создания HTML и изображений вы можете просто загрузить их на свой сайт.

опубликовать ссылку на команду

Ответ 6

SaturnAPI предоставляет интерфейс REST для ваших скриптов Matlab и Octave, так что вам не нужно ничего устанавливать самостоятельно сервер. Он даже может отправлять вам 3D-графики Base64. Вот demo. Ниже приведена диаграмма, показывающая, что вы можете передавать входы script с помощью переменной SaturnParams в вызове HTTP.

введите описание изображения здесь

Раскрытие информации: я работаю над SaturnAPI

Ответ 7

Я использую Matlab COM Automation Server через PHP, он запускает метод, который делает некоторые выводы:

$Matlab = new COM("Matlab.Application.Single");

$output = $Matlab->Execute("addpath '".dirname($_SERVER['SCRIPT_FILENAME'])."/'");

$output = $Matlab->Execute("[roots, dy, subsStr] = NewtonPrep('".$_REQUEST['eq']."')");

echo $output;

https://php.net/manual/en/book.com.php

https://www.mathworks.com/help/matlab/call-matlab-com-automation-server.html