学 士 学 位 论 文
BACHELOR ’S THESIS 引言
MATLAB语言具有功能强大、开发效率高等诸多优点,已在工程实际中得到广泛应用,但是与C语言相比,其执行效率较低,特别是当程序中含有大量循环语句(例如迭代计算)时,MATLAB就有些力不从心,速度很慢,而运用擅长数值计算语言进行编程,气运行效率高。一方面,如果放弃MATLAB强大功能和数量众多的应用工具箱,无疑是自愿的极大浪费。另一方面,针对工程实际,人们用C语言已编写了大量实用程序,如果将其重新改写成M文件一直到MATLAB环境中,不仅要花费大量的时间和精力,而且有时还降低了其运行效率。可否将两者优势互补呢?混合编程就是其有效地解决途径。
1. MATLAB
1.1 MATLAB简介
MATLAB是一种以矩阵为基本数据对象的科学计算语言,它提供了功能齐全的函数库和各种工具箱,具有强大的科学分析、数值计算、图形绘制等功能。MATLAB是当前应用最为广泛的数学软件,利用这一完整的数学平台,用户可以快速实现十分复杂的功能,极大的提高了工程分析计算的效率。但与其他高级程序相比,MATLAB程序是一种解释执行程序,不用编译等预处理,程序运行速度较慢。[1]
1.2 MATLAB的语言特点
一种语言之所以能如此迅速地普及,显示出如此旺盛的生命力,是由于它有着不同于其他语言的特点,正如同C等高级语言使人们摆脱了需要直接对计算机硬件资源进行操作一样,被称作为第四代计算机语言的MATLAB,利用其丰富的函数资源,使编程人员从繁琐的程序代码中解放出来。MATLAB最突出的特点就是简洁。MATLAB用更直观的,符合人们思维习惯的代码,代替了C
1
学 士 学 位 论 文
BACHELOR ’S THESIS 和语言的冗长代码。MATLAB给用户带来的是最直观,最简洁的程序开发环境。以下简单介绍一下MATLAB的主要特点。
1)语言简洁紧凑,使用方便灵活,库函数极其丰富。MATLAB程序书写形式自由,利用起丰富的库函数避开繁杂的子程序编程任务,压缩了一切不必要的编程工作。由于库函数都由本领域的专家编写,用户不必担心函数的可靠性。可以说,用MATLAB进行科技开发是站在专家的肩膀上。
具有C等高级语言知识的读者可能已经注意到,如果用C语言去编写程序,尤其当涉及矩阵运算和画图时,编程会很麻烦。例如,如果用户想求解一个线性代数方程,就得编写一个程序块读入数据,然后再使用一种求解线性方程的算法(例如追赶法)编写一个程序块来求解方程,最后再输出计算结果。在求解过程中,最麻烦的要算第二部分。解线性方程的麻烦在于要对矩阵的元素作循环,选择稳定的算法以及代码的调试动不容易。即使有部分源代码,用户也会感到麻烦,且不能保证运算的稳定性。解线性方程的程序用C这样的高级语言编写,至少需要四百多行,调试这种几百行的计算程序可以说很困难。以下用MATLAB编写以上两个小程序的具体过程。
MATLAB求解下列方程,并求解矩阵A的特征值。 Ax=b,其中:
A= 32 13 45 67 23 79 85 12 43 23 54 65 98 34 71 35 b= 1 2 3 4
解为:x=A\\b;设A的特征值组成的向量e,e=eig(A)。可见,MATLAB的程序极其简短。更为难能可贵的是,MATLAB甚至具有一定的智能水平,比如上面的解方程,MATLAB会根据矩阵的特性选择方程的求解方法,所以用户根本不用怀疑MATLAB的准确性。
2)运算符丰富。由于MATLAB是用C语言编写的,MATLAB提供了和
2
学 士 学 位 论 文
BACHELOR ’S THESIS C语言几乎一样多的运算符,灵活使用MATLAB的运算符将使程序变得极为简短。
3)MATLAB既具有结构化的控制语句(如for循环,while循环,break语句和if语句),又有面向对象编程的特性。
4)程序限制不严格,程序设计自由度大。例如,在MATLAB里,用户无需对矩阵预定义就可使用。
5)程序的可移植性很好,基本上不做修改就可以在各种型号的计算机和操作系统上运行。
6)MATLAB的图形功能强大。在C语言里,绘图都很不容易,但在MATLAB里,数据的可视化非常简单。MATLAB还具有较强的编辑图形界面的能力。
7)MATLAB的缺点是,它和其他高级程序相比,程序的执行速度较慢。由于MATLAB的程序不用编译等预处理,也不生成可执行文件,程序为解释执行,所以速度较慢。
8)功能强大的工具箱是MATLAB的另一特色。MATLAB包含两个部分:核心部分和各种可选的工具箱。核心部分中有数百个核心内部函数。其工具箱又分为两类:功能性工具箱和学科性工具箱。功能性工具箱主要用来扩充其符号计算功能,图示建模仿真功能,文字处理功能以及与硬件实时交互功能。功能性工具箱用于多种学科。而学科性工具箱是专业性比较强的,如control,toolbox,signl proceessing toolbox,commumnication toolbox等。这些工具箱都是由该领域内学术水平很高的专家编写的,所以用户无需编写自己学科范围内的基础程序,而直接进行高,精,尖的研究。
9)源程序的开放性。开放性也许是MATLAB最受人们欢迎的特点。除内部函数以外,所有MATLAB的核心文件和工具箱文件都是可读可改的源文件,用户可通过对源文件的修改以及加入自己的文件构成新的工具箱。
2. C 语言
2.1 C语言简介
C语言功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好,既具有高级语言的优点,又具有许多低级语言的特点,是目
3
学 士 学 位 论 文
BACHELOR ’S THESIS 前应用最广的编程语言。它对操作系统和应用程序以及硬件进行直接操作,一些大型应用软件如MATLAB就是用C语言开发的。[2]
2.2 C语言特点
C语言之所以能迅速崛起,并成为最受欢迎的程序设计语言之一,是因为它有许多优于其它语言的特点。C语言具有下列特点:
1)C语言功能齐全。C语言的数据类型有:整型、实型、字符型、无符号整型、数组类型、指针类型、结构体类型、共用体类型、枚举型等。C语言运算符丰富,表达式类型有:赋值表达式、关系表达式、算术表达式、逻辑表达式、条件表达式、逗号表达式以及为运算等。
2)C语言简洁、紧凑,使用方便、灵活。C语言的一个语句可完成多个操作。一个表达式也可以完成多个操作。书写简练,源程序短,因而输入程序工作量小。
3)C是面向结构化程序设计的语言。结构化语言的显著特点是代码、数据的模块化,C程序是以函数的形式提供给用户的,这些函数调用方便。C语言具有多种条件语句、循环控制程序流向(如if/else语句,switch语句,while语句,do/while语句,for语句,break语句,continue语句等)。从而使程序完全结构化。
4)C是中级语言。他把高级语言的基本结构和语句与低级语言的实用性结合起来。C语言可以像汇编语言一样对位、字节好地址进行操作,实现汇编语言的大部分功能,可直接对硬件进行编程。用C语言加上一些汇编语言子程序编程,更能显示C语言的优势。C语言源程序编译后代码短、执行效率高。
5)C语言适用范围大。C语言还有一个突出的优点就是适合于多种操作系统,如DOS、Windows、UNIX,也适用于多种机型。源程序代码可移植性好。
3. 混合编程的实现方式
正式考虑到上面这些原由,MATLAB系统提供了其应用程序接口(Application Program Interface)来解决这些问题。API主要包括3部分:MEX
4
学 士 学 位 论 文
BACHELOR ’S THESIS 文件—外部程序调用接口,用来在MATLAB环境下调用C语言编写的程序;MAT文件应用程序—数据输入输出接口,用于MATLAB系统与外部环境之间互传数据;计算引擎函数库—MATLAB处于后台作为一个计算引擎,与其它应用程序建立客户机/服务器关系,在其他其应用程序中调用。
3.1 MAT文件
MAT文件是MATLAB使用的一种特有的二进制数据文件。MAT文件可以包含一个或者多个MATLAB变量。在MAT文件中不仅保存各变量数据本身,而且同时保存变量名以及数据类型等。所以在MATLAB中载入某个MAT文件后,可以在当前MATLAB工作空间完全再现当初保存该MAT文件时的那些变量。这是其他文件格式所不能的。同样,用户也可以使用MAT文件从MATLAB环境中导出数据。MAT文件提供了一种更简便的机制在不同操作平台之间移动MATLAB数据。
C程序中有两种方式可以读取MAT文件数据。一种是利用MATLAB提供的有关MAT文件的编程接口函数。MATLAB的库函数中包含了MAT文件接口函数库,其中有各种对MAT文件进行读写的函数,都是以mat开头的函数。
另一种在C程序中读写MAT文件的方法是根据MAT文件函数结构,以二进制格式在读取文件内容,然后解析文件内容,从而获得文件中保存的MATLAB数据。因为MAT文件格式是公开的,用户只要在找到安装路径下的一个名为matfile format.pdf的文件,就可以详细了解MAT文件结构,从而在C程序以二进制格式在读取文件内容,解析以后得到文件中保存的数据。[3][4]
简单举例:
· 获取一个MAT文件中第一个矩阵的信息 · 获取一个MAT文件中第一个矩阵的信息 typedef struct { char szFileName[256]; MATFile* pMatFile; mxArray* pArray; char szArrayName[64];
5