MATLAB建模与仿真实用教程
上QQ阅读APP看书,第一时间看更新

第1章 MATLAB建模基础

MATLAB(MATrix LABoratory,矩阵实验室)是由美国MathWorks公司发布的一款主要面向科学计算、可视化、建模和仿真以及交互式程序设计的高科技计算环境,具有编程效率高、用户使用方便、扩充能力强、移植性好等特点。尽管MATLAB主要用于数值计算,但利用为数众多的附加工具箱(Toolbox),它也适合不同领域的应用,如图形图像处理、通信系统建模与仿真、控制系统设计与分析、信号处理与通信、算法建模和分析等。另外,还有一个配套软件包Simulink,提供了一个可视化开发环境,常用于系统模拟、动态/嵌入式系统的建模与仿真开发等方面。目前很多大型公司在将产品投入实际应用之前都会采用仿真工具Simulink对其产品进行仿真试验。

本章是学习MATLAB建模与仿真的基础,简单介绍了MATLAB R2013b的基本操作,包括软件的安装、MATLAB通用命令、应用窗口简介、MATLAB外部接口、工具箱及MATLAB数学建模等基础知识。通过对本章的学习,使初学者可以轻松地进入MATLAB建模学习的殿堂,初步掌握MATLAB的主要功能,熟悉MATLAB的操作环境及建模方法,为后面的进一步学习打下坚实的基础。

1.1 MATLAB简介

MATLAB和Mathematica、Maple并称为三大数学软件。MATLAB在矩阵计算和仿真能力方面具有强大的优势,MathWorks公司在发布MATLAB的同时也会发布仿真工具Simulink。MAT- LAB将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、C++、FORTRAN)的编辑模式,使得MATLAB成为工程师和科研工作者的首选工具。

1.1.1 MATLAB的安装

MATLAB的安装非常简单,打开下载好的安装包,然后直接运行setup.exe进行安装。本书以MATLAB R2013b为例进行介绍。

1)双击setup.exe,开始安装,如图1-1所示。

2)选中“不使用Internet安装”单选按钮,单击“下一步”按钮,如图1-2所示。

3)安装许可协议,选中“是”单选按钮,单击“下一步”按钮,如图1-3所示。

4)选中“我已有我的许可证的文件安装密钥:”单选按钮,并在文本框中输入安装密钥,单击“下一步”按钮,如图1-4所示。

5)在图1-5所示的对话框中,选中“典型”或“自定义”单选按钮均可,单击“下一步”按钮,都会进入如图1-6所示的对话框。选中“典型”单选按钮会自动安装所有默认已经许可的产品,而选中“自定义”单选按钮则可以自己指定想要安装的产品。一般选中“典型”单选按钮即可,并无太大影响。

978-7-111-59850-3-Chapter01-1.jpg

图1-1 MATLAB R2013b的安装方式

978-7-111-59850-3-Chapter01-2.jpg

图1-2 MATLAB R2013b安装对话框

978-7-111-59850-3-Chapter01-3.jpg

图1-3 “许可协议”对话框

978-7-111-59850-3-Chapter01-4.jpg

图1-4 “文件安装密钥”对话框

978-7-111-59850-3-Chapter01-5.jpg

图1-5 “安装类型”对话框

6)指定安装文件夹,输入安装文件夹的完整路径,也可以单击“浏览”按钮选择安装目录,然后单击“下一步”按钮,如图1-6所示。

此处需要注意的是,尽量不要把软件安装到系统盘(即C盘中),想要安装MATLAB R2013b需要7.0625 GB的空间,建议安装路径下有10 GB以上可用空间。

7)在图1-7所示的对话框中单击“是”按钮。

8)在图1-8所示的对话框中单击“安装”按钮,接下来会显示安装进度,如图1-9所示。安装的过程需要20~40分钟。

978-7-111-59850-3-Chapter01-6.jpg

图1-6 “指定安装文件夹”对话框

978-7-111-59850-3-Chapter01-7.jpg

图1-7 创建安装文件夹对话框

978-7-111-59850-3-Chapter01-8.jpg

图1-8 “确认”对话框

978-7-111-59850-3-Chapter01-9.jpg

图1-9 安装进度对话框

9)安装完成后会显示产品配置说明,如图1-10所示,单击“下一步”按钮。

10)显示安装已完成,但仍需要激活MATLAB才可以使用,单击“下一步”按钮,如图1-11所示。在弹出的对话框中选中“不使用Internet手动激活”单选按钮,如图1-12所示。

978-7-111-59850-3-Chapter01-10.jpg

图1-10 产品配置说明

978-7-111-59850-3-Chapter01-11.jpg

图1-11 安装完成激活MATLAB

11)单击“浏览”按钮,找到MATLAB R2013b的安装包,如图1-13所示的路径,找到并选择matlab_std.dat媒体文件,单击“下一步”按钮,显示激活已完成,如图1-14所示。

注意:每个版本的软件安装和激活过程不尽相同请严格按照提示步骤进行安装和激活操作否则可能会发生不可预知的错误导致安装失败

MATLAB R2013b安装完成并激活后,用户可以通过单击“开始”菜单中的MATLAB来启动MATLAB系统,也可以在MATLAB的安装目录下找到MATLAB.exe并单击运行。此外,用户可以在桌面建立MATLAB的快捷菜单,通过双击快捷方式图标,也可以启动MATLAB系统。MATLAB R2013b的启动页面如图1-15所示。

978-7-111-59850-3-Chapter01-12.jpg

图1-12 “MathWorks软件激活”对话框

978-7-111-59850-3-Chapter01-13.jpg

图1-13 “离线激活”对话框

978-7-111-59850-3-Chapter01-14.jpg

图1-14 激活完成

978-7-111-59850-3-Chapter01-15.jpg

图1-15 MATLAB启动页面

1.1.2 MATLAB通用命令

在MATLAB中,有很多的命令是会经常用到的,需要熟练地掌握其使用方法。例如,在命令行窗口输入“clear”,代表清除工作空间中的变量;输入“exit”或“quit”,代表关闭MATLAB。

MATLAB的常用命令见表1-1。

1-1 MATLAB的常用命令

978-7-111-59850-3-Chapter01-16.jpg

(续)

978-7-111-59850-3-Chapter01-17.jpg

MATLAB中的一些标点符号有特殊的含义。例如,利用分号“;”区分矩阵的行或取消运行结果的显示,利用“978-7-111-59850-3-Chapter01-18.jpg ”进行程序的续行。

MATLAB中常用的标点符号的含义见表1-2。

1-2 MATLAB中常用标点符号的含义

978-7-111-59850-3-Chapter01-19.jpg

在MATLAB中,键盘按键能够方便地进行程序的编辑,有时可以起到事半功倍的效果。常用的键盘按键及其作用见表1-3。

1-3 常用的键盘按键及其作用

978-7-111-59850-3-Chapter01-20.jpg

1.1.3 MATLAB应用窗口简介

窗口是指某一应用程序的使用界面,是用户界面中最重要的部分。在图形界面操作系统中,窗口是其最重要的组成部分之一。下面介绍MATLAB R2013b运行中的一系列具体的应用窗口。

MATLAB R2013b的工作界面如图1-16所示,主要包括菜单、工具栏、当前工作目录、命令行窗口、工作空间窗口和历史命令窗口。

MATLAB加载任何文件、执行任何命令都是从当前工作目录(Current Folder)开始的。当前目录是指所有文件的保存和读取都是在这个默认目录下进行的,这个路径可以直接修改任何一级的目录名,操作十分方便。

MATLAB的命令行窗口(Command Window)是用户使用MATLAB进行工作的窗口,是用于输入数据,运行MATLAB函数和脚本并显示结果的窗口,同时也是实现MATLAB各种功能的主窗口。MATLAB的各种操作命令都是由命令行窗口开始的。命令行窗口中的“>>”为运算提示符,表示MATLAB正处于准备状态,用户可以直接在MATLAB命令行窗口中输入MATLAB命令,输入命令后按<Enter>键,实现其相应的功能或提示错误信息。MATLAB的命令行窗口提供了非常友好的交互能力,用户可以在此环境中边思考边验证。

工作空间窗口(Workspace)就是MATLAB处理各种各样的数据时,保存在内存中的MATLAB变量名、数学结构、字节数以及类型等专门的空间,且不同的变量类型分别对应不同的变量名图标。数据存放在工作空间中,可以随时被调用。工作空间窗口是MATLAB重要的组成部分。

978-7-111-59850-3-Chapter01-21.jpg

图1-16 MATLAB R2013b的工作界面

历史命令窗口(Command History)不仅记录了MATLAB命令行窗口中输入的所有命令,还包括每次启动MATLAB的时间。这些命令不仅仅只是记录在历史命令窗口,还可以被再次执行。通过历史命令窗口执行历史命令的方法有以下几种:

1)用鼠标双击某一条命令,就可以将这条命令再次发送到命令行窗口。

2)选中想要再次执行的历史命令,然后复制到命令行窗口中就可以再次执行这条历史命令。

3)选中想要执行的历史命令,然后单击鼠标右键,在弹出的快捷菜单中选择“Evaluate Selection”选项,就可以执行相应的命令。此方法可以一次执行多条命令。

MATLAB R2013b的工作界面按钮如图1-17所示。MATLAB R2013b的工作界面按钮的含义见表1-4。

978-7-111-59850-3-Chapter01-22.jpg

图1-17 MATLAB R2013b的工作界面按钮

1-4 MATLAB的工作界面按钮的含义

978-7-111-59850-3-Chapter01-23.jpg

单击“New Script”按钮,或者单击“New”按钮,在下拉菜单中选择“script”,进入M文件编辑/调试器窗口。M文件编辑/调试器是用户在MATLAB中进行程序设计、实现函数功能的重要编辑器之一,其窗口界面如图1-18所示。

978-7-111-59850-3-Chapter01-24.jpg

图1-18 M文件编辑/调试器窗口

MATLAB的图形窗口是MATLAB绘图功能的基础,使用极其方便。单击“New”按钮,在下拉菜单中选择“figure”,进入图形窗口,如图1-19所示。

978-7-111-59850-3-Chapter01-25.jpg

图1-19 图形窗口

1.2 MATLAB数学建模概述

MATLAB数学建模即用数学方法解决实际的应用问题。MATLAB有什么功能,数学建模大多可以用到,如简单的数值计算,符号计算,图形图像处理,还有复杂的算法模拟和系统仿真等功能,这些具体应用将在后续的章节为读者详细介绍。本节主要是让读者对MATLAB数学建模有一个大致的了解。

1.2.1 建模方法和基本步骤

简要地讲,数学建模是一个多次迭代的过程,每一次迭代大体上包括实际问题的抽象、简化,做出假设,明确变量和参数;形成明确的数学问题,以解析形式或者数值形式求解该数学模型;对结果进行解释、分析以及验证;若符合实际即可,不符合实际则要进行修改,进入下一个迭代。

1.数学建模的一般步骤

(1)模型准备

首先要了解建模对象的实际背景,明确建模目的,搜集有关的信息,掌握对象特征,形成一个比较清晰的“问题”,分析实际问题中的各种因素,并用变量表示。

(2)模型假设

针对问题的特点和建模目的,做出合理的、简化的假设。在合理与简化之间做出折中。对数据资料进行分析计算,找出起主要作用的因素,经过必要的精炼、简化,提出若干符合客观实际的假设。分析上述变量之间的关系,哪些是相互依存的,哪些是独立的,它们之间又存在着怎样的关系。

(3)建立模型

用数学的语言、符号描述问题。根据实际问题选用合适的数学框架(典型的框架有优化问题/配置问题等),并将具体的问题在所选的数学框架中表示出来,然后发挥想象力,使用类比法,尽量采用简单的、适当的数学工具表达各变量之间的关系,建立相应的数学结构(即建立数学模型)。

(4)模型求解

在利用各种数学方法、数学软件和计算机技术难以得出解析解时借助计算机求出数值解。

(5)模型分析

选取合适的算法求解所建立的数学模型表述的问题,对模型的结果进行误差分析和模型的稳定性分析。

(6)模型检验

使用计算结果解决实际问题,将模型计算结果与实际现象、数据进行比较,检验模型的合理性、适用性和可靠性。

(7)模型应用

通过检验,证明所建立的模型与实际应用问题相符后,则可以投入到实际应用当中,解决实际应用问题。

2.建立的数学模型的基本原则

(1)简化原则

现实世界的原型都是具有多因素、多变量、多层次的比较复杂的系统,对原型进行一定的简化即抓住主要矛盾,数学模型应比原型简化,数学模型本身也应该是“最简单”的。

(2)可推导原则

由数学模型的研究可以推导出一些确定的结果,如果建立的数学模型在数学上是不可推导的,得不到确定的可以应用于原型的结果,则这个数学模型就是无意义的。

(3)反映性原则

数学模型实际是人对现实世界的一种反映形式,因此数学模型和现实世界的原型就应有一定的“相似性”,抓住与原型相似的数学表达式或数学理论就是建立数学模型的关键性技巧。

1.2.2 建模的意义

数学模型就是对于一个特定的对象,为了一个特定的目标,根据特有的内在规律,做出一些必要的简化假设,从而得到由数字、字母或者其他数学符号所组成的,描述特定对象数量规律的数学公式、算法或图形等。

进行数学建模需要具备以下几种能力:

1)数学思维的能力。

2)分析问题本质的能力。

3)资料检索能力。

4)编程能力。

MATLAB强大的数值计算、数据处理和图形图像处理的功能,使其在数学建模中有巨大优势,无论是在建立模型的哪个阶段,MATLAB都有其他语言无法比拟的高效、快捷、方便的功能,大大提高了数学建模的效率,丰富了数学建模的方法和手段,有力地促进了问题的解决。另外,将MATLAB应用于实际的教学过程中,可以激发学生学习数学相关知识的兴趣和热情,从而提高学生运用所学数学知识分析、解决实际问题的能力。

MATLAB因为其容易上手、计算功能强大,并且拥有丰富的数据可视化函数等特点,使其成为数学建模领域重要的、应用广泛的工具软件。MATLAB提供了运用所学知识建立数学模型,使用计算机解决实际问题的能力。

1.2.3 数学模型的特点

数学模型是运用数理逻辑方法和数学语言建构的科学或工程模型。数学模型的历史可以追溯到人类开始使用数字的时代。建立数学模型是沟通实际问题与数学工具之间联系的一座必不可少的桥梁,所建模型一般有以下几点要求。

1.真实完整

1)真实地、系统地、完整地、形象地反映客观现象。

2)必须具有代表性。

3)具有外推性,即能得到原型客体的信息。在模型的研究实验时,能得到关于原型客体的原因。

4)必须反映完成基本任务所达到的各种业绩,而且要与实际情况相符合。

2.简明实用

在建模过程中,要把本质的东西及其关系反映进去,把非本质的、对反映客观真实程度影响不大的东西去掉,使模型在保证一定精确度的条件下,尽可能地简单和可操作,数据易于采集。

3.适应变化

随着有关条件的变化和人们认识的发展,通过相关变量及参数的调整,能很好地适应新情况。

数学模型是针对参照某种事物系统的特征或数量依存关系,采用数学语言概括地或近似地表述出的一种数学结构,这种数学结构是借助于数学符号刻画出来的某种系统的纯关系结构。从广义理解,数学模型包括数学中的各种概念、各种公式和各种理论。因为它们都是由现实世界的原型抽象出来的。从这意义上讲,整个数学也可以说是一门关于数学模型的科学。从狭义理解,数学模型只指那些反映了特定问题或特定事物系统的数学关系结构,这个意义上也可理解为一个系统中各变量间关系的数学表达。

数学模型所表达的内容可以是定量的,也可以是定性的,但必须以定量的方式体现出来。因此,数学模型法的操作方式偏向于定量形式。

1.2.4 数学模型的分类

数学模型可以按照不同的方式分类,常用的分类方式有按照模型的应用领域分类、按照建立模型所用的数学方法分类、按照模型的表现特性分类、按照建模目的分类及按照对模型结构的了解程度分类。

1)按模型的应用领域(或所属学科)分类,数学模型可以分为以下几种模型:生物学数学模型、医学数学模型、工程学数学模型、地质学数学模型、气象学数学模型、经济学数学模型、社会学数学模型、物理学数学模型、化学数学模型、天文学数学模型。

例如:人口模型、交通模型、环境模型、生态模型、城镇规划模型、水资源模型、再生资源利用模型、污染模型等。

2)按照建立模型所用的数学方法(或所属数学分支)分类,数学模型可以分为以下几种模型:初等数学模型、几何模型、微分方程模型、图论模型、马氏链模型、规划论模型。

3)按照模型的表现特性分类,数学模型可以分为以下几种模型:确定性模型和随机性模型、突变性模型和模糊性模型、静态模型和动态模型、线性模型和非线性模型、离散模型和连续模型。

其中,确定性模型和随机性模型取决于是否考虑随机因素的影响;静态模型和动态模型取决于是否考虑时间因素引起的变化;线性模型和非线性模型取决于模型的基本关系,如微分方程是否是线性的;离散模型和连续模型指模型中的变量(主要是时间变量)取为离散的还是连续的。

虽然从本质上讲大多数实际问题是随机的、动态的、非线性的,但是由于确定性模型、静态模型、线性模型容易处理,并且往往可以作为初步的近似来解决问题,因此建模时常先考虑确定性模型、静态模型、线性模型。连续模型便于利用微积分方法求解,作理论分析;而离散模型便于在计算机上作数值计算,所以用哪种模型要看具体问题而定。在具体的建模过程中,将连续模型离散化,或将离散变量视作连续,也是常采用的方法。

4)按照建模目的分类,数学模型可以分为以下几种模型:有描述模型、分析模型、预报模型、优化模型、决策模型、控制模型。

5)按照对模型结构的了解程度分类,数学模型可以分为以下几种模型:白箱模型、灰箱模型、黑箱模型。

白箱模型把研究对象比喻成一只箱子里的机关,要通过建模来揭示它的奥妙。白箱主要包括用力学、热学、电学等一些机理相当清楚的学科描述的现象以及相应的工程技术问题,这方面的模型大多已经基本确定,还需深入研究的主要是优化设计和控制等问题。灰箱模型主要指生态、气象、经济、交通等领域中机理尚不十分清楚的现象,在建立和改善模型方面都还不同程度地有许多工作要做。黑箱模型主要指生命科学和社会科学等领域中一些机理(数量关系方面)很不清楚的现象。有些工程技术问题虽然主要基于物理、化学原理,但由于因素众多、关系复杂和观测困难等原因也常作为灰箱模型或黑箱模型处理。白箱模型、灰箱模型、黑箱模型之间并没有明显的界限,而且随着科学技术的发展,箱子的“颜色”必然是逐渐由暗变亮的。

1.3 数学建模函数及应用

数学建模是一种数学的思考方法,是运用数学的语言和方法,通过抽象、简化,建立能近似刻画并解决实际问题的一种强有力的数学手段。数学建模在解决问题中使用非常广泛,并且MATLAB为用户提供了大量的函数,方便快捷,大大提高了使用者的效率。

1.3.1 数学建模基本函数

MATLAB数学建模需要用到许多函数,如一些基本的内部数学常数、基本的数学运算符和常用的内部数学函数等。

1)MATLAB内部数学常数见表1-5。

1-5 MATLAB内部数学常数

978-7-111-59850-3-Chapter01-26.jpg

2)基本数学运算符见表1-6。

1-6 基本数学运算符

978-7-111-59850-3-Chapter01-27.jpg

3)关系运算符见表1-7。

1-7 关系运算符

978-7-111-59850-3-Chapter01-28.jpg

4)常用内部数学函数见表1-8。

1-8 常用内部数学函数

978-7-111-59850-3-Chapter01-29.jpg

(续)

978-7-111-59850-3-Chapter01-30.jpg

MATLAB中还有许多函数,这里暂时不一一介绍,在后续的章节中通过综合应用对这些函数的应用方法进行具体说明。

1.3.2 数学建模应用

MATLAB是当前优秀的数学软件,随着其版本的不断升级,其强大的数据计算、图形图像处理和建模与仿真等功能也得到了加强和完善。数学建模的方法有很多,常用方法及应用见表1-9。

1-9 数学建模常用方法及其应用

978-7-111-59850-3-Chapter01-31.jpg

数据处理是数学建模的基础,通常我们所遇到的问题都需要先对所采集到的数据进行处理和分析,从而得到这些数据所反映的真实的信息或者情况。从数学建模的角度来说,将数据所反映出的信息或者情况转化成数学表达式的方式是数学建模的基础,所以对数据的处理就变得尤为重要。当数据量较大时,MATLAB充分体现了其强大的数据处理和分析的优势。

用户通过MATLAB进行科学计算时,不可避免地要处理大量的数据,而方便的数据处理方式会让用户使用MATLAB的过程变得更加得心应手。MATLAB提供了多种数据处理方式,一种方法是将数据输出,然后复制、粘贴到软件中进行处理,这种方法在数据量庞大时使用多有不便;另外一种方法是同Word或者Excel进行数据交互,这种方法无论数据大小,操作起来都非常方便。MATLAB提供了多种应用的接口,提升了自身的开发效率,下面进行详细介绍。

1.4 MATLAB外部接口

MATLAB为用户提供了广泛的外部应用程序接口(API),能够与外部应用程序实现“无缝”结合,MATLAB的外部接口使得MATLAB可以与外部设备和程序实现数据交互和程序移植,以增强MATLAB的建模和仿真、图形图像处理和显示等功能,从而弥补其执行效率较低的缺点,同时增强其他应用程序进行软件开发的功能,提高了软件开发效率。通过MATLAB接口编程,可以充分利用现有资源,更容易地编写出功能强大、结构简洁的应用程序。

MATLAB和外部程序的编程接口总得来说分为以下两大类:

1)在MATLAB中调用其他的语言编写的代码。

2)在其他语言程序中调用MATLAB。

这些技术拓宽了MATLAB的使用范围,给开发者提供了多种解决问题的方式,并且提升了自身的竞争力。

1.4.1 数据文件

在MATLAB中可以直接对磁盘文件进行访问。MATLAB提供了很多文件输入和输出的内建函数,而且大多数函数都是基于C语言的文件I/O函数,它们可对二进制文件或ASCII文件进行打开、关闭、存储等操作。数据文件I/O操作函数见表1-10。

1-10 数据文件I/O操作函数

978-7-111-59850-3-Chapter01-32.jpg

MATLAB提供的处理文件能力,可以实现数据的写入、读取等操作,支持的文件类型包括MATLAB自带文件、文本文件、科学数据文件、音频文件、视频文件、图像文件、表单文件和扩展标记文件。下面简单介绍几种文件的操作。

1.打开文件

根据操作系统的要求,在程序中要使用或者创建一个磁盘文件时,必须向操作系统发出打开文件的命令,当使用完毕后,则必须关闭这个文件。

在MATLAB中,使用fopen函数打开二进制形式的文件,具体方法如下:

fid=fopen(filename,permission)

[fid,message]=fopen(filename,permission)

1)fid参数是由操作系统设定的一个整数,用来表示文件操作的状态及标识已打开的文件,如果返回的值大于0,则说明文件打开成功;如果返回值为-1,则表示fopen无法打开该文件;如果返回值为非负值,则为文件的标识。

2)filename表示待打开的数据文件,注意文件名要有扩展名。

3)message参数用来表示文件操作的相关信息。

4)permission参数用来表示文件处理方式,其选项见表1-11。

1-11 permission参数选项

978-7-111-59850-3-Chapter01-33.jpg

当文件以文本形式打开时,需要在上述指定的permission字符(串)后加字符t,如rt、wt等。

【例1-1】以只读方式依次打开sin函数、cos函数以及不存在的sincos函数对应文件。

在命令行窗口中输入语句如下。

[fid1,message1]=fopen(sin.mr

[fid2,message2]=fopen(cos.mr

[fid3,message3]=fopen(sincos.mr

命令行窗口的输出结果如下。

978-7-111-59850-3-Chapter01-34.jpg

需要说明的是,前两条语句为已存在的文件,分别给出文件标识5和6,这两个数字仅仅是一个标识,不同情况下运行得到的数值可能不同。如果文件打开失败,则得到如第三条语句的输出结果。

为了后续操作的顺利进行,程序设计中每次打开文件,都要进行该操作是否正确的判断,具体如下:

[fid,message]=fopen(filename,r);

if fid==-1

disp(message);

end

2.关闭文件

在打开文件后,如果完成了对应的读/写工作,则应该及时关闭文件。这样做一是为了提高程序的可靠性,以免数据丢失;二是可以避免系统资源的浪费。在MATLAB中,使用与C语言同名的fclose函数关闭打开的文件并返回文件操作码,具体方法如下。

status=fclose(fid)

其中,fid参数即为要关闭文件的文件标识,它也是打开该文件时的返回值。如果关闭成功,则status的返回值为0,否则返回值为-1。

【例1-2】关闭已打开的文件。

在命令窗口中输入如下语句。

fid=fopen(sin.mr

status=fclose(fid)

命令窗口中的输出结果如下。

978-7-111-59850-3-Chapter01-35.jpg

对于MATLAB来说,二进制文件相对比较容易处理。常见的二进制文件包括.m、.dat、.txt等。下面介绍以二进制形式读取和写入文件。

3.读取文件

在MATLAB中使用fread函数读取二进制文件的数据,并将文本内容看成一个整数序列,存入矩阵,具体使用方法如下。

a=fread(fid)

a=fread(fid,size)

a=fread(fid,size,precision)

1)fid参数是打开文件时得到的文件标识。

2)size参数表示读取整数的个数,其选项见表1-12。

3)precision参数表示读取的数据类型,默认情况是uchar(即8位字符型)。常用的数据类型见表1-13。

1-12 size参数选项

978-7-111-59850-3-Chapter01-36.jpg

1-13 常用的数据类型

978-7-111-59850-3-Chapter01-37.jpg

1-3】以二进制的方式读取文件example1_3.m,其内容由y=randi(1000,6,6)获得,大致如下所示。

404 60 169 297 626 436

97 235 650 745 781 447

132 354 732 189 82 307

943 822 648 687 930 509

957 16 451 184 776 511

576 44 548 369 487 818

在命令行窗口中输入如下语句。

fclose(all);

clear

clc

fid=fopen(example1_3.mr);

a=fread(fid);

a1=a

a=fread(fid,8);

a2=a

fclose(fid);

命令行窗口的输出结果如下。

978-7-111-59850-3-Chapter01-38.jpg

978-7-111-59850-3-Chapter01-39.jpg

由结果可以看出,a2是一个空矩阵,并没有得到预期结果。其原因是读语句执行后会影响文件内的控制位置。语句“a=fread(fid)”执行后,文件内的控制位置位于文件末尾,所以无法向下读取8字节。每次文件打开,都将文件内的控制位置置于开始处。

4.写入文件

在MATLAB中使用fwrite函数实现将二进制数据写入已打开的文件,具体方法如下。

count=fwrite(fid,a,precision)

【例1-4】将矩阵写入example1_4.txt文件中。

在命令行窗口中输入如下语句。

clear

clc

A=[123;789;456];

fid=fopen(example1_4.txtw);

count=fwrite(fid,A,int32

closestatus=fclose(fid)

运行结果如下:

978-7-111-59850-3-Chapter01-40.jpg

978-7-111-59850-3-Chapter01-41.jpg

再输入如下代码。

clear

clc

fid=fopen(example1_4.txtr);

A=fread(fid,[34],int32);

closestatus=fclose(fid);

B=magic(3);

C=A∗B

运行结果如下。

C=

26 38 26

116 128 116

71 83 71

前面介绍了以二进制形式读取和写入文件,下面介绍如何以普通的形式读取和写入文件。

5.普通形式读取文件

在MATLAB中使用fgetl函数和fgets函数实现将文本文件中的某一行读出,并将该行的内容以字符串的形式返回。这两种函数的区别在于fgetl函数会忽略回行符,而fgets函数会保留回行符。具体使用方法如下。

tline=fgetl(fid)

tline=fgets(fid)

【例1-5】用fgetl函数实现读取功能。

在命令行窗口输入如下代码。

978-7-111-59850-3-Chapter01-42.jpg

运行结果如下。

978-7-111-59850-3-Chapter01-43.jpg

978-7-111-59850-3-Chapter01-44.jpg

假如已知写入时的格式,想要按照写入时的格式将文件内容完整读出,则可以使用fscanf函数实现已知格式文件的读取,当确定文件的ASCII码格式时,用fscanf进行精确读取,具体方法如下。

a=fscanf(fid,format)

a=fscanf(fid,format,size)

[a,count]=fscanf(fid,format,size)

fid参数是打开文件时得到的文件标识。size参数可以参考表1-7。a用来存放读取的数据,count返回的是读取数据元素的个数。format参数用于指定读取数据的格式,常用的选项见表1-14。

1-14 format参数读取数据的格式选项

978-7-111-59850-3-Chapter01-45.jpg

在格式说明中,除了单个的空格字符可以匹配任意个数的空格字符外,通常字符在转换时将一一匹配,函数fscanf将输入的文件看作一个输入流,MATLAB根据格式来匹配输入

流,并将匹配后的数据读取到MATLAB中。

【例1-6】读取文本文件(example1_6.txt)中的数据,这些数据由y=rand(5,6)随机产生。

随机序列如下。

0.7513 0.9593 0.8407 0.3500 0.3517 0.2858

0.2551 0.5472 0.2543 0.1966 0.8308 0.7572

0.5060 0.1386 0.8143 0.2511 0.5853 0.7537

0.6991 0.1493 0.2435 0.6160 0.5497 0.3804

0.8909 0.2575 0.9293 0.4733 0.9172 0.5678

接下来,在命令窗口中输入如下语句。

clear

clc

fid=fopen(example1_6.txtr);

d1=fscanf(fid,%s,[56])

fclose(fid);

fid=fopen(example1_6.txtr);

d2=fscanf(fid,%f,[56])

fclose(fid);

fid=fopen(example1_6.txtr);

d=fscanf(fid,%f);

d3=d

fclose(fid);

命令窗口中的输出结果如下所示。

978-7-111-59850-3-Chapter01-46.jpg

978-7-111-59850-3-Chapter01-47.jpg

注意:按格式读取时必须选择正确的格式才能读取出正确的数据

6.fprintf函数写入文件

在MATLAB中使用fprintf函数实现将数据按给定格式写入文件,具体方法如下。 count=fprintf(fid,format,y)

fid参数是打开文件时得到的文件标识,y参数用于指定要写入的数据,count参数用于返回成功写入的字节数。format参数用于指定写入文件的数据格式,常用的格式见表1-15。

1-15 format参数写入文件的数据格式选项

978-7-111-59850-3-Chapter01-48.jpg

注意:写入文件的数据格式还可以包括数据占用的最小宽度和数据精度的说明可同时使用\n\r\t\b等分别代表换行回车Tab退格等字符用\\代表反斜线\%%代表百分号%

【例1-7】向文件example1_7.dat中写入数据。

在命令行窗口中输入如下代码。

clear

clc

y=rand(6)

fid=fopen(example1_7.datw);

fprintf(fid,%6.3f,y);

fclose(fid);

clear

fid=fopen(example1_7.datr);

ey=fscanf(fid,%f);

ey1=ey

fclose(fid);

fid=fopen(example1_7.datr);

ey2=fscanf(fid,%f,[55])

fclose(fid);

输出结果如下所示。

978-7-111-59850-3-Chapter01-49.jpg

本例中,%6.3f表示占6个字符位,小数点后的精度是3位。MATLAB默认设置是小数点后4位。

另外,在打开文件读/写数据时,需要判断和控制文件的读/写位置,需要读/写指定位置上的数据等。在读/写文件时,MATLAB会自动创建一个文件位置指针来管理维护文件读/写数据的起始位置。

读/写数据时,系统默认的方式是从文件头顺序向后读/写数据至文件尾。操作系统通过文件指针来指示当前的文件位置,通过控制指针实现文件内的位置控制。MATLAB提供表1-16所示的文件位置控制函数。

1-16 文件位置控制函数

978-7-111-59850-3-Chapter01-50.jpg

1)feof函数的具体用法如下。

status=feof(fid)

fid参数是打开文件时得到的文件标识。文件指针fid到达文件末尾时返回“真”值,否则返回“假”。

2)fseek函数的具体用法如下。

status=fseek(fid,offset,origin)

fid参数是打开文件时得到的标识。offset参数是偏移量,以字节为单位(正整数表示往文件尾方向移动指针,0表示不移动指针,负整数表示往文件头方向移动指针)。origin参数是基准点(“bof”和-1表示文件头位置,“cof”和0表示目前位置,“eof”和1表示文件尾位置)。操作成功status值为0,否则为1。

3)ftell函数的具体用法如下。

position=ftell(fid)

fid参数是打开文件时得到的文件标识。position参数表示距离文件头位置的字节数,如果为-1表示操作失败。

4)frewind函数的具体用法如下。 frewind(fid)

fid参数是打开文件时得到的文件标识。

【例1-8】利用文件内的位置控制读取文件。

在命令行窗口中输入如下语句。

clc

clear

fid=fopen(magic.mr);

p1=ftell(fid)

a1=fread(fid,[33])

status=fseek(fid,10,cof);

p2=ftell(fid)

a2=fread(fid,[33])

frewind(fid);

p3=ftell(fid)

a3=fread(fid,[33])

status=fseek(fid,0,eof);

p4=ftell(fid)

d=feof(fid)

fclose(fid);

输出结果如下所示。

978-7-111-59850-3-Chapter01-51.jpg

978-7-111-59850-3-Chapter01-52.jpg

由本例结果可以看出,文件头位置是0,文件经过读取指针会相应地移动,文件指针受到指定函数的控制。

1.4.2 MATLAB和Word的混合使用

Notebook集合了Word强大的文字处理功能和MATLAB丰富的数值计算能力。MATLAB与Microsoft Word的结合使得用户可以在Word环境下灵活使用MATLAB的功能,为用户提供了文字处理、图形演示工程设计以及科学计算等为一体的工作环境。Notebook将文字编辑与MATLAB计算命令的实时演示相结合,可用于科技报告、论文、专著等方面,使得文稿做到了动静结合、图文并茂,且可以随时验证运算的正确性。下面将介绍MATLAB中Notebook的一些基本应用方法,主要包括Notebook的安装、启动、实例及使用Notebook需要注意的事项。

1.Notebook的安装

由于Notebook的安装程序同MATLAB的主程序集成为一体,因此Notebook的安装非常简单。在安装了Word的环境下,启动MATLAB,在命令行窗口中输入如下语句。

>>notebook-setup

显示如下结果。

Welcome to the utility for setting up the MATLAB Notebook for interfacing MATLAB to Microsoft Word Setup complete

此时表示安装已经完成,若安装失败,则安装程序无法找到所需要的文件,也会提示用户指定“winword.exe”和“normal.exe”文件的路径。

注意:在输入notebook-setup,“notebook-之间要有一个空格否则系统可能会提示出错在输入notebook-setup后需要等待几分钟因为Notebook的安装需要一定的时间

Notebook的安装比较简单,而MATLAB的安装比较复杂,上述Notebook的安装方法独立于MATLAB的安装。假如用户重新安装了其他版本的Word,则不需要重新安装MATLAB,只要重复上述安装步骤即可。

2.Notebook的启动

Notebook安装完成后,有以下两种启动方法。

1)直接从MATLAB中启动Notebook,在MATLAB命令窗口输入“notebook”命令就可以启动Notebook。具体语法如下。

notebook %打开一个新的M-book文档

notebook FileName%打开已存在的M-book文档

其中FileName应包含文件的完整路径及文件名。在命令窗口中打开已经建立的M-book文件的命令如下。

notebookD:\My Documents\Mbook_1.doc

执行完此命令,则会出现新的“M-book”文档式样的Word窗口,如图1-20所示。

978-7-111-59850-3-Chapter01-53.jpg

图1-20 M-book启动页面

M-book模板是Notebook的核心,该模板定义了Word和MATLAB之间进行通信的宏指令、文档格式和工具栏。用户一般在使用M-book之前都要对模板进行初始化设置。

2)从Word中也可以启动Notebook。新建M-book文件的步骤如下。

在Word窗口中单击“文件”→“新建”命令,在弹出的对话框中找到并选择“m-book.dot”,单击“确定”按钮,如图1-21所示。

978-7-111-59850-3-Chapter01-54.jpg

图1-21 新建m-book.dot

若此时MATLAB尚未启动,则MATLAB自动启动,出现新的“m-book.dot”文档样式的Word窗口如图1-22所示。

从图1-22中可以看出,在Word菜单栏的“加载项”中添加了Notebook的选项,用户可以选择“New MATLAB Notebook”菜单项新建M-book文档,选择“About MATLAB Notebook”菜单项查看版本信息。Notebook的菜单命令包含了所有M-book文档的功能选项,如图1-23所示。Notebook菜单命令选项功能及快捷键见表1-17。

3.Notebook应用实例

使用Notebook从某种意义上来说就是使用Word的M-book模板文档,Notebook同MATLAB之间通过动态链接来进行交互,基本交互单元成为“细胞”(Cell)或“细胞群”(Cell Group)。M-book需要把Word中输入的MATLAB命令或者执行语句组建成“细胞”,然后再传回到MATLAB中执行,执行的输出结果再以“细胞”的方式传到Notebook中。M-book常用的默认“细胞”设置见表1-18。

978-7-111-59850-3-Chapter01-55.jpg

图1-22 M-book文档Word窗口

978-7-111-59850-3-Chapter01-56.jpg

图1-23 Notebook菜单命令

1-17 Notebook菜单命令的功能及快捷键

978-7-111-59850-3-Chapter01-57.jpg

1-18 M-book常用的默认细胞设置

978-7-111-59850-3-Chapter01-58.jpg

1)输入“细胞”。

Notebook采用输入“细胞”(Input)在MATLAB中输入命令,合法的命令、注释都可以定义为输入“细胞”。创建输入“细胞”的具体操作步骤如下。

首先采用文本格式输入命令,在输入结束后不要按<Enter>键和空格键,然后选中该命令,按<Alt+I>组合键或选择“Notebook”→“Define Input Cell”,用来定义输入“细胞”。接下来按<Ctrl+Enter>组合键或选择“Notebook”→“Evaluate Cell”,则被选中的文本自动变成输入“细胞”,得到的运算结果即为输出“细胞”。

【例1-9】在M-book中进行简单的三角函数运算。

首先打开新的M-book文档,在MATLAB命令行窗口中输入“notebook”;接下来在Word中输入如下代码。

x=pi/3;y=sin(x)

选中“x=pi/3;y=sin(x)”,在Notebook菜单命令中选择“Define Input Cell”或按<Alt+I>组合键,使输入的命令成为输入cell,输入cell后的命令被“[]”包围,显示为深绿色。

接下来选择“Notebook”→“Evaluate Cell”或按<Ctrl+Enter>组合键,执行输入cell,得到的运算结果如下。

[y=

0.8660]

注意:初学者常常会混淆输入cell和并行输入cell两个不同的输入命令其中输入cell只是创建输入cell并不执行所输入的命令而后者会显示命令的执行结果即输出cell

2)输出“细胞”。

输出cell包含MATLAB的输出结果,包括数据、图形和出错信息。输出cell是输入“细胞”或者“细胞”群运算后产生的,总是紧跟在输入“细胞”或“细胞”组之后。若输入cell修改后重新运行,则新的输出cell将会替换原有的输入cell。

978-7-111-59850-3-Chapter01-59.jpg

图1-24 Notebook设置对话框

“Notebook Options”是输出细胞的格式控制选项,用户可以选择Notebook菜单命令中的此选项或按<Alt+O>组合键,将弹出Notebook设置对话框,如图1-24所示。该对话框可以对输出cell的各种常用属性,主要包括输出数据类型、输出数据间隔、图形嵌入和图形嵌入尺寸。

其中,输出数据类型有8种,分别为Short、Long、Hex、Bank、Plus、Short e、Long e和Rational;输出数据间隔有两个选项,分别为“疏松”和“紧密”,选择“疏松”,则输入cell和输出cell中间会有一个空行;图形嵌入选项如果不勾选,则在输出cell中将不会出现图形;图形嵌入尺寸有3个选项,分别为单位-unit、宽度-width和高度-height,图形一旦被嵌入到M-book中,就可以像在Word中的其他图形一样,进行剪切和缩放等操作。

【例1-10】运行单元组查看输出单元。

利用“冒号”生成法来生成向量,如:x=1:0.1:3;

y=sin(x)

plot(x,y) #画出正弦波形

选中创建的“细胞”组,按<Ctrl+Enter>组合键,输出cell如下。

978-7-111-59850-3-Chapter01-60.jpg

画出的正弦波形如图1-25所示。

4.使用Notebook的注意事项

Notebook的使用涉及MATLAB和Word之间的互联,所以难免会出现一些问题。下面对可能出现的问题,给予以下几点说明。

1)M-book文档即在Word中输入的MATLAB文本型指令,其输入的指令与标点符号必须都是在英文字符状态下的输入,不能在MATLAB命令、命令组、输入cell(群)时使用中文标点,否则可能会出现错误或者死机。

978-7-111-59850-3-Chapter01-61.jpg

图1-25 正弦波形

2)Notebook不包括MATLAB的交互式操作、动画和程序调试等功能。包含上述指令的操作都不能在Notebook中执行,同时Notebook也不支持Simulink。

3)禁止使用续行号,无论输入cell的一条命令有多长,只要不使用<Enter>键手动换行,就可以被鼠标选中,并正确执行。

4)Notebook中指令的执行要比MATLAB命令行窗口慢得多,所以在运行M-book时,最好不要运行其他的程序或者执行其他的任务,以免影响M-book中指令的正确执行,引起出错或死机等情况。

5)由于计算机硬件与软件的配合存在许多不确定因素,会影响软件的正常使用,因此针对M-book文档执行命令或者程序可能出现的异常情况给出以下可能的解决方法:①在MATLAB主界面中用clear语句清除内存中的变量和函数;②重启计算机后,再执行M-book文档中的命令;③将M-book文档中的命令复制到MATLAB命令行窗口中执行。

1.4.3 MATLAB和Excel的混合使用

MATLAB作为一款功能强大的软件,其在数据计算和图形图像显示方面有很大的优势,而微软的Excel同样具有较强的数据统计和显示功能。MATLAB提供了Spreadsheet Link将Microsoft Excel和MATLAB完美结合起来。

Excel Link的运行机制如图1-26所示。

978-7-111-59850-3-Chapter01-62.jpg

图1-26 Excel Link的运行机制

1.ExcelLink的安装

Excel Link是一个插件软件,用于实现Excel和MATLAB之间的链接。通过Excel Link的链接,用户可以在Excel的工作空间中使用Excel的宏编程工具,实现MATLAB的数值分析、数学计算和绘图功能,同时保持两者之间数据的同步交换和更新。使用Excel Link时无须脱离Excel的工作环境,直接在Excel的工作区或者宏操作中调用MATLAB函数即可。Excel Link的工作环境必须是微软的Windows,如Windows XP、Windows 7等,系统必须安装Microsoft Excel系列产品中的一个和MATLAB,并且在安装MATLAB时安装Excel Link。

上述条件均具备后,还需对Excel Link进行配置,以实现MATLAB与Excel的链接。

Spreadsheet Link的安装步骤如下。

1)启动Microsoft Excel,单击“文件”→“选项”→“加载项”→“转到”命令,弹出如图1-27所示的“加载项”对话框。

978-7-111-59850-3-Chapter01-63.jpg

图1-27 “加载项”对话框

2)在“加载项”对话框中单击“浏览”按钮,选择MATLAB安装路径下的“toolbox”→“exlink”文件夹中的excllink2003.xla文件,然后单击“确定”按钮,如图1-28所示。

3)返回“加载宏”对话框,此时已经添加并选中“Spreadsheet Link EX 3.2 for use with MATLAB”选项,如图1-29所示。

978-7-111-59850-3-Chapter01-64.jpg

图1-28 加载宏文件

978-7-111-59850-3-Chapter01-65.jpg

图1-29 选中“Spreadsheet Link EX 3.2for use with MATLAB”选项

单击“确定”按钮即可加载MATLAB,并弹出如图1-30所示的Excel窗口。

978-7-111-59850-3-Chapter01-66.jpg

图1-30 Excel窗口

可见在加载项下增加了Spreadsheet Link的工具条,如图1-31所示。Spreadsheet Link工具条中有7个MATLAB的命令按钮,它们的含义见表1-19。

978-7-111-59850-3-Chapter01-67.jpg

图1-31 Spreadsheet Link工具条

1-19 SpreadsheetLink工具条的命令按钮

978-7-111-59850-3-Chapter01-68.jpg

(续)

978-7-111-59850-3-Chapter01-69.jpg

2.ExcelLink的启动和退出

按照上述步骤安装Excel Link后,再次启动Excel时,将会自动启动Excel Link和MAT- LAB。如果用户希望改变此种启动方式,则可以在Excel中进行设置。在Excel的文本框中输入“=MLAutoStart("no")”语句,执行后则可改变自动启动Excel Link和MATLAB的设置,如图1-32所示。如果希望恢复原设置,则可以输入“=MLAutoStart("yes")”语句。

当用户关闭了自启动模式,想要启动Excel Link和MATLAB时,可以使用matlabinit函数初始化Excel Link并启动MATLAB,具体操作步骤如下。

在“工具”菜单中选择“宏”选项,打开如图1-33所示的“宏”对话框,在“宏名”文本框内输入“MATLABinit”,单击“执行”按钮,即可初始化Excel Link并启动MATLAB。

978-7-111-59850-3-Chapter01-70.jpg

图1-32 改变Excel Link和MATLAB自启动模式

978-7-111-59850-3-Chapter01-71.jpg

图1-33 手动启动Spreadsheet Link和MATLAB

注意:还可以使用另一个函数MLOpen来完成上述操作二者之间的区别在于函数MLOpen只启动MATLAB而不对Excel Link进行初始化

如果用户退出Excel,则Excel Link和MATLAB也将随之关闭。如果用户希望关闭Excel Link和MATLAB时不关闭Excel,则可以使用“MLClose”函数,在A1单元文本框中输入“=MLClose()”,确认后,Excel Link和MATLAB将会关闭,而Excel仍处于工作状态,如图1-34所示。

3.ExcelLink函数

前面已经介绍了部分Excel Link函数,如MATLABinit、MLOpen、MLClose等。由于Excel Link的函数名对字母的大小写不作区分,这与MATLAB的标准函数命名规则不同,所以本书在描述这些函数时,并没有严格规范其大小写。

Excel Link函数按照功能可以分为以下两类:链接管理函数和数据管理函数。Excel Link函数的名称和功能见表1-20。

978-7-111-59850-3-Chapter01-72.jpg

图1-34 手动退出Spreadsheet Link和MATLAB

1-20 ExcelLink函数的名称和功能

978-7-111-59850-3-Chapter01-73.jpg

4.ExcelLink应用实例

在应用Spreadsheet Link时,主要是实现Excel数据的读入、MATLAB的数据处理和显示,以及如何在Excel显示处理结果。下面通过一个实例来进行具体说明。

【例1-11】一个Spreadsheet Link应用实例。

本例采用数据表执行方式运行,同时使用了回归分析和曲线拟合两种方式,利用Excel管理和显示数据,Excel Link函数把Excel中的数据复制到MATLAB中执行,宏命令执行模式再将执行结果返回到Excel中。该实例ExliSample.xls位于MATLAB安装路径下的\toolbox\excel2003link子目录中。

启动Excel、Spreadsheet Link和MATLAB,打开示例文件ExliSample.xls。

单击ExliSample.xls中的“Sheet1”选项卡,可以看到Excel数据表中包含一个名为DATA的数据区A4:C28,如图1-35所示。

该数据区包含了本例中所使用的数据集,具体操作步骤如下:

1)选中Sheet1中的E5单元格,按<F2>键,然后按<Enter>键执行Excel Link函数MLPutMatrix("data",DATA),将DATA复制到MATLAB中。已知DATA中包含3个变量的25次观测值,并且这些值之间线性相关。

978-7-111-59850-3-Chapter01-74.jpg

图1-35 ExliSample.xls中的Sheet1数据页

2)选中E8单元格,在Excel中输入如下语句,E9和E10单元格的操作和E8单元格的操作相同。

MLEvalString("y=data(:3)")

MLEvalString("e=ones(length(data),1)")

MLEvalString("A=[e data(:,1:2)]")

其中,变量y用来存储第三列数据,e为单位向量,变量A的第一列为单位向量,第二列为原data的第一列,第三列为原data的第二列。

这些Excel Link函数实现对回归目标数据的设置,让MATLAB以第1列和第2列的数据对应的变量为自变量,以第3列数据对应的变量为应变量进行回归。

3)运行E13中的函数命令,输入语句如下。

MLEvalString("beta=A\y")

使用MATLAB的“\”操作符求解线性方程A∗beta=y回归系数。

4)运行E16中的函数命令,输入语句如下。

MLEvalString("fit=A∗beta")

使用MATLAB矩阵-向量乘法生成回归结果(fit)。

5)运行E19、E20、E21中的函数命令,输入语句如下。

MLEvalString("[y,k]=sort(y)")

MLEvalString("fit=fit(k)")

MLEvalString("n=fsize(data,1)")

上述语句将原始数据与fit进行比较,将数据按升序进行排列,然后拟合,并创建一个表示观测数据的标量。

6)运行E24、E25中的函数命令,输入语句如下。

MLEvalString("[p,S]=ployfit(1:n,y,5)")

MLEvalString("newfit=ployval(p,1:n,S)")

上述语句用于拟合多项式,ployfit函数生成一个5阶多项式,并计算每个数据点上多项式的结果,确定拟合精度(newfit)。

7)运行E28中的函数命令,输入语句如下。

MLEvalString("plot(1:n,y,bo,1:n,fit,r,1:n,newfit,g);legend(datafitnewfit)")

利用MATLAB的plot函数画出的图形如图1-36所示。其中“○”代表原始数据data,“978-7-111-59850-3-Chapter01-75.jpg 978-7-111-59850-3-Chapter01-76.jpg ”代表回归结果fit,“——”代表多项式拟合结果newfit。

比较图1-36中的data、fit和newfit三条曲线,可以发现这些数据具有很强的相关性,不是线性独立的,回归分析结果和原始数据并不是十分吻合,而5阶多项式拟合则显示了更加精确的数学模型。

5.使用ExcelLink的注意事项

1)Excel Link函数执行的是一个特定的操作,而Excel函数返回的是一个确定的数值,所以Excel Link函数和Excel下的操作会有不同的结果。

978-7-111-59850-3-Chapter01-77.jpg

图1-36 利用MATLAB的plot函数画出的图形

2)Excel的工作表通常以“+”或者“=”为起始标记,如=MLPutMatrix("a",C13)。

3)Excel Link函数中的变量有以下两种定义方式:第一种为直接定义,即将变量用""标记,如MLGetMatrix("rainbow"),函数中不加""则被视为间接变量。

4)Excel表单的执行语句一般加等号,如“=MLGetMatrix("b","C9:L10")”,并且函数的参数用圆括号括起来。在宏中,函数名和第一个参数之间隔一个空格,不能使用圆括号。

5)在Excel Link函数命令执行的过程中,其所在的工作单元将一直显示函数命令的内容,直到函数命令执行结束后,其所在的数据单元将被赋值为0。

6)当在Excel中创建新的函数命令时,在电子表格中直接输入函数即可,不要使用Excel的函数向导,否则会产生不可预知的结果。

7)Excel Link只能处理MATLAB二维的数值数组和一维的字符数组(字符串)以及二维的细胞数组,而不能操作MATLAB的多维数组和结构体。

1.5 本章小结

本章首先介绍了MATLAB的应用领域,MATLAB的安装与激活,MATLAB通用命令及应用窗口;然后对MATLAB数学建模方法和步骤等进行了简要的介绍,对MATLAB数学建模基础函数及应用进行了相应的讲解。通过本章的学习,用户将对MATLAB及建模与仿真有一个大致的了解。

1.6 习题

1)MATLAB的突出特点有哪些?

2)MATLAB主操作界面由哪几部分组成?

3)简述MATLAB常用命令“clc”和“clear”的区别。

4)如何启动M文件编辑/调试器?

5)简述数学建模的步骤。

6)如果某文件不存在,则用函数fopen按只读方式打开文件的输入语句和输出结果分别是什么?

7)Notebook如何创建并运行输入cell?输入cell和并行输入cell有什么区别?

8)Excel Link中MATLABinit和matlabinit有什么区别?为什么?