У меня есть проект BE, код которого находится в MATLAB, но мне нужно представить результаты на веб-странице. Я хочу знать, могу ли я запускать свой код непосредственно на веб-сайте? Если нет, не могли бы вы сказать, какой язык будет лучшим вариантом? Я думаю, может быть, ASP, HTML и PHP.
Вы можете скомпилировать ваше приложение 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
Вы должны иметь возможность ссылаться на MatLab с помощью passthru и включать его вывод на страницу.
См. Также параметры командной строки MatLab в Windows или Unix .
MATLAB имеет отличную интеграцию с .NET. Вам нужна панель инструментов MATLAB Compiler + the Builder NE, чтобы создать сборку .NET, которую вы можете запустить из .NET-приложения.
Некоторые альтернативы: вы можете сделать то же самое, используя R (см. Этот вопрос SO ), или, возможно, Python + numpy / scipy без всех лицензионных затрат.
Возможно, это правильное решение: http://www.mathworks.com/products/new_products/webserver_discontinued.html
редактирование, содержащее эти две страницы:
Лучше всего, если вы используете команду публикации matlab, которая позволяет вам создавать HTML-код из вашего кода. Если вам действительно не нужно выполнять сценарий live, это позволит вам автоматически генерировать ваш вывод и создавать копии изображений ваших рисунков. После создания HTML и изображений вы можете просто загрузить их на свой сайт.
публиковать ссылку на команду
SaturnAPI предоставляет интерфейс REST для скриптов Matlab и Octave, поэтому вам не нужно ничего устанавливать на своем сервере. Он даже может отправлять вам 3D-графики Base64. Вот демо . Ниже приведена диаграмма, показывающая, что вы можете передавать входные данные сценарию через переменную SaturnParams
в HTTP-вызове.
Раскрытие информации: я работаю над SaturnAPI