Я могу выполнить код MATLAB на веб-сайте?

Преждевременно не оптимизировать. Лучше, чем любой из них:

for(Object o : someList) {
    o.doSomething();
}

, потому что это устраняет шаблон и разъясняет намерение.

, Если Вы не работаете над встроенными системами, в этом случае все ставки выключены. Иначе не пытайтесь перехитрить JVM.

10
задан gnovice 22 September 2009 в 03:52
поделиться

5 ответов

Вы можете скомпилировать ваше приложение 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
6
ответ дан 4 December 2019 в 01:02
поделиться

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

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

2
ответ дан 4 December 2019 в 01:02
поделиться

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

2
ответ дан 4 December 2019 в 01:02
поделиться

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

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

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

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

2
ответ дан 4 December 2019 в 01:02
поделиться

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

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

0
ответ дан 4 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: