Sen MATLAB derleyicisi kullanarak tek başına yürütülebilir içine MATLAB uygulama derleyebilirsiniz.
Eğer bu paket yüklü-Bu size Mathworks sağlayan en uzantıları ile bu-As için ödenen varsa, bunun için ödemeniz gerekmez yapmak olasıdır sahip olup olmadığını belirlemek için komut istemine "mcrversion" yazın.
Kodunuzu derlemek gerekiyor, ama sadece onu çalıştırmak istemiyorsanız, size bunu için gerekenleri yapmak için, komut satırı üzerinden MATLAB çağırmak mümkün olabilir.
Sinan belirtildiği gibi, bu olguların hem passthu gibi bir işlevi kullanmak istiyorsunuz.
Başka bir alternatif size (örnekler için "extern" klasörü görmek) MATLAB ile gelen kütüphaneleri kullanılarak motor aramasını sağlayan bir C API sağlar C. MATLAB MATLAB kullanmak için PHP için bir uzantısı oluşturmaktır.
: Uzantısı oluşturma aşağıdaki linki (Bu oldukça kolaydır) bakın
http://devzone.zend.com/article/1021
MATLAB "MATLAB C / Fortran API" için arama veya fonksiyonları üzerinde belgeler için google. Temel olarak, muhtemelen motor aramak ve bir işaretçi dönmek için EngOpen aramak gerekir.
EngEvalString kullanarak bir dize (m dosyaları. Bu şekilde yüklemek veya tipik matlab komut satırında yapabileceği her şeyi yapabilir) değerlendirin.
Eğer sonuçları (genellikle matlab komut satırına çıkış şey) görmek için gerektiğinde, sadece komutundan sonra noktalı virgül atlarsanız ve çıkış yakalamak engOutputBuffer kullanın.
İşte yazdığım şey basitleştirilmiş bir örnek:
#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);
}
Eğer derlenmiş temel bir PHP uzantısı var sonra, uzantısı haline yukarıdaki motoru aramaları atmak ve size uzantısı tanımlanan ettik PHP fonksiyonunu kullanarak MATLAB çağırabilirsiniz.
MATLAB API derlenmesi muhtemelen zor kısmıdır. İşte (PHP uzantısı kodu olmadan) benim Makefile içeriği vardır.
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
Muhtemelen uzatma çağırmadan / derleme önce LD_LIBRARY_PATH ayarlamak gerekir ... Ancak bu alternatifler vardır:
LD_LIBRARY_PATH=/usr/local/matlabR2009a/extern/lib/glnx86:/usr/local/matlabR2009a/bin/glnx86:/usr/local/matlabR2009a/sys/os/glnx86:$LD_LIBRARY_PATH