高级搜索
使用帮助
热门搜索:2014考研 教材 励志 单片机 嵌入式 计算机 外语
图书专区:新书专区 精品图书专区 教材专区 考研考试专区
首 页网上书城服务专区下载专区试读频道增值服务关于我们贺银成2017医学类
免费注册
 
登录
 
论坛
本版图书分类
 
您的位置》首页>>网上书城
精通Matlab与C/C++混合程序设计(第3版)
定    价: ¥55.00
关 注 度: 0 库存状态: 未知 图书状态: 销售中
 
作    者: 刘维
出版时间: 2011-12      
版    次: 1 印    次: 1 字    数: 666千字
开    本: 787×1092 1/16
纸    张: 1 ISBN: 978-7-5124-0544-8
 详细信息
 作者简介
 编辑推荐
 图书简介

本书主要介绍Matlab与C/C++进行混合程序设计的方法和技巧。书中以Matlab与C/C++混合程序设计涉及的数据类型转换问题为主线,详细介绍了Matlab开发环境和程序设计基础、Matlab编译器、Matlab与C/C++语言的接口、生成可独立执行的Matlab程序、C/C++通过引擎和动态链接库调用Matlab程序、C/C++通过COM组件调用Matlab程序、C/C++调用Matlab C++数学库、C/C++调用Matcom数学库等Matlab与C/C++混合程序设计的相关内容。

本书共分9章,各章包含大量实战型的实例程序,可供寻求将Matlab程序脱离Matlab环境的程序设计人员、寻求在Matlab中调用C/C++程序的程序设计人员、寻求在C/C++中调用Matlab程序的程序设计人员学习和参考。

 图书目录

第1章Matlab开发环境和程序设计基础1

1.1本章导读1

1.2Matlab环境1

1.2.1命令行窗口2

1.2.2代码编辑器2

1.2.3工作空间窗口4

1.2.4历史命令窗口4

1.2.5利用Matlab环境的界面操作5

1.2.6 Matlab帮助8

1.2.7代码输入提示8

1.3 Matlab语言基础9

1.3.1 Matlab脚本文件9

1.3.2 Matlab运算符与表达式10

1.3.3 Matlab函数13

1.3.4 Matlab的向量运算15

1.3.5 Matlab的程序控制18

1.3.6面向对象程序设计22

1.4 Matlab常用的数据类型26

1.4.1数值阵列27

1.4.2字符阵列29

1.4.3逻辑阵列30

1.4.4元组阵列31

1.4.5结构体阵列33

1.4.6函数句柄阵列35

1.5 Matlab常用数据显示函数37

1.5.1 figure窗口37

1.5.2绘制曲线37

1.5.3显示图像数据38

1.5.4显示三维曲面数据39

第2章Matlab编译器41

2.1本章导读41

2.2 Matlab编译器工作原理41

2.3 Matlab编译器的发展历程42

2.4使用Matlab编译器的准备工作43

2.5 mcc编译器典型应用44

2.5.1独立可执行文件44

2.5.2 C动态链接库53

2.5.3 C++动态链接库55

2.5.4使用mwArray类57

2.5.5 mwArray类操作详细说明58

2.5.6 C/C++动态链接库的不同之处63

2.6 mcc命令选项、宏及捆绑命令文件64

2.6.1 mcc常用命令选项64

2.6.2 mcc宏选项65

2.6.3捆绑命令文件(bundle file)66

2.7 Matlab编译器应用中的常见问题66

2.7.1编译script文件66

2.7.2 Matlab 编译器关联分析失效的情况67

2.7.3从C/C++中调用Matlab内置函数(builtin function)69

2.7.4可变参数传递(varargin,varargout)69

2.7.5 Matlab环境下执行和MCR执行的不同之处71

2.7.6获取ctf文件的目录71

2.7.7屏幕打印和错误信息显示函数72

2.8 Matlab配置工具(Deployment Tool)76

2.9程序发布78

2.9.1 MCRInstaller.exe78

2.9.2独立可执行程序发布需要附加的文件78

2.9.3动态链接库发布需要附加的文件79

第3章Matlab与C/C++语言的接口80

3.1本章导读80

3.2 Matlab C/C++编译器的设置(MEX)80

3.3 Matlab中调用C/C++程序MEX文件81

3.3.1 MEX文件用途81

3.3.2 MEX文件与M文件的关系82

3.3.3 MEX文件实例82

3.3.4 MEX文件结构说明83

3.3.5编译MEX文件84

3.3.6采用C++创建MEX文件84

3.4 Matlab与C语言混编常用的数据类型85

3.4.1 size_t类型85

3.4.2 Matlab C语言接口数据类型86

3.5操作Matlab阵列mxArray的mx函数88

3.5.1数值阵列操作函数88

3.5.2字符串阵列操作函数91

3.5.3逻辑型阵列操作96

3.5.4稀疏矩阵操作函数97

3.5.5结构体操作函数99

3.5.6元组阵列操作函数102

3.5.7类对象阵列属性操作函数103

3.5.8内存操作函数106

3.5.9索引、维数和元素个数操作函数110

3.5.10 Is函数112

3.5.11其他操作函数114

3.6 MEX文件专用的mex函数116

3.6.1工作区变量操作116

3.6.2输出警告和错误信息122

3.6.3调用Matlab函数和执行Matlab语句123

3.6.4操作MEX文件126

3.7 Matlab阵列的操作方法与实例129

3.7.1Matlab普通数值阵列129

3.7.2稀疏数组阵列(Sparse Array)131

3.7.3 Matlab字符阵列134

3.7.4 Matlab元组135

3.7.5 Matlab结构体阵列138

3.7.6更改Matlab数值阵列的维数141

3.7.7分析并显示Matlab阵列的内容144

3.8操作Matlab MAT文件的API函数154

3.9 Matlab MAT文件操作方法161

3.9.1向MAT文件中写入mxArray变量161

3.9.2从MAT文件中读取mxArray变量164

3.9.3同时操作MAT文件与Matlab阵列167

3.10在Visual C++中调试MEX文件174

3.10.1利用VC++6.0调试MEX文件174

3.10.2利用VC++ 2010调试MEX文件178

第4章 生成可独立运行的Matlab程序181

4.1本章导读181

4.2 Matlab编译可独立执行程序181

4.2.1直接编译m文件181

4.2.2 Matlab M文件中调用C/C++函数182

4.2.3在C/C++语言调用由Matlab *.m文件生成的函数184

4.2.4利用VC++编译m文件接口函数,并去掉控制台窗口190

第5章C/C++通过引擎和动态链接库调用Matlab程序220

5.1本章导读220

5.2在VC++中调用Matlab引擎220

5.2.1 API函数介绍220

5.2.2 VC调用Matlab引擎的实例221

5.3 VC++中调用Matlab *.m函数编译后的动态链接库229

第6章C/C++通过COM组件调用Matlab程序241

6.1本章导读241

6.2 COM基础知识241

6.2.1 COM组件概述241

6.2.2 COM组件开发的基础知识242

6.3 Matlab编译COM组件基础知识247

6.3.1配置Matlab C/C++编译器247

6.3.2使用Matlab DeploymentTool248

6.3.3实现COM组件的方法249

6.3.4实现COM组件的属性249

6.3.5编译COM组件250

6.4 C/C++调用DeplomentTool生成的组件250

6.5 Matlab COM组件与C/C++之间的数据转换258

6.5.1 VARIANT数据类型258

6.5.2 COleVariant和_variant_t260

6.5.3 SAFEARRAY数据类型260

6.5.4 SAFEARRAY创建函数261

6.5.5 Matlab数据类型的VARIANT类型表示262

6.5.6 VARIANT变量和Matlab 阵列的转换规则263

6.5.7阵列格式标志(Array Formatting Flags)265

6.5.8数据转换标志(Data Conversion Flags)266

6.6 Matlab COM 工具库267

6.6.1简介267

6.6.2 MWUtil267

6.6.3 MWFlags268

6.6.4 MWStruct 类269

6.6.5 MWField类271

6.6.6 MWComplex类272

6.6.7 MWSparse类272

6.6.8 MWArg类273

6.6.9 Matlab MWComUtil的枚举类型273

6.7安装和发布Matlab COM组件275

6.8综合实例276

6.8.1实例1—数据转换及数组格式标志的使用276

6.8.2实例2—采用MWUtil处理varargin输入、varargout输出279

6.8.3实例3—MWStruct和MWField操作实例282

6.8.4实例4—MWComplex操作实例291

6.8.5实例5——MWSParse操作实例294

第7章C/C++调用Matcom数学库297

7.1本章导读297

7.2 Matcom与Matlab297

7.3安装Matcom297

7.4在Visual C++中使用Matcom C++ 矩阵库299

7.5使用Matcom Matrix C++矩阵库的矩阵类Mm304

7.5.1创建数值矩阵304

7.5.2创建字符矩阵305

7.5.3利用下标访问矩阵的元素305

7.5.4获取矩阵数据的指针306

7.5.5 Mm矩阵对象的初始化307

7.5.6 Mm矩阵类的几个常用函数307

7.5.7 Matcom C++矩阵库常量309

7.5.8调用系统函数310

7.6 Matcom矩阵库的图形和图像显示功能311

7.7 Matcom用于图形显示的常用函数313

7.8 Matcom进行图像显示的常用函数314

7.9 Matcom的应用实例314

7.9.1实例1—Matcom Mm矩阵的创建及使用314

7.9.2实例2—图形绘制的基本功能演示318

7.9.3实例3—利用Matcom绘制动态曲线323

7.9.4实例4—Matcom进行图像显示335

7.9.5实例5—Matcom二维和三维曲线绘制综合应用346

第8章C/C++调用Matlab C++数学库360

8.1本章导读360

8.2 Matlab C++ 数学库360

8.3在Visual C++工程中调用Matlab C++数学库360

8.4 Matlab C++数学库的使用362

8.4.1输入/输出矩阵362

8.4.2操作Matlab mwArray阵列367

附录 动态链接库基础知识394

A.1为什么使用动态链接库?394

A.2 C/C++语言实现动态链接库395

A.3 C/C++语言动态链接库的不同397

A.4动态链接库的调用方式398

A.4.1隐式链接398

A.4.2显式链接399

 图书前言

本书的第1版和第2版出版之后,收到了大量的读者来信。从与读者交流的情况来看,Matlab与C/C++混合程序设计已经应用到了科学研究和工程开发的各个领域,这与Matlab的广泛应用是密切相关的。据相关报道,Matlab语言已经成为2010年用户增长速度最快的计算机程序设计语言之一。作为一种以数值计算为主的脚本语言,能取得这样快速的发展实属难能可贵。

长期以来,Matlab与C/C++语言的混编架构非常不稳定,经常出现高版本不能兼容低版本的情况,这给开发者带来了很大的麻烦。值得庆幸的是,Matlab 7.0以来,这一现象已经发生了改变。从Matlab 7.0至Matlab 2010,MathWorks保持了Matlab编译器基本架构的稳定,而且混编程序的向下兼容性越来越好,这对用户来说是一个福音。但用户也应当注意到,Matlab编译器已经不再将Matlab程序全部编译为C/C++代码,而只生成Matlab程序接口文件,Matlab程序则采用MCR(Matlab Compiler Runtime)来执行。基于MCR架构的混编程序设计具有以下特点。

Matlab程序在MCR环境下与在Matlab环境下执行的效率是相同的,因此通过编译Matlab程序不会提高Matlab程序的效率。

MCR的启动时间与Matlab程序的启动时间相同,在混合程序设计中应考虑这一点。

在C/C++程序中无论采用哪种调用方式调用Matlab程序,最终结果都是由MCR来执行Matlab程序。

由于Matlab编译器只生成Matlab接口文件,而MCR接口一般会采用兼容设计,因此与Matlab 6.5及以前版本相比,用户开发C/C++程序混合程序设计的复杂度降低、可继承性提高。

由于采用MCR执行Matlab程序而不是将Matlab程序编译为C/C++程序,Matlab函数和工具箱中可编译的部分大大增加,为用户开发混编程序提供了方便。

虽然Matlab混编架构的兼容性有很大的提高,但高版本与低版本之间仍然存在一些不兼容的现象。同时,Matlab混编架构和Visual C++的开发平台均发生了较大的变化,本书第2版中的部分内容已经不能适应Matlab 2010和Visual C++2010开发环境的变化,部分实例在新的平台和开发环境中已不能正确运行。为此,在《精通Matlab与C/C++混合程序设计(第2版)》的基础上进行了相应的增删和修正,形成本书的内容。

所谓“万变不离其宗”,Matlab混编架构几经变化,但Matlab与C/C++混合程序设计的思路并没有发生本质的变化。只要掌握了这些基本思路,读者就可以根据具体的需要灵活地选择不同的混编模式。

Matlab调用C/C++程序通过将其编译为MEX文件来实现。Matlab提供了一组C语言API函数供用户调用。这组API函数是Matlab与用户C程序之间的桥梁。通过调用C/C++程序编译的MEX文件,用户可以将Matlab程序中运行效率不高的代码用C/C++来实现,从而提高计算效率。

用户在C/C++调用Matlab程序可以选择调用Matlab程序编译后的动态链接库或Matlab程序编译后的COM组件,这两种调用方法的执行效率是相同的。动态链接库方式实现起来比较简单;COM组件方式实现起来较复杂,但代码可维护性较好。除此之外,C/C++可以通过Matlab引擎直接执行Matlab程序,但这种方式不能脱离Matlab环境执行。

此外,书中还介绍了另外两种Matlab与C/C++混合程序设计的方法:Matcom C/C++数学库和Matlab C++数学库。其中,Matcom是第一个可以将Matlab *.m文件编译为C/C++代码的编译器。Matcom可以直接将m文件编译为C/C++代码,但只支持Matlab 5.3版。现在一般情况下没有必要使用Matcom编译Matlab程序,但Matcom的C++矩阵库仍然具有一定的实用价值。Matlab C++数学库是Matlab提供的一组封装好的矩阵运算数学库,其使用方法和Matlab环境中的编写方法十分类似,如果用户用Visual C++实现用户界面,而又希望寻找一组高效的矩阵运算数学库的话,那么Matlab C++数学库是一个不错的选择。

Matlab与C/C++混合程序设计方法各有千秋,具体应用还要结合开发者的具体情况进行选择。但无论使用哪种方法,Matlab的数据结构与C/C++的数据结构之间的相互访问和转换都是混合编程的关键,这也是本书重点所在,希望读者在阅读和开发过程中引起注意。

Matlab与C/C++混合程序设计的实践性和技巧性较强,因此书中提供了大量应用实例供读者学习。这些应用实例均是在考虑实际应用的基础上进行设计的,具有很强的实用价值。本书所有实例的源代码均附在随书光盘中,其中第7章的开发和编译环境为Visual C++ 6.0与Matcom 4.5.1;第8章的开发和编译环境为Visual C++ 6.0与Matlab 6.5.1;其他各章的开发和编译环境均为Visual C++ 2010与Matlab 2010。

针对本书,北京航空航天大学出版社和Matlab中文论坛(http://www.iLoveMatlab.cn/)特别提供了读者与作者在线交流的平台( http://www.ilovematlab.cn/forum2091.html ),我希望借助这个平台实现与广大读者面对面的交流,解决大家在阅读此书的过程中遇到的问题,分享彼此的学习经验,从而达到共同进步。   

在本书的编写过程中有幸得到很多同志的支持和帮助,在此表示衷心感谢。同时感谢网络上提供Matlab与C/C++混合程序设计资料的网友们,在使用Matlab与C/C++混合程序设计的过程中,这些资料使我受益匪浅。由于作者水平有限,对于书中存在的错误之处,恳请广大读者和同行批评指正。

 相关资料
 相关书评
 
版权所有 2017 北京航空航天大学出版社 备案编号:京公海网安备110108001067号
地址:北京市海淀区学院路37号工程训练中心楼5层 邮政编码:100191
联系电话:86(10)82317024 传真:86(10)82328026 电子邮箱:bhpress@263.net
 
京ICP备05030743号