精通MATLAB混合编程(txt+pdf+epub+mobi电子书下载)


发布时间:2020-08-18 08:25:52

点击下载

作者:丁毓峰

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

精通MATLAB混合编程

精通MATLAB混合编程试读:

前言

Visual C++作为Windows系统应用程序的重要开发工具,自从发布后一直得到广大程序开发人员的青睐,程序员使用该工具在Windows平台上开发了众多的应用程序。MATLAB作为一个科学计算可视化工具,经过20多年的发展,已经成为应用最广泛的科学处理工具软件包,为科学研究、工程设计等众多科学领域提供了一种全面的解决方案,代表了当今国际科学计算软件的先进水平。

MATLAB虽然在科学运算领域应用广泛,但是在图形用户界面处理方面功能不够强大,缺少独立的应用程序框架,所以开发的计算程序必须在安装MATLAB的计算机上才能够运行。而Visual C++集成环境则是以C/C++语言为编程语言,将可视化程序设计和算法融合,成为多领域程序开发利器。所以如果能够将MATLAB与Visual C++进行有效结合,将发挥Visual C++和MATLAB各自的科学优势,势必能更好地解决科学和工程领域的相关计算和可视化的相关问题。

笔者结合自己多年使用Visual C++和MATLAB混合编程进行科学研究和项目开发的经验撰写了本书。希望引领各位读者能够通过混合编程的方式解决自己的领域问题。本书结合大量不同领域的实际案例,全面、系统地介绍了Visual C++和MATLAB混合编程的基础知识,不同类型的混合编程开发方式以及在不同领域的应用,全书以大量实例贯穿于讲解过程中。学习完本书后,读者应该可以具备使用Visual C++和MATLAB通过编程实现领域问题求解的能力。

本书读者对象包括:

 Visual C++程序开发人员;

 利用MATLAB做产品开发的工程技术人员;

 MATLAB技术爱好者;

 大中专院校的工程类学生。

本书由丁毓峰编著,参加编写的还有潘迁、龚力、李建峰、李龙海、房伟、曹胜平、张云群、李伟等硕士研究生。编写过程中参考了多种同类教材、专著,在此向参考文献与资料的编、著者表示衷心感谢!由于时间仓促,作者的水平所限,本书难免有一些错误和不足之处,欢迎广大读者给予批评和指正。读者在阅读本书的过程中如遇到问题或者有相关建议,请发邮件到dyfjd@126.com,我们将及时进行反馈。编者2012年4月第1章混合编程环境的搭建

在实际程序开发中,为了提高开发效率并使开发的程序功能强大,性能优异,通常将MATLAB与C/C++进行混合编程。混合编程可以发挥它们各自的优势,更好地解决实际问题。本章将介绍MATLAB与C/C++混合编程的优缺点、MATLAB与C/C++混合编程的主要方法、Visual C++ 6.0和MATLAB的安装过程,以及安装和配置的常见问题。1.1 MATLAB与C/C++混合编程的优点

MATLAB目前已经成为科学运算领域的标准编程语言和开发工具。但是,在图形用户界面处理方面功能不够强大。而C/C++由于其适用性广、效率高,在很多领域得到了广泛应用。尤其是Visual C++集成环境将可视化程序设计和算法相融合,成为多领域程序开发利器。所以,如果能够将MATLAB与Visual C++进行有效结合,发挥各自的优势,则将达到事半功倍的效果。1.1.1 MATLAB编程的优缺点

MATLAB作为第4代计算机语言,利用其丰富的函数资源,可以使编程人员从烦琐的程序代码中解放出来,将精力集中在领域问题上而不是编程上。MATLAB语言相对于传统的编程语言有很多优点,主要包括以下几点。

易用性:MATLAB提供的集成环境、工作台和扩展范例等编程工具便于用户快速入门。

可移植性:MATLAB可以在Windows和众多版本的UNIX系统上安装运行。

用户图形界面向导:利用MATLAB提供的用户图形界面向导,可以轻松地建立一个交互式的用户图形界面,MATLAB还具有较强的编辑图形界面的能力。

专业领域工具箱:MATLAB中提供了多种专业工具箱,可以帮助用户解决领域内复杂的问题。

MATLAB虽然有很多优点,但是也存在一些缺点,主要包括以下几点。

由于MATLAB是解释型语言,而不是编译型语言,产生的程序执行速度慢。

若将其可执行文件编译后,则需要附带一个库函数包,编译独立运行的程序比较麻烦,而且要做较多的配置。1.1.2 C/C++编程的优缺点

C语言作为一种简单、高效的编程语言,易于编写简单的程序。C语言使用面向过程的编程模式,从而减少对计算机的依赖。作为一种面向过程的编程语言,由于其十分接近汇编语言。所以,可以说C语言既是高级语言也是低级语言。

C语言的优点包括以下几点。

面向机器,让用户可以完全地操纵计算机,效率较高。

面向过程开发,以函数为中心。通过函数的参数传递实现了接口连接。

运行效率高,可以广泛应用于各种科学和工程计算领域。

C语言也存在一些缺点,主要包括以下几点。

由于过多地强调效率,使用C语言编程时,更多地需要考虑计算机的处理能力。所以抽象能力不足,容易出现小错误。对于编写大型的程序时调试比较麻烦。

函数无法有效控制相关数据,不能保证外部状态不变,容易出现程序错误。

数据常常作为全局的变量保存起来。所以,很难保证其他代码不破坏函数依赖的数据状态。

C++语言是作为C语言的扩展语言出现的,开始叫做“带类的C”。后来,C++逐渐演化成一门独立的语言。但还是和C语言兼容,并且可以组织在一起解决问题。C++语言虽然以支持面向对象的开发而闻名,但是C++支持多范型的开发方式,包括面向过程、基于对象、面向对象、模版等,并且C++和C语言是完全兼容的。因此,可以使用C++编译系统编写C语言的程序。

C++语言的主要优点包括以下几点。

同时支持面向对象程序设计和面向过程设计。

通过继承、重载和多态性等特征实现了软件重用和自动生成程序,提高了编程效率,完全兼容C语言,多数C语言编写的库函数和应用程序都可为C++所用。

在继承了C语言优点的基础上,扩充了新的数据类型,使C++的编译系统可检查出更多类型错误;加强了一致性(Consistency)检查机制,提高了软件开发的效率和质量。

C++语言虽然具有较多优点,但是也存在一些缺点,主要包括以下几点。

编写的程序比C语言的程序占用更多的内存。

编写的程序可移植性不强。

编程过程中使用的动态对象必须及时销毁,否则会造成内存泄漏,可能会导致程序崩溃。1.1.3 混合编程的优缺点

MATLAB是当今应用最为广泛的数学软件,它具有相当强大的数值计算、数据处理、系统分析、图形显示以及符号运算、各专业领域工具箱等功能。在这个平台上,简单地编程就可以完成十分复杂的功能,大大提高了工程分析计算的效率。

在科学计算和仿真方面,虽然MATLAB具有强大的功能,但是如果只是使用MATLAB进行问题求解,那么编写的程序只在该平台上才能使用。也就是说,必须在安装了MATLAB系统的计算机上才能编译和运行.m文件,这样就给用户进行科学和工程计算带来了很大的不便。另外,由于MATLAB使用解释方式执行代码,导致代码的执行速度很慢。

和MATLAB的编程语言相比,C/C++语言和相关开发工具如Visual C++、C++Builder等,在图形界面开发、进程控制、程序打包分发、执行速度等方面具有明显优势。

由此,开发者萌生了混合编程的思想。采用混合编程的方式,可以集成两者的优点进行程序开发。使用混合编程的方法,可以充分发挥MATLAB在矩阵(数组)上的强大运算能力,同时可以利用涵盖了各个领域的功能强大的算法函数库,不再需要浪费时间,使用C++单独开发相关算法函数。通过开发MATLAB与C/C++的接口,可以把MATLAB的强大功能融入使用C/C++/Visual C++开发的应用程序中,并且通过Visual C++的高级语言编译器将代码编译为二进制代码,从而可以提高执行速度。

使用MATLAB和C/C++语言进行混合编程,可以集成它们各自的优点进行程序开发。但是,同时也为程序开发人员混合提出了更多要求,带来了新的挑战。程序开发人员必须同时熟练掌握MATLAB和C/C++语言的特点、编程方法和开发环境,这样才能够在短时间内开发出高效率的程序。1.2 混合编程主要方法概述

MATLAB和Visual C++混合编程有很多种。目前常用的几种方法包括Visual C++调用MATLAB引擎、基于数据文件交换的方法、基于COM技术的方法、使用MATCOM方法、基于ActiveX控件的方法和使用MATLAB Add-in方法等混合编程方法。1.2.1 Visual C++调用MATLAB引擎

MATLAB Engine(引擎)是指一组由MATLAB软件提供的接口函数。它支持C/C++、Fortran等编程语言。通过调用这些接口函数,用户可以在其他编程环境中实现对MATLAB的控制。

Visual C++调用MATLAB引擎,就是使用Visual C++在应用程序中对MATLAB进行调用,将MATLAB作为一个操作引擎使用,使其在后台运行。MATLAB引擎采用客户端/服务器(Client/Sever)的方式,是指把应用处理程序负载分布到客户机和服务器上的模式。

在这种模式下,MATLAB作为后台服务器,而Visual C++程序作为前台客户端。通过Windows的动态控件与服务器通信,向MATLAB引擎传递命令和数据信息,从MATLAB引擎接受数据信息。用户可以在Visual C++应用程序中调用这些接口函数,实现对MATLAB引擎的控制。采用该方法几乎能利用MATLAB提供的全部功能,但是前提条件是必须在计算机上安装了MATLAB软件,而且执行效率低,主要用于个人使用或做演示,在实际大型应用程序开发中使用得不多。1.2.2 基于数据文件交换的方法

MATLAB中的数据文件MAT是一种数据文件,用来保存MATLAB工作空间中的变量。使用它可以解决不同编程语言之间传递数据的问题,这也是混合编程的主要方法之一。MAT文件是MATLAB软件使用的一种特殊文件格式的数据文件,该数据文件采用二进制格式进行描述。开发人员可以将一个或者多个特定的MATLAB变量定义并保存在MAT文件中,供需要时候使用。MATLAB通常采用MAT文件把工作空间的变量存储在磁盘里。

当需要重新载入先前保存的变量到工作空间时,只需要重新将对应的MAT加载即可。在MATLAB中载入对应的MAT文件后,在当前MATLAB工作空间,可以完全再现当初保存该MAT文件时的那些变量,这是其他文件格式无法做到的,体现了MAT文件的优势。1.2.3 基于COM技术的方法

基于COM技术的混合编程方法是MathWorks公司推荐的使用方法,该方法主要通过使用MATLAB提供的Combuilder工具实现。COM(Component Object Module)是一种通用的对象接口,编程语言只要按照接口标准实现功能,就可以使用其他开发语言调用它。MATLAB推出的Combuilder可以将MATLAB编写的程序制作成COM组件,供其他编程语言调用。该方法实现简单,通用性强,而且几乎可以使用MATLAB的任何函数,但是不支持脚本文件。因此,在应用程序规模较大、调用工具箱函数或调用函数较多时使用。1.2.4 使用MATCOM方法

MATCOM是第三方控件,原本属于MathTool公司,后来由MathWorks公司收购。使用该工具可以将MATLAB的m脚本文件和m函数转化成为功能相同的C/C++文件。通常在m文件不大或者不需要进行三维绘图的情况下使用。相比使用其他混合编程方法具有以下优点。

转换过程简单(由MATCOM工具自动实现),容易实现。

可以转换独立的脚本文件,也可以转换嵌套脚本文件。

可以方便地生成动态链接库文件和可执行文件。

设置环境后,可以使用MATLAB的工具箱函数。

同时,使用MATCOM进行混合编程也存在以下一些缺点。

对C/C++语言中的struct等类的支持有缺陷。

程序中涉及的复杂函数调用时嵌套的文件数量会较多。

部分绘图语句无法实现或得不到准确图形图像,尤其是对于三维图像。1.2.5 基于ActiveX控件的方法

ActiveX组件是指符合特定规范的一些可执行的代码或一个程序。例如,可执行文件(.EXE)、动态链接库文件(.DLL)或OCX控件(.OCX)等都可以作为ActiveX组件存在。其最大的优势就是可重用性好。通过使用ActiveX技术,开发人员就能够将可复用的软件组装到应用程序或者服务程序中,然后嵌入到程序或者网页中,随网页传送到客户的浏览器上,并在客户端执行。利用MATLAB软件提供的ActiveX技术,可以在Visual C++开发的应用程序中完全控制MATLAB。该方案利用一个专门的类对ActiveX的接口代码进行封装,使用户可以专注于MATLAB的功能应用。

通过ActiveX组件,Visual C++可以与MATLAB实现无缝集成,用户可以轻松地开发出高效、功能强大的应用程序。1.2.6 使用MATLAB Add-in方法

对于C/C++和MATLAB混合编程而言,该方法是最方便的方法之一。MATLAB 6.0以后的版本对其编译器(Compiler)做了较大的改进,可以支持更多的数据类型,提供更强的优化功能,更重要的是提供了一个MATLAB Add-in,可以用它实现一个MATLAB和Visual C++直接集成的途径。

该方法具有如下特征:快速集成M文件到C++工程中,创建独立的C/C++应用程序或C MEX DLL。通过M文件创建共享库或MEX文件;直接修改M源文件而不是修改生成的C/C++文件;内含Visual Matrix Viewer,调试过程中可以查看矩阵变量的值;可以方便、快捷地打包应用程序等。

不过,需要注意的是,MATLAB 7.0之后就不再支持这种方法了,如果使用该方法,可以考虑使用MATLAB 6.5结合Visual C++进行开发。1.3 Visual C++和MATLAB混合编程环境要求

由于目前MATLAB应用广泛的版本是运行在Windows系统平台上。Visual C++也是Windows操作系统上的主要开发工具之一,所以本书讨论的Visual C++和MATLAB混合编程是指在Windows操作系统上的混合编程。

另外,由于Windows操作系统由多个版本,包括Windows NT、Windows 2000、Windows 2003、Windows XP、Windows 7和Windows Vista等。在某个操作系统下开发的应用程序有可能不能在其他操作系统上运行。为了能够正常运行,需要在新的操作系统上进行调试,调试通过才能保证程序的正常稳定运行。考虑到Windows XP是目前使用最为广泛的操作系统,所以使用Windows XP操作系统作为系统平台。另外,使用Visual C++和MATLAB 2009/2010版本作为开发工具。1.4 Visual C++的安装和配置

为了使用Visual C++进行程序开发,首先必须正确安装Visual C++,并进行正确的配置。本节主要介绍Visual C++的安装过程和需要正确配置的问题。1.4.1 Visual C++ 6.0的安装

Visual C++ 6.0是Visual C++开发工具中最经典的版本。目前,很多涉及Visual C++开发的教程使用该版本。从Visual C++ 6.0以后,微软没有再出单独版本的Visual C++版本,而是直接集成在Visual Studio中,主要版本包括Visual C++ 2005、Visual C++ 2008和Visual C++ 2010等。

随着版本的不断升级,标准也有适当的修改,功能越来越强大。但是,对计算机的内存和硬盘要求很高。例如,Visual Studio 2008安装后需要4GB以上的空间,内存2GB以上,并且运行速度很慢,其中安装包中的很多功能开发人员几乎没有机会用到。为了使读者更方便进行安装、调试、学习,本书使用Visual C++ 6.0作为开发环境。

运行Visual Studio 6.0软件中的setup.exe程序,选择安装Visual C++ 6.0,然后按照安装程序的指导一步一步完成安装过程。(1)使用鼠标双击SETUP安装文件,启动安装程序,会出现如图1.1所示的对话框,单击“下一步(N)”按钮,弹出“最终用户许可协议”界面,如图1.2所示。图1.1 安装向导图1.2 “最终用户许可协议”界面(2)选择“接受协议”单选项,单击“下一步(N)”按钮,进入“产品号和用户ID”界面,如图1.3所示。图1.3 “产品号和用户ID”界面(3)输入产品的ID号、姓名和公司名称等信息,单击“下一步(N)”按钮,选择服务器安装程序选项,如图1.4所示。图1.4 选择安装程序选项(4)选择“安装Visual C++ 6.0中文企业版”单选项,单击“下一步(N)”按钮,进入“选择公用安装文件夹”界面,如图1.5所示。图1.5 “选择公用安装文件夹”界面(5)可以通过单击“浏览(R)”按钮选择新的公用文件夹的安装位置,也可以不修改,采用系统给出的默认路径。单击“下一步(N)”按钮,进入安装提示信息对话框。单击“继续”按钮,进入安装产品序列号提示信息对话框,如图1.6所示。图1.6 产品序列号提示信息对话框(7)单击“确定”按钮,弹出“安装程序正在搜索已安装的组件”信息提示对话框,如图1.7所示。图1.7 信息提示对话框(8)提示信息结束后会弹出选择安装类型的对话框,如图1.8所示。图1.8 选择安装类型对话框(9)选择“Typical”模式,然后在弹出的对话框中单击“继续”按钮,开始安装Visual C++,如果不想选择典型安装,可以选择“Custom”模式,用户可以自己定制安装。安装开始后会出现安装进程提示对话框,如图1.9所示。图1.9 安装进程对话框(10)安装结束后,会首先出现Debug信息对话框,如图1.10所示。单击“确定”按钮,出现安装成功信息对话框,如图1.11所示。图1.10 Debug信息对话框图1.11 安装成功信息对话框

后面如果还需要安装MSDN帮助工具包,可以继续安装过程。否则,根据界面提示信息退出就可以了。

程序安装完毕,单击“开始”→“所有程序”→“Microsoft Visual C++ 6.0”命令,就可以运行Visual C++ 6.0程序了。用户也可以通过创建桌面快捷方式,直接在桌面上运行程序。1.4.2 Visual C++的配置

Visual C++的工程设置是应用程序调试的基础。只有设置正确的配置,创建的应用程序才能正常运行,输出正确的结果。具体的配置包括:预处理宏、工作目录和控制台程序运行参数、添加链接库文件、添加附加头文件、附加DLL调试等项目。1.预处理宏

C和C++等编程语言,提供定义和调用预处理宏这样一种方式。预处理宏包括通用宏和针对不同项目的特定宏。(1)通用宏。

选择“Project”→“Settings”→“C/C++”选项,在“Category”下拉列表中选择“General”选项,则在“Preprocessor definitions”信息上包含WIN32、_MBCS、_WINDOWS、_AFXDLL和_DEBUG等宏名称,如图1.12所示。它们的含义分别如表1.1所示。图1.12 通用宏设置对话框表1.1 通用宏名称和含义

此外,针对Visual C++不同的项目类型,有一些特定的宏,在编译器中区分项目类型。(2)针对不同项目的特定宏。

Win32 Static Library项目:选择“Project”→“Settings”→“C/C++”选项,在“Category”下拉列表中选择“General”选项,然后设置“Preprocessor definitions”选项包含_LIB的宏定义。

Win32 Dynamic-Link Library项目:选择“Project”→“Settings”→“C/C++”选项,在“Category”下拉列表中选择“General”选项,然后设置“Preprocessor definitions”选项包含_WINDOWS、_USRDLL、DLL_EXPORTS的宏定义。2.工作目录和控制台程序运行参数

选择“Project”→“Settings”→“Debug”→“Working directory”选项,在此处设置exe程序的工作目录。

选择“Project”→“Settings”→“Debug”→“Program argument”选项,在此处填写main运行参数。

默认的工作目录为项目目录(ProjectDirectory),即Visual C++工程文件(扩展名为dsw)所在目录。通过编译器启动应用程序时,可以将所依赖的lib和dll库文件所在目录设为工作目录。应用程序执行期间,在工作目录中创建、保存文件。工作目录是指当前目录,运行目录是指exe所在路径。3.添加附加头文件

选择“Tools”→“Options”→“Directories”→“Include files”选项,可以设定默认include包含路径,如图1.13所示。对于特定项目的头文件包含,在“Project”→“Settings”→“C/C++”→“Category”选项中选择“Preprocessor”选项,在“Additional include directories”编辑框中添加附加头文件目录。图1.13 添加附加头文件对话框

在编写程序时,通常使用尖括号包含标准库函数头文件,使用双引号包含用户自定义头文件。通常除标准软件开发包SDK(Software Development Kit),如DirectX等,一般针对具体工程使用附加头文件包含即可,尽量不要去动编译器的“Tools”→“Options”→“Directories”→“Include files”选项做编译器级全局配置。4.添加链接库文件

选择“Tools”→“Options”→“Directories”→“Library files”选项,可以设定附加链接库包含路径。对于特定项目的头文件包含,可以通过以下两步添加附加链接库。(1)选择“Project”→“Settings”→“Link”选项,在“Category:Input”的“Additional library path”位置添加附加库目录。多个路径之间以逗号分隔。(2)选择“Project”→“Settings”→“Link”选项,在“Category:General”的“Object/Library Modules”位置添加库文件名*.lib,多个库之间以空格分隔。5.设置生成文件目录

选择“Project”→“Settings”→“General”选项,在“Output directories”组中的“Output files”位置填写*.exe或*.lib/*.dll的生成目录,如图1.14所示。相应在“Project”→“Settings”→“Link”的“Output file name”位置将会同步文件输出路径。选择“Project”→“Settings”→“General”选项,在“Output directories”组的“Intermediate files”位置填写中间文件生成目录。图1.14 设置生成文件目录对话框6.附加DLL调试

若需要调试的DLL是动态装入(LoadLibrary)的,则需要选择“Project”→“Settings”→“Debug”选项,在“Category:Additional DLLs”位置添加该DLL文件。7.导出makefile

在Visual C++中,选择“Project”→“Export Makefile”选项,如图1.15所示,使用该工具就可以导出makefile文件(*.mak)。但是需要注意的是Visual C++以后的版本不再支持makefile输出了。图1.15 导出makefile文件对话框1.5 MATLAB的安装和配置

本节主要介绍MATLAB的安装过程和进行混合编程需要进行的配置工作。配置工作包括编译器的确定、编译环境的配置和安装MATLAB Component Runtime环境等问题。1.5.1 MATLAB的安装

MATLAB可以在各种Windows系统上运行。MATLAB最新版本通常兼容了早期版本功能。所以,一般在计算机性能允许的前提下,通常选择安装最新的MATLAB版本。本节以MATLAB的最新版本MATLAB 7.10为例,讲解MATLAB在Windows XP操作系统中的安装过程。需要注意的是,为了保证正常安装,MATLAB的安装目录必须是英文的。(1)使用鼠标双击打开安装软件包,单击运行setup.exe文件,系统自动将安装文件复制到内存,准备进行安装。复制完成后系统自动进入安装对话框,如图1.16所示。MATLAB 7.10的安装提供了两种安装方式,即网络安装和手动控制安装。下面介绍手动安装过程。图1.16 选择安装方式对话框(2)选择“Install without using the Internet”选项。单击“Next”按钮,系统进入阅读软件协议界面,如图1.17所示。选择“Yes”单选按钮,表示接受协议。单击“Next”按钮,进入下一个界面,输入安装序列号,如图1.18所示。图1.17 阅读软件协议对话框图1.18 输入安装序列号对话框(3)输入序列号之后,单击“Next”按钮,系统会进入安装类型选择对话框,如图1.19所示。此时用户需要选择“Typical”安装方式,或者“Custom”安装方式。如果选择“Typical”安装方式,系统程序将按照典型的安装设置进行安装;如果选择“Custom”安装方式,那么,用户需要根据自己的要求和任务自己组建安装控件。这里选择的是“Typical”安装方式,单击“Next”按钮,进入下一个界面,指定安装路径,如图1.20所示。图1.19 选择安装方式图1.20 指定安装路径(4)这里选择默认路径,当然用户可以自己修改安装路径。单击“Next”按钮,进入MATLAB确认安装界面,如图1.21所示。单击“Install”按钮,进入MATLAB安装过程显示对话框,如图1.22所示。图1.21 确认安装对话框图1.22 安装过程显示对话框(5)由于MATLAB的组件和工具箱非常多,所以安装时间会比较长,期间用户可能需要等待一段时间,安装好后,单击“Finish”按钮,安装完成。1.5.2 MATLAB的配置

为了能够使用MATLAB和Visual C++进行混合编程,需要使用MATLAB的Complier将*.m函数文件编译为动态链接库DLL,必须对MATLAB的环境做出相应的设置。具体做法如下。1.编译器的确定

在MATLAB的Command Window下输入命令mbuild –setup,并根据MATLAB的提示选择合适的编译器,使用Visual C++对C++连接环境的设置过程如下。 >> mbuild -setup Please choose your compiler for building standalone MATLAB applications: Would you like mbuild to locate installed compilers [y]/n? y Select a compiler: [1] Lcc-win32 C 2.4.1 in D:\PROGRA~1\MATLAB\R2008a\sys\lcc [2] Microsoft Visual C++ 2005 in d:\Program Files\Microsoft Visual Studio 8 [3] Microsoft Visual C++ 6.0 in D:\Program Files\Microsoft Visual Studio [0] None Compiler: 3 Please verify your choices: Compiler: Microsoft Visual C++ 6.0 Location: D:\Program Files\Microsoft Visual Studio Are these correct [y]/n? y Trying to update options file: C:\Documents and Settings\hk\Application Data\MathWorks\MATLAB\R2008a\ compopts.bat From template: D:\PROGRA~1\MATLAB\R2008a\bin\win32\mbuildopts\ msvc60compp.bat Done …

从上面的设置过程可以看到在执行mbuild –setup命令后,将给出提示信息提示是否要使用mbuild安装一个程序编译器(Would you like mbuild to locate installed compilers?),如果回答n,则退出连接编译器的设置过程。如果回答y,则给出了具有4个选项的编译器选择列表,每个选项都包括编译器名称和位置。根据需要进行选择,这里我们选择Visual C++ 6.0,即在编译器(Compiler)的冒号后面输入3,表示选择第3个选项的编译器,按“Enter”键后程序给出询问是否正确的提示信息(Are these correct?),输入y,按“Enter”键,开始安装和配置过程。2.编译环境的配置

在MATLAB的Command Window下输入命令mex –setup,进行对编译环境的设置。过程如下: >> mex -setup Please choose your compiler for building external interface (MEX) files: Would you like mex to locate installed compilers [y]/n? y Select a compiler: [1] Lcc-win32 C 2.4.1 in D:\PROGRA~1\MATLAB\R2008a\sys\lcc\bin [2] Microsoft Visual C++ 2005 in d:\Program Files\Microsoft Visual Studio 8 [3] Microsoft Visual C++ 6.0 in D:\Program Files\Microsoft Visual Studio [0] None Compiler: 3 Please verify your choices: Compiler: Microsoft Visual C++ 6.0 Location: D:\Program Files\Microsoft Visual Studio Are these correct [y]/n? y Trying to update options file: C:\Documents and Settings\hk\Application Data\MathWorks\MATLAB\R2008a\mexopts.bat From template: D:\PROGRA~1\MATLAB\R2008a\bin\win32\mexopts\ msvc60opts.bat Done … ********************************************************************* Warning: The MATLAB C and Fortran API has changed to support MATLAB variables with more than 2^32-1 elements. In the near future you will be required to update your code to utilize the new API. You can find more information about this at: http://www.mathworks.com/support/solutions/data/1-5C27B9.html? solution=1-5C27B9 Building with the -largeArrayDims option enables the new API. ******************************************************************

执行mex –setup和执行mbuild –setup命令过程相似,也是首先给出提示信息提示是否要使用mex安装一个程序编译器(Would you like mbuild to locate installed compilers?)。如果回答n,则退出连接编译器的设置过程。如果回答y,则给出了具有4个选项的编译器选择列表,每一个选项都包括编译器名称和位置。根据需要进行选择,选择Visual C++ 6.0,即在编译器(Compiler)的冒号后面输入3,表明选择第3个选项的编译器,按“Enter”键后程序给出询问是否正确的提示信息(Are these correct?),输入y,按“Enter”键,开始安装和配置过程。3.安装MATLAB Component Runtime环境

运行MATLAB安装目录下的…\toolbox\compiler\deploy\win32\MCRInstaller.exe,开始自动安装组件运行环境。1.6 安装和配置的常见问题

在安装Visual C++和MATLAB的过程中,由于版本和系统的原因,可能会出现无法安装,安装后无法对程序进行正常编译和运行的问题,尤其对于新手,问题尤为突出。本节将给出Visual C++的安装和配置问题,MATLAB的安装和配置问题,力图帮助读者解决安装和配置中出现的问题。1.6.1 Visual C++的安装和配置问题

Visual C++的安装问题大都出现在企业版,初次安装Visual C++时,最好安装个人版。另外,由于还有英文版和中文版,建议安装英文版的Visual C++,因为汉化的中文版本Visual C++,通常会有些问题,最好安装在C盘的默认目录下。通常容易出现的问题有如下几个。1.安装Visual C++时提示有版本冲突

版本冲突问题主要发生在Windows 2000系统上,如果Windows 2000系统上有Visual Basic 6.0(sp5),在安装Visual C++时会提示有版本安装冲突问题,可能会导致Visual Basic 6.0或Visual C++都不能使用。解决办法是删除Visual Basic 6.0,如果需要在自己的计算机上同时使用Visual Basic和Visual C++,可以在安装Visual Studio 6.0的时候把Visual Basic和Visual C++都安装上。2.提示Visual C++安装失败

Visual C++英文版安装到最后会出现提示信息为:“msdasql.dll was unable to register itself in the system registry”,安装程序会提示Visual C++安装失败,Visual C++不能使用。这个错误的原因是Visual C++和Microsoft Office的动态链接库文件出现了冲突。解决方法为,先把Office卸载,装到C盘,将环境变量里的用户变量(原来是默认在D盘的)删除,继续安装,程序提示缺少msdatl3.dll文件,在安装系统的硬盘上搜索,找到后将其复制到system 32下,重新安装完成后,就可以正常使用Visual C++了。3.在Windows 7下安装Visual C++

在安装或者使用Visual C++时,凡是出现兼容性问题提示对话框,可以按以下方式处理,勾选“不再显示此消息”复选框,然后选择“运行程序”。在安装Visual C++的时候,不能采用系统默认的“Typical”(典型安装)的方式进行安装,必须修改为选择“Custom”(自定义安装),不要选择TOOLS里面的OLE/COM OBJECT VIEWER工具,就可以顺利安装,因为该工具只是个查看工具,不会影响Visual C++的编译,不需要再担心兼容性的问题。4.无法找到mspdb60.dll文件

在安装Visual C++时候,有时候会出现没有找到mspdb60.dll文件,假设Visual C++安装在C盘上,解决方法是将C:\Program Files\Microsoft Visual Studio 6\Common\ MSDev98\Bin下的mspdb60.dll文件复制到C:\Program Files\Microsoft Visual Studio 6\VC98\Bin目录下。1.6.2 MATLAB的安装和配置问题

MATLAB的安装和配置问题包括输入注册码后无法继续安装,安装过程中出现红色叉号无法继续安装,提示exception calling main错误,信息处理器为AMD的机器安装后无法正常使用,缺少.NET Framework 3.5支持错误等问题。1.输入注册码后无法继续安装

在安装过程中,输入注册码后按“Enter”键,系统给出提示信息为“There are no products to install, check that the product.zip files are in either the root folder or the ‘archives’ folder.”。该问题主要是临时目录的问题,解决方法为,选择“我的电脑”右键菜单中的“属性”命令,在弹出的系统属性对话框中选择“高级”→“环境变量”选项,将TMP的变量值设置为C:\Temp,同时在C盘根目录下建立Temp文件夹,则问题可以解决。2.安装时出现红色叉号无法继续安装

在安装过程中,出现红色叉号并给出信息提示为:“The installer cannot read the mwinstall.dll file, This is probably due to a CD reader which can only read files with an eight. three naming convention. Please see the technical support page at www.mathworks.com”,该问题主要是安装文件包的解压方式不正确引起的。解决方法为,不使用WinRar类型的解压软件解压MATLAB.iso文件,使用Daemon Tools等虚拟光驱软件打开,就可以正常安装了。3.提示exception calling main错误信息

系统在安装完Windows补丁后,有时候会出现MATLAB无法正常运行的问题,启动后总是启动画面闪一下,然后就没反应了,或者有时候弹出exception calling main的系统错误提示。该问题主要是由于系统不兼容造成的。解决此问题的办法为,用鼠标右键单击MATLAB程序图标,选择“属性”命令,在兼容性选项卡中勾选“用兼容性运行此程序”复选框,确定后即可正常使用。4.信息处理器为AMD的计算机安装后无法正常使用

由于MATLAB要用到CPU的数学计算模块,而MATLAB默认的是INTEL的CPU,所以对于配置为AMD的CPU的计算机,在安装MATLAB时经常会遇到安装好后打开MATLAB自动关闭的问题。

解决办法是,先确认安装好后(例如,安装在D盘),查找在安装路径下D:\MATLAB7\bin\win32有一个文件名为atlas_Athlon.dll的文件。然后用鼠标右键单击“我的电脑”图标,在弹出菜单中单击“属性”命令,依次单击“高级”→“环境变量”选项,在“系统变量”选项框中单击“新建”按钮,输入变量名“BLAS_VERSION”,变量值为“\MATLAB7\bin\win32\atlas_Athlon.dll”,单击“确定”按钮,如图1.23所示。图1.23 环境变量设置5.缺少.NET Framework 3.5支持错误

由于MATLAB是在Windows平台上使用C/C++语言开发的,所以需要.NET Framework 3.5支持,如果没有,系统会给出提示信息“You must have a supported version of the.NET Framework installed before you can install MATLAB Builder NE. Install the .NET Framework and then re-install MATLAB Builder NE.”。解决方法为获得Microsoft .NET Framework 3.5(x86)安装,然后重新安装MATLAB软件。6.设置MATLAB的正确工作路径

在MATLAB的M文件编辑窗口编辑完程序后,选择“Debug”→“run”运行程序,会提示“所写文件is not found in the current directory or on the MATLAB path”,该问题是由于所编写的文件没有在MATLAB搜索路径中。解决方法为,MATALB界面最上面有current Directory,单击右边的按钮,选择添加路径,加入MATLAB搜索路径就可以了。1.7 小结

本章主要介绍了MATLAB、C/C++语言、MATLAB与C/C++混合编程的优缺点等知识,同时也对MATLAB与C/C++混合编程的几种常用方法进行了简单介绍,详细介绍了Visual C++和MATLAB的安装和配置过程,安装和配置的常见问题及解决方法。本章重点是MATLAB与C/C++混合编程的优缺点,Visual C++和MATLAB的安装和配置,难点是Visual C++和MATLAB的安装和配置问题的解决,第2章将介绍Visual C++开发基础。第2章Visual C++开发基础

使用Visual C++和MATLAB进行混合编程时,涉及Visual C++编程方面的知识较多,包括C++面向对象程序设计、C++异常处理机制等C++编程基础知识;Windows程序内部运行机制、动态链接库等Windows编程基础知识;MFC框架程序、ActiveX控件等开发知识,另外也需要掌握Visual C++程序的调试和优化方面的知识。只有掌握了这些知识,才能在混合编程中更好地发挥出Visual C++的技术优势。2.1 C++面向对象程序设计

C++是一种面向对象程序设计语言,目前在工程中得到了广泛应用。本节主要介绍面向对象的语言和方法、类,对象和消息等基本概念,C++面向对象程序设计特点以及实现方式等内容。2.1.1 面向对象语言和方法

面向对象语言(Object-Oriented Language,OOL)是以对象作为核心的程序设计语言,通过对象的描述和实现来实现程序,其核心思想包括类、对象、继承等概念的定义和描述。OOL与面向过程的编程语言的重要区别在于,能够直接地描述客观世界中的对象以及对象之间的关系。

SIMULA67是具有面向对象语言思想的最早的编程语言,它是一种离散事件模拟语言,引入了类和继承的概念。1980年出现的Smalltalk-80是第一个真正的面向对象的语言。

1985年AT&T公司贝尔实验室开发了C++开发语言。C++在C语言的基础上扩充了对面向对象的支持,既支持面向过程的设计方法,又支持面向对象的设计方法,还有丰富的开发环境,因而得到了广泛的应用。

1995年Sun公司开发了面向对象的Java语言,该语言适用于分布网络环境,它采用了与C++语法基本一致的形式,该语言具有能编译或解释执行、连接简单、支持多线程和支持跨异构平台等特点,也是一种广泛使用的面向对象的语言。典型的面向对象编程语言的基本特性如表2.1所示。表2.1 典型面向对象语言

OOL将客观事物描述成具有属性和行为的对象,对象通过类来描述,通过抽象的方法来确定类对象的静态属性和动态行为。通过设计并定义类的接口使其可以与外界发生联系。对象与对象之间通过发送和接收消息进行通信。这种机制使得程序的各个模块之间的关系更为简单,另外类的继承与多态性等特性更有助于实现代码重用,从而提高软件开发效率。2.1.2 类、对象和消息

本节将介绍OOL的几个重要概念,包括对象、类、封装、继承、消息等,不同类型的OOL都会涉及这些概念的全部或者部分。1.对象(Object)

对象是指客观世界中实际存在的事物,包括有形对象和无形对象。有形对象是指物理上存在的实体,例如,企业的生产车间、机床、刀具、计算机、设计手册等;无形对象是指物理上不存在的对象,如计算机中的一个项目计划、一个机床的总装配图纸等。通常使用静态特征和动态特征来描述对象。

静态特征是使用数据对对象的特征进行描述,如汽车的颜色、重量、车身的材料等;动态特征是体现对象的行为或具有的功能,如汽车的刹车、自动导航的功能等。在实际编程语言的实现中,对象由类进行定义,类由一批属性和对这批属性进行操作的服务实现。2.类(Class)

类是指具有相同属性和服务的一组对象的集合。类为隶属于该类的全部对象提供了抽象的描述,包括属性和操作服务。也就是说,类是对象的抽象,而对象是类的具体实例。在编程语言中,对象是具体的,占用存储空间,而类是抽象的,不占用内存。例如,如果将机床定义为一个基础类,那么属于该类的CA6140车床就是一个具体的机床对象。3.继承性(Inheritance)

对象的核心包括继承性(Inheritance)、封装性(Encapsulation)和多态性(Polymorphism)等重要特性。继承性用于基础类和特殊类之间的关系描述。定义基础类时,需要在基础类中包括基本属性和操作服务,特殊类的对象可以从基础类获取其全部基本属性与操作服务。获取的方式就是通过继承实现。例如,若将机床定义为一个基础类,那么车床就可以定义为一个特殊类,即车床的很多基本属性(颜色、重量、材料等)和操作服务(切削、换刀等)都可以从基础类——机床通过继承的方式获得。继承性便于软件复用,可以有效地提高软件开发效率。4.封装性(Encapsulation)

封装性是指将对象的属性和操作服务结合成一个独立的对象特性。通过封装性实现信息隐蔽,即尽可能隐蔽对象的内部细节,只提供有限的接口,其他对象如果想访问该对象,只需要通过相应接口调用其属性和操作函数,而不需要了解其内部结构。例如,SolidWorks、Pro-E等三维软件都提供了经过封装的图形操作类,用户若想在SolidWorks、Pro-E等CAD(Computer Aided Design)系统上构建自己的绘图系统,只需要调用相应类的属性和API函数,就可以实现相应的功能,不需要具体了解类内部的函数是如何绘图的细节。5.多态性(Polymorphism)

多态性是指在基础类中定义属性或操作,特殊类继承基础类的属性或操作后,可以存在不同的数据类型或表现出不同的操作结果。即同一属性或操作结果在基础类及其多个特殊类中具有不同的功能实现形式。例如,三维CAD系统中基础类“三维几何实体”中定义了一个操作函数“三维实体建模”,但并不确定构建一个什么样的三维实体。可以在“三维几何实体”基础类上定义多个特殊的类,如“圆柱体”、“正方体”、“圆锥体”等,它们继承基础类的所有属性和操作函数,但其定义的功能算法不同。当特殊类对象接到“建模”命令信息时,不同对象执行不同的算法,将构建不同的三维实体。6.消息(Message)

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载