c语言环境中调用matlab程序指南

c语言环境中调用matlab程序指南

ID:33497912

大小:464.92 KB

页数:10页

时间:2019-02-26

c语言环境中调用matlab程序指南_第1页
c语言环境中调用matlab程序指南_第2页
c语言环境中调用matlab程序指南_第3页
c语言环境中调用matlab程序指南_第4页
c语言环境中调用matlab程序指南_第5页
资源描述:

《c语言环境中调用matlab程序指南》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、C语言环境中调用Matlab程序指南甄梓宁znzhen@gmail.comMatlab在计算方面功能强大、编写简单,但是要运行Matlab程序必须装有Matlab并且用户界面也不够完善,因此除了计算的其他部分采用C等更规范完备的语言进行编写是较好的选择。本文就对如何在C程序中调用Matlab程序作说明。在C程序中调用Matlab程序有两大类方法。第一种是调用Matlab引擎,第二种是将m文件打包成dll文件在C语言环境下调用。前者虽然易于实现,可以实时监控程序的运行,但是独立性差,需要安装完整版Matlab,且每次调用都会启动MATLAB.exe进程;后者则实现复

2、杂,调试麻烦,但只需安装MCR(MatlabComponentRuntime),耗费资源较少。关于MCR,请见第四章的说明。至于两种方法需要在C环境中如何配置请见第五章。而反过来若要在Matlab下调用C程序则一般使用Matlab自带的mex工具,在此不作介绍。一、调用Matlab引擎调用Matlab引擎可以在WIN32、MFC中使用,它的原理实际上相当于打开一个精简版的Matlab然后往里面输命令。下面是调用Matlab中的加法程序add.m的例子。先在Matlab的work目录下创建add.m文件并编写程序如下:functions=add(a,b)s=a+b;

3、在C程序中,首先打开精简版的Matlab:(所需头文件,引用库等见第五章)Engine*ep=engOpen(NULL);编译运行后,会自动打开一个命令行监控窗口,输入pwd就可以看到当前的工作目录,于是需要先将工作目录转换至存放add.m的目录:engEvalString(ep,”cd..\..\work”);engEvalString是往Matlab里输命令的函数,显然我们的目标是成功运行:engEvalString(ep,”s=add(a,b)”);当然,目前Matlab中并没有a和b两个变量,因此需要在C中初始化这两个变量并转换成Matlab基本变量类

4、型mxArray,才能将它们输入到Matlab中。关于mxArray,在第三章会有详细说明。下面是对a=1,b=2的转换过程:1doubleaval=1,bval=2;mxArray*a=mxCreateDoubleMatrix(1,1,mxREAL);mxArray*b=mxCreateDoubleMatrix(1,1,mxREAL);mxSetPr(a,&aval);mxSetPr(b,&bval);于是可以往Matlab里输入了:(双引号内是在Matlab里的变量名称)engPutVariable(ep,"a",a);engPutVariable(ep,"b

5、",b);运行add.m:engEvalString(ep,”s=add(a,b)”);编译运行后可以在监控窗口中查看s,确认是3无误。接下来就是怎样把s从Matlab读入C中的问题了,也很方便:mxArray*s=engGetVariable(ep,"s");显示一下:printf("s=%f",*mxGetPr(s));最后不要忘记关闭Matlab:engClose(ep);用到的几个mxArray也需要释放,在此不述,具体请见第三章。到此,调用Matlab引擎的全过程就结束了。不管m文件的函数形式有多复杂,都万变不离其宗,改变的只有变量与mxArray相互转

6、换那一部分,具体请见第三章。另外,Matlab还提供了将监控窗口中的显示存入某buffer的函数。可以如下设置:charbuffer[1000];engOutputBuffer(ep,buffer,1000);这样,所有显示都会存入buffer中,这对调试很有帮助。如果想取消这个功能,则:engOutputBuffer(ep,NULL,0);最后还可以将监控窗口关闭或重新打开:engSetVisible(ep,false);engSetVisible(ep,true);以上便是调用Matlab引擎的全部内容。这种方法步骤简单,调试也方便,所以在一般场合下使用已经足

7、够好了。2二、打包m文件至dll打包m文件至dll相对于调用Matlab引擎,唯一也是最重要的一点好处是便于发布。在一台没有安装Matlab的电脑中,利用最少的资源运行Matlab程序只有这种方法。该方法根据dll的不同又可分为两类:一是打包成COM或.NET组件的dll,二是传统的dll。前者除了在WIN32、MFC中还可在.NET中运行。本文仅介绍较为简单的打包成传统dll的方法。下面这个例子将自己编写的加法程序add.m及乘法程序multi.m打包至calc.dll并在C程序中调用。add.m如第一章所示,multi.m如下所示。functions=mult

8、i(a,b

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。