Linux下C和matlab混合编程学习(1)

时间:2024-04-03 15:44:12

Linux下C和matlab混合编程学习(1)

 Linux下C和matlab混合编程学习(1) (2012-04-09 20:46:28)

Linux下C和matlab混合编程学习(1)转载

标签: 

 

linux

 

matlab

 

c

 

绘图

 

混合编程

分类: 程序Linux电脑学习

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);

 

}

 

有图为证:

Linux下C和matlab混合编程学习(1)