Могу ли я запустить код MATLAB на веб-сайте? - PullRequest
10 голосов
/ 20 сентября 2009

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

Ответы [ 8 ]

6 голосов
/ 20 сентября 2009

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

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

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

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

Другой альтернативой является создание расширения для PHP для использования MATLAB в C. MATLAB предоставляет C API, который позволяет вам вызывать движок с использованием библиотек, которые поставляются с 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, которую вы определили в своем расширении.

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

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

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

2 голосов
/ 20 сентября 2009

Может быть, это правильное решение: http://www.mathworks.com/products/new_products/webserver_discontinued.html

edit , содержащий эти две страницы:

http://www.mathworks.com/products/netbuilder/

http://www.mathworks.com/products/javabuilder/

2 голосов
/ 20 сентября 2009

Вы должны иметь возможность вызывать MatLab с помощью passthru и включать его вывод на страницу.

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

0 голосов
/ 09 апреля 2019

Если JavaScript является возможным выбором языка, то этот набор инструментов в MathWorks File Exchange (https://www.mathworks.com/matlabcentral/fileexchange/69973-generate-javascript-using-matlab-coder) может компилировать функции MATLAB в функции JavaScript, которые можно запускать в браузере.

0 голосов
/ 06 мая 2018

Я использую 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

0 голосов
/ 04 августа 2015

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

enter image description here

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

0 голосов
/ 02 октября 2009

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

ссылка на команду публикации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...