У меня есть проект BE, код которого находится в MATLAB, но мне нужно представить результаты на веб-странице. Я хочу знать, могу ли я запускать свой код непосредственно на веб-сайте? Если нет, не могли бы вы сказать, какой язык будет лучшим вариантом? Я думаю, может быть, ASP, HTML и PHP.
Могу ли я запустить код MATLAB на веб-сайте?
Ответ 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.
Ответ 3
Возможно, это правильное решение: http://www.mathworks.com/products/new_products/webserver_discontinued.html
изменить, содержащую эти две страницы:
Ответ 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
Ответ 8
Если JavaScript является возможным выбором языка, то этот набор инструментов в MathWorks File Exchange (https://www.mathworks.com/matlabcentral/fileexchange/69973-generate-javascript-using-matlab-coder) может компилировать функции MATLAB в функции JavaScript. это можно запустить в браузере.