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

转载 2017年07月25日 21:05:16
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

其中第(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
exportC_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)

[Matlab] matlab与C/C++混合编程汇总

matlab 与外部程序的编程接口两大类:                一是 如何在matlab里调用其他语言写的代码。 (见例子:使用C-MEX技术,ActiveX技术)             ...
  • fonjames
  • fonjames
  • 2016年06月01日 15:37
  • 5899

C/C++与Matlab混合编程初探

Matlab 拥有丰富的功能,编程简单。不过,有些情况下,Matlab程序的执行速度比较慢。C/C++编译执行的程序速度比较快,编程难度上比Matlab要高一些。因此存在一种方案,就是使用Matlab...
  • bendanban
  • bendanban
  • 2014年07月15日 21:42
  • 27458

matlab与C/C++的混合编程

matlab比较擅长矩阵运算,而运算for的速度较慢,如果将matlab与C或C++进行混合编程,则可以提升程序运行速度....
  • zhj_matlab
  • zhj_matlab
  • 2016年10月30日 16:12
  • 1408

Matlab和C混合编程的一个靠谱思路

Matlab和C混合编程的一个靠谱思路写在前面的话 (1)如无特殊需要(如速度),尽量不要做A语言和B语言互相转化这样的事情。 (2)如无特殊需要(如封装),尽量不要做A、B两种语言互相调用...
  • huiyuanliyan
  • huiyuanliyan
  • 2016年06月28日 10:14
  • 2798

Matlab 和 C/C++混合编程

说明: 这篇博文是对下面两边博文进行总结和整理,以及补充。 blog: http://blog.csdn.net/jtop0/article/details/7657227 http://blog....
  • Work_Hard_SB
  • Work_Hard_SB
  • 2015年01月09日 20:38
  • 3645

MATLAB 与C混合编程:通过mex提高运行速度

把耗时的函数(尤其是包含大量循环)用c语言实现,并编译成mex函数可以加快执行速度。 Matlab本身是不带c语言的编译器的,所以要求你的电脑上已经安装有VC6.0或Visual Studio或其他编...
  • u013598733
  • u013598733
  • 2016年05月03日 23:03
  • 1184

Matlab与VC混合编程之三

Matlab与VC混合编程之三 1. 有没有优雅的使用方式? 在《Matlab与VC混合编程之二》中我们学会了如何使用向量或者矩阵在VC与Matlab COM组件之间传递参数。在第二章的实现中,标量和...
  • zhangkunhn
  • zhangkunhn
  • 2013年07月01日 23:59
  • 629

关于matlab与C语言的混合编程

摘要:本文着重描述了运用MATLAB命令将M文件翻译为C语言程序,并修改为可直接调用的C语言函数的方法,使用该方法所需要注意的方法局限性和MATLAB版本差异的影响。运用该方法将能够使C语言能直接使用...
  • u013845708
  • u013845708
  • 2014年06月28日 18:50
  • 2223

MATLAB与C/C++混合编程之MATLAB调用C程序

通过把耗时长的函数用c语言实现,并编译成mex函数可以加快执行速度。Matlab本身是不带c语言的编译器的,所以要求你的机器上已经安装有VC,BC或Watcom C中的一种。如果你在安装Matlab时...
  • sbtdkj1017
  • sbtdkj1017
  • 2007年11月25日 15:28
  • 33168

matlab与C混合编程调试-vs2010+matlab2012a

matlab 对于科学计算来说非常方便易用,但是效率不太高,尤其是一些自己写的未经优化的程序。可以将计算比较耗时的算法用C语言实现然后在matlab下调用,但关键是如何编写和调试。编写还好说,查看一下...
  • libin88211
  • libin88211
  • 2014年01月02日 21:32
  • 1856
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux下C和matlab混合编程学习(1)
举报原因:
原因补充:

(最多只允许输入30个字)