我有一个BE项目,其代码在MATLAB中,但我需要在网页上显示结果.我想知道我是否可以直接在网站上运行我的代码?如果没有,你能告诉我哪种语言会更好吗?我想的可能是ASP,HTML和PHP.
您可以使用MATLAB编译器将MATLAB应用程序编译为独立的可执行文件.
在提示符下键入"mcrversion"以确定您是否安装了此软件包 - 如果您尚未付款,则可能不会这样做 - 与Mathworks提供的大多数扩展一样,您需要为此付费.
如果您不需要编译代码,只需运行它,您就可以通过命令行调用MATLAB来执行您需要的操作.
正如Sinan所提到的,在这两种情况下你都会使用像passthu这样的函数.
另一种方法是为PHP创建一个扩展,以便在C中使用MATLAB.MATLAB提供了一个C API,它允许您使用MATLAB附带的库来调用引擎(有关示例,请参阅"extern"文件夹).
请参阅以下有关创建扩展的链接(非常简单):
http://devzone.zend.com/article/1021
在MATLAB中搜索"MATLAB C/Fortran API"或谷歌搜索有关函数的文档.基本上,您可能需要调用EngOpen来调用引擎并返回指针.
使用engEvalString评估字符串(您可以通过这种方式加载.m文件或在典型的matlab命令行中执行任何操作).
当您需要查看结果(通常在matlab中输出到命令行的任何内容)时,只需在命令后省略分号,并使用engOutputBuffer捕获输出.
这是我写的一个简化示例:
#include "mat.h" #include "engine.h" #include#include #include #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扩展编译,将上面的引擎调用放到你的扩展中,你可以使用你在扩展中定义的PHP函数调用MATLAB.
编译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