Преждевременно не оптимизировать. Лучше, чем любой из них:
for(Object o : someList) {
o.doSomething();
}
, потому что это устраняет шаблон и разъясняет намерение.
, Если Вы не работаете над встроенными системами, в этом случае все ставки выключены. Иначе не пытайтесь перехитрить JVM.
Вы можете скомпилировать ваше приложение 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
MATLAB отлично интегрируется с .NET. Вам понадобится компилятор MATLAB + набор инструментов Builder NE для создания сборки .NET, которую можно запустить из веб-приложения на основе .NET.
Некоторые альтернативы: вы можете сделать почти то же самое, используя R (см. этот вопрос SO ) или, возможно, Python + numpy / scipy без всех затрат на лицензирование.
Вы должны иметь возможность вызывать MatLab, используя passthru , и включать его вывод на страницу.
Возможно, это правильное решение: http://www.mathworks.com/products/new_products/webserver_discontinued.html
отредактируйте , содержащее эти две страницы:
Лучше всего использовать команду публикации matlab, которая позволяет создавать HTML из кода Matlab. Если вам действительно не нужно запускать скрипт вживую, это позволит вам автоматически генерировать результат и создавать копии изображений ваших фигур. После того, как вы сгенерируете HTML и изображения, вы можете просто загрузить их на свой сайт.