在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Linux下C和matlab混合编程学习(1)(2012-04-09 20:46:28)
1.编译m文件为可执行文件mex -setup设置好了c编译器之后。 写个简单函数test.m function test x=0:0.01:2*pi; y=sin(x); plot(x,y) 保存. 编译mcc -m test.m 就会生成可执行的文件test和一个脚本run_test.h ./run_test.h <matlab_root>/bin
2.C中调用matlab计算引擎(绘图等) 步骤: (1)安装csh; (2)设置:动态库路径LD_LIBRARY_PATH中添加<matlab_root>/bin/<Arch>; PATH路径中添加<matlab_root>/bin (3)编译:gcc test.c -o test -I $HOME/MATLAB/R2011b/extern/include -L $HOME/MATLAB/R2011b/bin/glnx86/ -leng -lmx -lmex (注意cpu是x86还是a64) (4)运行:./test (参考:http://hi.baidu.com/36470902/blog/item/c323a5b14d3c175c08230250.html)
其中第(2)步设置,在~/.bashrc中添加: MATLAB="Matlab_Installed_Directory" (比如说我的安在了$HOME/MATLAB/R2011b下面,所以应该写全到2011b) export PATH=~/Program:$MATLAB/bin:$PATH export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MATLAB/bin/glnx86 #这里注意cpu是x86还是a64 export C_INCLUDE_PATH=$C_INCLUDE_PAT:$MATLAB/extern/include export LIBRARY_PATH=$LIBRARY_PATH:$MATLAB/bin/glnx86 (前面两行是一个是可执行文件搜索路径,一个是动态库搜索路径,后面两个是gcc编译时的include头文件搜索路径和动态库搜索路径) 这样第三步编译就可以简单的写为: gcc test.c -o test -leng -lmx -lmex
源文件test.c如下:
#include <math.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "engine.h"
#define N 500
main() { int i; double x[N],y[N]; Engine *ep;
for(i=0;i<N;i++){ x[i]=0.01*i; y[i]=sin(x[i]); }
//启动matlab计算引擎,异常处理 if(!(ep=engOpen(NULL))){ printf("Can't start Matlab engine!"); exit(1); }
//定义mxArray mxArray *xx=mxCreateDoubleMatrix(1,N,mxREAL); mxArray *yy=mxCreateDoubleMatrix(1,N,mxREAL);
//将数组复制到mxArray memcpy(mxGetPr(xx),x,N*sizeof(double)); memcpy(mxGetPr(yy),y,N*sizeof(double));
//将mxArray数组写入到Matlab工作空间,并命名 engPutVariable(ep,"xx",xx); engPutVariable(ep,"yy",yy);
//向Matlab引擎发送画图命令 engEvalString(ep,"plot(xx,yy);");
printf("Press 'Enter' to exit!"); getchar();
//销毁mxArray数组 mxDestroyArray(xx); mxDestroyArray(yy);
//关闭matlab引擎 engClose(ep);
}
有图为证: |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论