预览加载中,请您耐心等待几秒...
1/3
2/3
3/3

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

在c,c++中调用Matlab 在c,c++中调用Matlab 在C、C++中调用MatlabMatlab是美国MathWorks公司的产品,是一种以矩阵为基本编程单位的高效数值计算语言。Matlab集科学计算、图像处理、声音处理于一体,为用户提供了丰富的Windows图形界面设计方法,使用户能够在利用其强大数值计算功能的同时设计出友好的图形界面。Matlab已经被证明是在应用数学、物理、工程学和其它涉及复杂数值计算等应用领域中解决问题的优秀工具。Matlab能够在Win95/98、Win2000、Linux和Unix等多种操作系统平台上运行。C、C++是众多程序员十分喜爱的高级程序设计语言,但其在数值处理分析和算法工具等方面,效率远远低于Matlab语言;在准确方便地绘制数据图形方面,Matlab语言具有C和C++无法比拟的优势。但Matlab作为一种以解释方式运行的计算机语言,其程序的执行效率较低,而且不能实现端口操作和实时控制。因此,若能将两者结合运用,实现优势互补,将获得极大的效益。为此,MathWorks公司提供了Matlab和C、C++的接口。通过接口,用户既可在C程序中调用Matlab的函数,也可在Matlab中调用C或C++程序,从而实现Matlab和C、C++的混合编程。本文主要讨论如何在C、C++中调用Matlab。一、过程分析在C、C++中调用Matlab的主要过程如下所示:1)首先调用engOpen函数打开一个Matlab工程。2)生成mxArray。在Matlab中,所有变量类型,如标量、向量、矩阵、字符串、细胞矩阵和结构,都以mxArrays形式来保存,固数据操作都必须通过这些mxArrays来完成。生成mxArray有两种不同的方式。一是用mxCreate函数来创建矩阵,之后用mxSetName函数对它进行命名。另一种方式是选择将一个自定义的数据结构复制到mxArray中,值得注意的是Matlab在存储矩阵时是按列序保存的,而在C、C++中是按行序保存的,所以转换时注意分清下标。3)调用engPutArray函数将矩阵放入到Matlab工作区中。4)通过engEvalString函数向Matlab传递命令,如果成功,函数返回值为此0,否则返回一个非0值。5)将Matlab中的运行结果回传给C、C++二、程序实现我们通过一个简单的程序demo.c来说明C、C++对Matlab的调用。#include#include#include#include/*在头文件中加入engine.h。其包含了调用的Matlab函数声明。*/#include"engine.h"intPASCALWinMain(HANDLEhInstance,HANDLEhPrevInstance,LPSTRlpszCmdLine,intnCmdShow){Engine*ep;//定义Matlab引擎mxArray*a_ptr=NULL;charbuffer[300];//定义数据缓冲区double*wu;inti,j;/*创建一个新矩阵*/a_ptr=mxCreateDoubleMatrix(10,10,mxREAL);mxSetName(a_ptr,"wu");wu=mxGetPr(a_ptr);for(i=0;i<10;i++){for(j=0;j<10;j++){wu[i+10*j]=(j+1)*(j+1)*(i+1)*(i+1);}}/*打开Matlab引擎*/if(!(ep=engOpen(NULL))){MessageBox((HWND)NULL,(LPSTR)"Can'tstartMatlabengine",(LPSTR)"demo.c",MB_OK);exit(-1);}/*传递新矩阵*/engPutArray(ep,a_ptr);/*画出图形并保存*/engEvalString(ep,"mesh(wu);");engEvalString(ep,"printpicture.eps-deps;");/*获取Matlab输出*/engOutputBuffer(ep,buffer,300);/*关闭Matlab引擎,结束调用*/engClose(ep);mxDestroyArray(a_ptr);return(0);}当然,该程序在编译之前还需设置一些环境参数。在不同的开发环境中,其设置方法略有差异,我们以BorlandC++builder开发平台为例加以说明。1)首先必须完成Matlab中链接库的导入工作。在Matlab\extern\include中存在_libmx.def、_libmat.def、_libeng.def等定义文件,在DOS环境中对它们执行命令:c:\matlab\extern\include>implib