欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    毕业设计(论文)VC与MATLAB混合编程.doc

    • 资源ID:2388579       资源大小:1.46MB        全文页数:27页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    毕业设计(论文)VC与MATLAB混合编程.doc

    摘要Visual C+功能强大,能够形成各种用户界面,甚至能对底层硬件进行操作。但是在开发一些较为复杂的算法时,是比较麻烦的。幸运的是Matlab作为一个功能强大且不断更新的软件包为我们提供了各种复杂算法。如果能将Matlab开发好的算法直接为VC程序员所用,那将大大缩短开发周期,降低产品成本。本文正是研究如何在VC集成环境中调用Matlab的数学计算函数,等效为自己的函数。主要有两种方法,一是在Visual C+中调用Matlab引擎,二是在Visual C+中调用Matlab数学函数库。关键字Visual C+Matlab程序设计Abstract:Visual C+ has powerful function, and it can supply a considerable variety of UI, and even can operate hardware. But it is inconvenient when we implement some more complex arithmetic. Fortunately MATLAB provides a variety of complex arithmetic as a powerful and updated continually software packet. It will cut the cost of product and implementation period. This thesis is about using matlab function in VC IDE as itself. There are two methods: one is using Matlab Engine in Visual C +. The other one is using Matlab math library in Visual C+. Key wordsVisual C+MatlabProgram Design目 录摘要IABSTRACT:II第一章 前言11.1 Matlab功能及其体系11.2 Matlab外部接口概述31.2.1 mxArray 数据结构31.2.2 mx函数应用81.2.3 eng函数11第二章VISUAL C+调用MATLAB引擎132.1概述142.2 Matlab的环境配置142.3使用VC+6.0向导生成应用程序15第三章VISUAL C+调用MATLAB数学库183.1使用Matlab数学函数库的环境设置183.2 在Visual C+中调用MATLAB数学函数库19总结22附录24参考文献26第一章 前言1.1 Matlab功能及其体系MATLAB 产品是用来解决工程与科学实际问题的工程软件,而外部接口编程是该软件的一项基本功能。掌握MATLAB 的基本使用方法是学习MATLAB 外部接口编程的基础,所以在正式学习使用MATLAB 外部接口编程之前,首先回顾一下MATLAB 软件的基本环境及其使用方法,并了解一下MATLAB 的产品体系。MATLAB 的名称源自Matrix Laboratory,它的首创者是在数值线性代数领域颇有影响的Cleve Mofer 博士,同时他也是生产和经营MATLAB 产品的美国Mathworks公司的创始人之一。MATLAB本身是一种科学计算软件,专门以矩阵的形式处理数据。MATLAB将高性能的数值计算和可视化集成在一起,并提供了大量的内置函数,还提供了一种高级的解释型编程语言M 语言。MATLAB 产品具有良好的开放性和扩充性,利用MATLAB 提供的科学计算能力和M 语言编程能力开发了很多专业函数并组成了不同的工具箱,而这些工具箱产品被广泛地应用于科学计算、控制系统、信息处理等领域的分析、仿真和设计工作中。大多数的MATLAB 工具箱中所包含的代码都是开放的,这使得丁几程师在使用MATLAB 软件解决工程问题,不断深化对问题认识的同时,还可以非常容易地对MATLAB 的功能进行扩充,从而不断完善MATLAB 产品以提高产品自身的竞争能力。口前MATLAB 产品族主要应用于以下领域: 数值分析; 数值和符号计算; 工程与科学绘图; 控制系统的设计与仿真; 数字图像处理; 数字信号处理; 财务与金融工程; 图形化的用户界面开发。MATLAB 产品由若干个模块组成,不同的模块完成不同的功能,其中包括:. MATLAB;. MATLAB Toolboxes;. MATLAB Compiler;. Simulink;. Simulink Blocksets;. Real-Time Workshop(RTW);. Stateflow;. Stateflow Coder;图1-1 MATLAB的产品体系由这些模块构成MATLAB产品体系如图1-1所示。其中,MATLAB 是MATLA产品家族的基础,它提供了基本的数学算法,例如矩阵运算、数值分析算法等,MATLAB 集成了2D 和3D 图形功能,以完成相应的数值可视化工作,同时MATLAB 还提供了一种交互式的高级编程语言M语言,利用M 语言可以通过编写脚本或者函数文件实现用户自己的算法。1.2 Matlab外部接口概述尽管利用MATLAB 提供的高级编程语言 M 语言进行程序开发已经基本能够满足一般算法开发的需要了,但是在很多情况下,MATLAB 的用户仍需要将MATLAB 同其它的软件或者开发语言结合在一起共同完成算法开发的任务,例如在工程中广泛应用的C 语言或者Fortran 语言。广大MATLAB 的用户提出的需求包括: 在MATLAB 中调用已有的C 语言或者Fortran 语言的代码。 在C 语言或者Fortran 语言中调用MATLAB 的算法。 利用COM 标准进行客户端服务器模式开发,例如在Visual Basic 程序或者Microsoft Excel中调用 。 在MATLAB 中直接加载动态链接库。 在M 语言中使用Java 类。在解决这些问题的时候,都可以使用MATLAB 的外部接口功能。根据题目要求本文只讨论Matlab与Visual C+间的接口问题。1.2.1 mxArray 数据结构MATLAB 软件是以矩阵为基本运算单位的,这与C 语言不同,在C 语言中,只有基本的双精度类型、整数类型、字符类型的变量定义,它们和MATLAB 中相应类型的变量定义是不一样的。为了能够在C 语言中表示MATLAB 的数据,MATLAB 提供了一个特殊的C 语言结构mxArray ,这个结构就是用来在C 语言中表示MATLAB 数据的,在MATLAB 的C 语言外部接口编程中将大量使用该结构。mxArray 本身是一个C 语言的结构,该结构的定义在Matrix.h 文件中,它的定义如下:struct mxArray_tag void*reserved; int reservedl2 ; void*reserved2 ; int number_of_dims ; unsigned int reserved3 ; struct unsigned int scalar_flag : l ; unsigned int flagl:1 ; unsigned int flag2:l ; unsigned int flag3:1 ; unsigned int flag4:l ; unsigned int flag5:l ;unsigned int flag6:1 ; unsigned int flag7:l ; unsigned int private_data_flag:l ; unsigned int flag8:1 ; unsigned int flag9:1 ; unsigned int flag10:1 ; unsigned int flag11:4 ; unsigned int flagl2:8 ; unsigned int flagl3:8 ; flags ; unsigned int reserved42 ; union struct void*pdata ; void*pimag_data ; void*reserved5 ; int reserved63 ; number_array ; data ; ; mxArray 结构由很多个字段组成,这些字段完成了记录MATLAB 数据的工作。一般地,mxArray 在记录一个数据时,需要保存下列信息:数据类型。数组维数。与数组相关的数据(尺寸和数据)。如果是数值对象,则保存数据对象是实数还是虚数。如果是稀疏矩阵,则保存矩阵中非零元素的个数和索引。如果是结构和对象,则保存字段的数量和相应的名称。在图1-1 中显示了mxArray保存双精度矩阵的情况。 从图1-1可以看出,mxArray 将MATLAB 数据的信息分别保存在不同的字段里,例如m 和n 分别表示二维矩阵的行数和列数;对于多维数组,m 是矩阵的行数,而n 是数组中每一个矩阵的列数、页面数和其它数据的乘积。维数保存着数据对象实际的维数,而size字段存储着每个维存储数据元素的个数。pr为实部数据的指针,pi 是虚部数据的指针,如果没有虚部数据,则pi为NULL。但是,在mxArray数据结构的定义中是不能直接找到这些字段的对应关系的,如果需要操作该数据对象,则需要使用专门的函数。一般的情况下,直接操作mxArray 对象比较困难,而且在使用mxArray 数据对象时,都必须使用mxArray 数据类型的指针来完成工作。为了便于创建和访问mxArray 数据对象,MATLAB 提供了相应的函数,这些函数就是MATLAB 提供的mx 函数,该函数具有C 语言的形式,利用这些函数不需要直接对mxArray 结构对象的字段进行赋值或者读取了。关于C 语言的mx 函数创建数据对象的方法将在后面的内容进行介绍,而详细的C 语言mx函数的解释请参阅MATLAB 的帮助文档。在进行外部接口编程时,获取数据类型信息是经常需要的一种操作。在mxArray 结构中同样也保存着这样的信息,这类信息是通过mxClassID 的枚举类型变量来保存的,该枚举类型定义如下:typedef enum mxUNKNOWN_CLASS = 0 , mxCELLes_CLASS , mxSTRUCT_CLASS , mxLOGICAL_CLASS , mxCHAR_CLASS , mxSPARSE_CLASS , / * OBSOLETE ! DO NOT USE * / mxDOUBLE_CLASS , mxSINGLE_CLASS , mxlNT8_CLASS , mxUINT8_CLASS , mxINT16_CLASS , mxUINT16_CLASS , mxINT32_CLASS , mxUINT32_CLASS , mxINT64_CLASS , / * place holder 一future enhancements * / mxUINT64_CLASS , / * place holder 一future enhancements * / mxFUNCTION_CLASS , mxOPAQUE_CLASS , mxOBJECT_CLASS mxClassID ; 在MEX 文件中进行数据类型判断时,将返回InxClassID 类型的变量。此外,针对复数和实数也定义了一个枚举类型,该枚举类型的变量将在C 语言应用程序中加以定义。它的定义如下:typedef enum mxREAL , mxCOMPLEX mxComplexity ; 在C 语言中创建mxArray 数值类型对象需要指定数据是复数类型还是实数类型。为了能够保存字符串类型的变量,在Matrix.h 文件中还专门定义了相应的数据类型mxChar 。mxChar 是mxArray 存储字符类型数据时使用的变量类型,该数据类型使用了16 位的无符号整数,定义如下:typedef uintl6_T mxChar ; 这里unitl6_T是MATLAB 自定义的数据类型符号,相当于C语言中unsigned int 的定义。为了便于用户学习外部接口编程,MATLAB 也提供了相应的示例。在Windows 平台下,这些示例都保存在MATLABROOTexternexamples 目录中,在mex 子目录下都是相应的MEX函数文件例子。1.2.2 mx函数应用MATLAB 语言使用单一的对象类型,这就是MATLAB 阵列。所有的MATLAB 变量,包括数量、向量、矩阵、字符串、单元阵列、结构体等,都以MATLAB 阵列的方式进行存储。在C 语言中,MATLAB 阵列声明为数据结构mxArray ,该数据结构包含下面的内容:. 语言的类型;它的维数;它的数据;如果是数值型,则变量是实数或复数;如果是结构或对象,则要指定字段数和字段名。在上一节中,我们可以使用engGetVariable engPutVariable函数中对mxArray 进行读写,但我们还希望对mxArray 进行操作,比如创建和删除mxArray 、管理mxArray 的维数、管理InxArray 的数据等。在MATLAB 的C 函数库中定义了一系列函数来完成对mxArray 的操作。1创建和清除MATLAB 阵列 MATLAB 有多种变量类型,对每种数据类型都有一个函数来创建,这些创建函数有统一的形式,这就是mxcreatexxx 。例如创建一个二维的double 型数据类型mxArray 采用下面的函数: mxArray*mxCreateDoubleMatrix(intm,int n,mxComplexity ComplexFlag );其中:m 为阵列的行数,n 为阵列的列数。ComPlexFlag 为常数,取mxREAL和mxCOMPLEX ,分别代表阵列中的数据是实数还是复数。函数如果调用成功,则返回一个指向数据结构mxArray 的指针,否则返回NULL。 mxArray使用结束后需要调用mxDestroyArray 函数从内存中把它删除。mxDestroyArray 的声明为: void mxDestroyArray(mxArray*array_ptr ); 其中array_ptr为需要删除的mxArray指针。下面的代码显示了创建和删除MATLAB阵列函数的使用方法。mxArray*temp=mxCreateDoubleMatrix (1,l,mxREAL);mxDestroyArray(temp);表1-1 列出了创建阵列的函数。函数名功能MxCreateDoubleMatrix创建二维double 型阵列mxCreateCellArray创建多维单元阵列mxCreateCellMatrix创建二维的单元阵列mxCreateCharArray创建多维字符阵列mxCreateSparse创建稀疏矩阵mxCreateNumericArray创建多维数值阵列mxCreateString创建字符串mxCreateStructArray创建结构体阵列mxCreateStructArray创建结构体阵列mxCreateStructMatrix创建结构体矩阵表1-1阵列创建函数。2.管理数组的维数采用mxGetM和mxGetN函数来得到矩阵的行数和列数。它们的声明如下:int mxGetM(const mxArray*array_ptr);int mxGetN(const mxArray*array_ptr ); 其中:array_ptr为指向mxArray的指针。返回值分别是矩阵的行数和列数。如果要得到mxArray的维数,可以调用mxGetNumberOfDimensions 函数。它的声明如下: int mxGetNumberOfDimensions(const mxArray*array_ptr); 其中:函数返回值为mxArray 的维数,它总是大于或等于2。使用mxGetNumberOfDimensions可以得到mxArray的维数,而如果要得到特定维的元素个数,则要调用函数mxGetDimensions。它的声明如下:const int*mxGetDimensions(const mxArray*array_ptr); 其中array_ptr为指向mxArray的指针,返回值为一个int数组,各维的元素个数将保存在这个数组中。 另外还有两个与数组维数管理有关的函数,它们是: void mxsetM(mxArray*array_ptr,int m); void mxsetN(mxArray*array_ptr,int n); 它们分别设定矩阵行数m和列数n。array_ptr 为指向mxArray 的指针。3.判断阵列类型由于mxArray变量类型众多,在对mxArray类型的变量进行操作之前,需要判断它是哪种类型的变量。同创建mxArray类型变量一样,MATLAB提供了统一形式的变量类型判断函数来完成各种类型变量的判断,它们具有bool mxIsxxx的统一形式。表1-2列出了这些判断函数。表1-2判断阵列类型函数函数表函数名功能mxIsChar判断是否为字符mxIsClass判断是否为特定的类对象mIsComplex判断是否为复数mxIsDouble判断是否为双精度浮点数mxIsEmpty判断是否为空阵列mxIsFinite判断是否为有限mxIsInf判断是否为无限4.阵列访问函数MATLAB 提供了很多函数来访问和操作阵列,它们通过获得mxArray指针来对阵列中的数据进行读写。阵列访问函数具有mxGetxxx和mxsetxxx的形式,表7-3列出了这些函数的名称及功能。 表1-3阵列访问函数函数名功能mxGetPi, mxGetPr获取包含阵列的虚部和实部数据的阵列mxsetPi , mxsetPr设置阵列的虚部和实部数据mxGetstring获取字符串MxGetClassID获取mxArray结构体类型MATLAB 提供的mx函数众多,上面列出了部分函数名及其功能描述,这些函数的详细说明清参考MATLAB 的在线帮助。1.2.3 eng函数引擎库包含下面一些函数,这些函数完成对MATLAB 计算引擎的控制。引擎库函数的命名规则是在名称前面加上3 个前缀字符“eng”。下面简单介绍一下引擎库函数。1.启动和关闭引擎(1) engOpen函数该函数启动MATLAB 引擎,其函数声明如下:Engine*engOpen(const char*startcmd);参数:startcmd:启动MATLAB进程的字符串,在Windows环境下,该字符串必须为NULL。函数返回一个指向引擎句柄的指针。函数engOpen(startcmd)作用是启动一个MATLAB进程、建立连接、返回一个惟一的引擎标别符或在启动引擎失败时返回NULL 。( 2 ) engClose函数该函数关闭MATLAB引擎。其函数声明如下:int engClose(Engine*ep); 参数:ep :引擎指针。函数返回0 表示关闭成功,返回l 则关闭失败。函数engClose 的作用是关闭一个MATLAB 引擎,它通过向MATLAB引擎发送一个关闭命令来断开连接。2 向MATLAB发送命令(l) engEvalString函数该函数向MATLAB发送一个字符串,让MATLAB执行,其函数声明如下:int engEvalstring(Engine*ep,const char*string); 参数:ep :事先启动的引擎指针。string:执行的字符串。 函数返回0表示执行成功,如果返回l,则说明ep对应的引擎已经关闭。(2) engOutPutBuffer函数该函数获取MAfLAB 命令窗口的文字输出,其函数声明如下: int engOutPutBuffer(Engine*ep,char*p , int n); 其中ep为事先启动的MATLAB引擎指针,n为缓冲区的大小,p为字符串缓冲区指针。OutPutBuffer为函数engEvalString的返回值定义一个字符串缓冲区,这个返回值通常显示在屏幕上。要停止缓冲,只需要调用下面代码:engOutPutBuffer ( ep , NULL,0) 3.从MATLAB 发送和接收数据 (1)engGetVariable函数该函数从MATLAB 引擎工作空间复制一个变量,其函数声明如下: mxArray*engGetVariable(Engine*ep,const char*name ) ; 其中ep为事先打开的MATLAB引擎指针,name为从MATLAB得到的变量。如果函数调用成功,则返回一个mxArray类型的指针;如果失败,则返回NULL , engGetvariable调用失败的情况一般是指定名称的变量不存在。( 2 ) engPutVariable函数该函数把变量写入MATLAB引擎的工作空间,其函数声明如下:int engPutVariable(Engine*ep,const char*name,const mxArray*mp ) ; 其中ep事先打开的引擎指针,name为写入引擎工作空间中变量的名称,mp为数组针。PutVariable把变量mp 写入引擎ep,指定变量名称name。如果引擎工作空间中该名称的变量不存在,则新创建该变量;如果引擎工作空间中同名的变量已经存在,则用新变量代替已经存在的变量engPutVariable 函数返回0表示调用成功,出错则返回l 。4.显示或隐藏MATLAB窗口(1)engGetVisible函数该函数判断当前MATLAB 窗口是否可见,其函数声明如下: int engGetVisible(Engine*ep,bool*value); 其中:ep为事先打开的引擎指针,value为指向gGetvisible返回值的指针。(2) engsetvisible函数该函数显示或隐藏MATLAB窗口,其函数声明如下:int engSetVisible(Engine*ep,bool value); 其中:ep为事先打开的引擎指针,value为MATLAB设定的可见性属性。当属性值为1时,MATLAB 窗口可见;为0时,MATLAB窗口不可见。下面的代码打开MATLAB引擎,并隐藏MATLAB 窗口:Engine*ep;bool vis; ep=engOpen(NULL); engsetVisible(ep,0);第二章Visual C+调用Matlab引擎尽管MATLAB 在科学计算、系统设计分析等方面有着无可比拟的优势,但是从计算机程序开发的角度上看,MATLAB的M语言还是有些功能无法实现或者实现起来有一定困难,例如复杂的用户图形界面应用程序以及对计算机操作系统或者硬件设备操作的能力等。为了能够在其它的高级语言中使用MATLAB的基本算法,MATLAB 提供了多种手段来完成,其中计算引擎应用是相对常用也是最容易实现的一种。本章将详细介绍开发MATLAB 计算引擎应用程序的方法。2.1概述MATLAB 计算引擎则是在C或Fortran语言环境中调用MATLAB函数的方法。MATLAB 的计算引擎应用实际上就是利用MATLAB 提供的一组接口函数(API),在用户开发的C 语言或者Fortran语言应用程序中,通过某种通信机制后台调用MATLAB应用程序以完成复杂的系统任务。计算引擎应用程序是在MATLAB 环境之外的可执行应用程序,在它们运行的过程中需要利用某种通信机制和另外一个MATLAB 进程(会话)交互数据。在不同系统平台上,应用程序使用的通信机制是不一样的,例如在Unix系统中使用管道(pipe)完成,而在windows 平台中,这种通信机制是利用COM 应用接口IEngine 来完成。2.2 Matlab的环境配置要实现Visual C+调用MATLAB引擎进行混合编程,需要一个MATLAB库:libeng.lib。这个库要通过动态链接库libbeng.dll生成,它们存在于MATLABexterninclude目录下。在Visual C+的集成环境中建立和调试MATLAB引擎程序的基本步骤如下:(1)启动Microsoft Visua1 C+6.0 集成环境,建立MFC Appwizard(exe)类型工程 。 (2)在项目工程创建完毕以后,选择下拉式菜单Tools中的菜单项Options,将弹出Options对话框,选择其中的Directories 属性页,在其中的show directories for 下拉式选项框中分别选择Include Files 和Library Files,在下部的编辑框中输入以下路径:MATLAB 根目录externinclude MATLAB 根目录externlibwin32microsoftmsvc60 然后选择OK 按钮。 (3)选择下拉式菜单Project中的菜单项settings,打开工程设置属性页,选择Link 页面,在Object/Libra即modules编辑框中,添加文件名libmx.lib。 步骤(2)只需要设置一次,而步骤(3)则每个工程需要单独设定,因为每个工程使用的MATLAB 函数库可能不一样。因此,步骤(3)的设置可能不同,上面我们只设定了libmx.lib,这样我们只能使用MATLAB的引擎库。如果使用了其他的库函数,则需要添加相应的库文件。 VC是通过使用MATLAB 引擎库函数engEvalstring向MATLAB发出计算指令的,MATLAB 环境中的参数(线性方程的参数)要通过MATLAB引擎库函数engPutArray输入,MATLAB计算的结果要通过MATLAB引擎库函数engGetArray输入到VC环境中去。2.3使用VC+6.0向导生成应用程序本小节利用例 simpleengdemo.c(见附录)的代码和Microsoft Visual studio6 来讲解使用集成开发环境进行计算引擎应用程序编译的完整过程。首先启动visual studio ,然后执行“File ”菜单下的“New ”命令,在弹出的对话框中选择“Win32 Console Application ”作为即将创建的应用程序类型,在“Project name ”文本输入框处设定应用程序的工程名称,也就是未来生成的可执行程序的名称,如图- 所示。单击“OK ”按钮之后,在弹出的对话框中选择创建空的项口文件选项,并且单击对话框的“Finish ”按钮,这样VisualC +将自动创建一个空白的项目,等待添加其它类型文件。执行“Tools”菜单下的“Options”命令,在弹出的对话框中选择“Directories ”属性页。在该属性页下设置Include 路径属性和LIB 路径属性,分别将MATLAB 外部接口应用程序的Indude 路径和LIB 路径添加到这里。MATLAB 外部接口应用程序头文件所在的Include 路径为E:MATLAB6P5P1EXTERINCLUDE ,注意如果开发应用程序时使用了C+语言,则还要将E:MATLAB6P5P1EXTERNINCLUDECPP 路径添加到Include 路径。在设置LIB 路径时,需要根据不同的编译器选择LIB 路径,MATLAB 外部接口应用程序针对MSVC+6 . 0 的库文件路径是E:MATLAB6P5P1EXTERNLIBWIN32 MICROSOFTMSVC60。将上述的两个路径分别在如图所示的对话框中设置完毕。设置完毕后,单击“OK”按钮确认并退出Option对话框。向项目工程中添加必要的源代码文件,如果用户的源代码文件不存在,则可以直接执行“File”菜单下的“New”命令,创建一个新的源代码文件并将其添加到项目工程中去。如果需要添加的烟代码已存在,则执行“Project”菜单下的“Add to Project”子菜单下的“File”命令,在弹出的对话框中选择图的源代码文件: simpleengdemo.cpp。 图新建项目对话框图2-2设置必要的Include路径和LIB路径图选择源代码文件单击“OK”按钮,将源文件添加到项目工程中。在进行编译之前,执行“Project”菜单下的“Setting”命令,在弹出的项目属性对话框中,设置Link属性页中链接库文件选项,将libmx.lib和libeng.lib两个文件添加到链接选项中,如图所示。图添加必要的库文件单击“OK”按钮之后确认,这时就可以直接生成可执行应用程序了。执行“Build”菜单下的“Build simpleengdemo.exe”命令,如果应用程序没有任何错误,则Visual C+将生成相应的可执行文件,也可以在Visual C+中直接完成程序的运行第三章Visual C+调用Matlab数学库前面实现了在VC中调用MATLAB引擎。这种方式不能脱离MATLAB环境,所有操作都是基于MATLAB实现的。由于MATLAB是一个庞大的软件包,在所有运行上述程序的计算机上都安装MATLAB,从费用、维护等方便考虑是不现实的。更好的解决办法是采用MATLAB 提供的函数库来开发脱离MATLAB环境而独立运行的程序。与MATLAB引擎应用程序相比,VC 调用MATLAB数学库和图形库有几个明显的优点:执行速度快;内存需求小;可以发布给没有MATLAB 的用户使用。但它也有几个缺点:用户不能够在基于MATLAB 数学库和图形库的应用程序中使用MATLAB的函数eval()和input(); 不能调用图形句柄系统的函数;不能调用MATLAB 工具箱的函数;. MATLAB中的一些方法在C/C+中得不到支持,如“; ”,“ ”。3.1使用Matlab数学函数库的环境设置调用MATLAB C+ Math Library 中函数的Visual C+源程序, 通过Visual C+对其进行编译。在集成开发环境中正式配置编译环境之前,首先必须完成MATLAB 中动态链接库的导入工作。在MATLABexterninclude中存在libmx.def , libmatlb.def , libmmfile.def等定义文件。下面以安装在E:MATLAB的MATLAB为例,介绍集成开发环境中编译环境配置的几个步骤。其它具体情况做相应的处理。 (1)设置MATLAB中头文件(.h)及动态链接库文件(.dll)的路径,由集成开发环境中菜单Tools Options Directories。在Directories的Show directories for 栏中首先选择Include files,再在Directories栏中分别加入E:MATLABextern include和E:MATLAB externincludecpp;然后在Show directories for栏中选择Library files,再在Directories 栏中分别加入E:MATLABbin 、E:MATLAB externlib。 (2)定义预处理宏MSVC,MSWIND。由集成开发环境中菜单Project SettingsC/C+。在C/C+的Category栏中选择Preprocessor,然后在出现的Preprocessor definition 栏中加入MSVC 和MSWIND 。 (3)设置运行时动态链接库。由集成开发环境中菜单Project settings C/C+。在C/C+的Category栏中选择Code Generation,然后在出现的Use run-time library 栏中选择Multithreaded DLL 。 (4)在完成(l),(2),(3)步骤之后,就可以建立工程了。不过在源程序中必须加上#include " MATLAB . hpp " ,并在编译程序之前libmx.lib,libmatlb.lib,librnatpm . lib 和libmmnle.lib 等文件添加到工程中。方法是从VC+集成开发环境的菜单“Project” “Add to Project”“Files ”弹出的Insert Files to Project 对话框中,从目录E:MATLABexternlib 中选择上述文件后按“OK ”按钮。3.2 在Visual C+中调用MATLAB数学函数库下面我们在VC + 的集成环境下进行程序设计,MATLAB C+数学库最大的应用价值就在于脱离MATLAB 环境运行,很少有人直接将其应用于C+的计算程序开发,大部分是重用mcc 生成的代码。为了论述方便首先生成一个基于C+的简单控制台应用程序,然后在项目中将用mcc 命令生成的matsum.cpp 和matsum.hpp 包含到项目中,这是目前通用的做法。 首先讨论如何具体利用Matlab 编译器从m 文件生成C+代码,并嵌入用户代码,生成运行时不需MATLAB 支持的应用程序。设matsum.m文件的内容如下:fonction sum

    注意事项

    本文(毕业设计(论文)VC与MATLAB混合编程.doc)为本站会员(文库蛋蛋多)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开