Matlab语言编程(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-15 19:57:31

点击下载

作者:马寨璞

出版社:电子工业出版社

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

Matlab语言编程

Matlab语言编程试读:

前言

MATLAB是当前最常用的一种编程语言,它既可进行面向过程编程,以实现某个具体的功能(如绘图等),也可以进行面向对象编程,以加快大型软件的开发与实现。当前,涉及MATLAB各种应用的图书层出不穷:有针对MATLAB数值分析的、有使用MATLAB进行图像处理的,各类指南、宝典、入门、视频教程等林林总总,不一而足。这些著作各有所长,值得借鉴,在此基础上,我们试着写这样一本MATLAB的目的是,试图克服其中的一些不足。(1)规范性问题

编程,除了要编写一段代码实现必须完成的基本任务(如计算、绘图、模拟等)之外,还要搞好辅助的任务,所谓辅助任务,就是对代码进行各种规范性处理。例如,对于函数的讲解,许多著作都讲述了编写函数的过程,也给出了具体地实现,但是很少有专门就代码的规范性进行讨论。我们认为,做好外围辅助(编写帮助说明文件等)与实现代码的基本功能同等重要,因此我们专门讨论了函数文件的规范性书写,要求在编写完整的函数时,都要给出规范化的解释说明,这种格式贯穿全书,以多次重复加深读者的印象。对于面向对象中类的定义,也须进行规范化处理,关于规范性更详细的说明,读者可阅读本书中关于函数和类等章节中的相关内容。(2)缺乏人文情怀

一提到编程,许多人都会认为是理工类的教材或著作,无须考虑它的文学性。然而,在当前社会发展与工作中,要求人员具有综合素质、能全面发展,而不仅仅是“理工男”。我们认为,人文社交知识也是一种能力,文学修养有助于提高理工学生自身的素质,即使是面向理工科学生的编程教材,也有必要考虑其文学艺术性。例如,在讲授处理字符串的命令时,如果使用一段毫无意义的字符串作为例子(比如abcdefg qwertyu ahuehixn),虽然也能讲述清楚命令的使用,但肯定不如使用有积极意义的格言警句(比如Everything is good in its season.万物逢时皆美好)作为示例内容更让人赏心悦目。因此,在本书中,凡是涉及字符串的学习内容,都会尽可能选择一些读来朗朗上口的名言、对联、诗句、古文等作为例句,让读者在MATLAB的学习中品味文学,感受人文情怀。(3)探索性讲解

同一个知识点,可以采用不同的方式进行讲解。既可以采取居高临下、平白直叙的方式,直接告诉读者是什么,也可以通过一个探索的过程,让作者与读者站在同一个高度,一起去挖掘出这个知识点。这两种不同的教学方式,会给读者留下不同的印象。多数MATLAB的教科书中,都是直接告诉读者是什么,缺少了探索、参与的过程。因此,本书在解释知识点时,尽可能地采用探索式的讲解方式(略口语化),让作者和读者一起,在挖掘知识点的过程中,逐渐加深理解,达到掌握。因为知其然,总不如知其所以然更让人印象深刻,参与挖掘知识点,总比旁观更有体验感。当前的年轻读者,更注重体验与参与,本书在这个方面也做了一点有益的探索。

之所以要编写本书,除了上述的几点之外,还因为当前MATLAB编程的各种教材中,许多命令并未给出详细的使用说明。也许有读者认为查看MATLAB的帮助文件即可,但是我更倾向于这样的观点,即每学习一个函数命令,就要完整地学习它的各种使用方法。本书试图通过多个常用函数这种详细地学习过程,让读者完整掌握其基本使用方法,还借助这种学习,养成一个习惯,即全面掌握每个知识点。因此,本书在介绍每个函数时,都会不厌其详地介绍其具体使用。

记起在2000年读博士期间的一段编程经历,因为不太熟悉,一段长约500行的嵌入代码(其他语言编写),无论如何调试,都无法得到正确的结果;因为在调试时,逻辑上检查不出任何问题,语法上也没有错误,10余天没有任何进展,即便是多次重写代码,也无法达到目的。最后,只好逐个字符的验证,才发现是最后的一个标点符号导致了逻辑改变。我至今仍然记得修改完那段代码后,自责与反省让人彻夜难眠,一是自责自己没有完整掌握那种语言详细的使用方法,二是反省自己在以后的工作中要仔细认真。细想起来,这也是写这本书时,对每个函数进行详解的另一个原因吧。

在本书编写过程中,河北大学生命科学学院任国栋教授多次关心编写进度,并给予许多鼓励与帮助。电子工业出版社的编辑对本书的出版付出了辛勤的工作,对于他们的支持与帮助,表示衷心的感谢。本书的出版,还得到了“本科教学工程专业综合改革试点专项资金”的支持,在此一并表示深深的感谢。

自2015年9月开始,近一年的时间,每日兢兢业业,力图使内容完美无缺,但我知道,由于本人的水平有限,其中错误在所难免,敬请读者批评指正。马寨璞2016年9月于河北大学1 MATLAB的概况

任何一种编程语言,都有其历史渊源及发展变化过程,MATLAB也是如此。在学习MATLAB的具体应用之前,对它的概况进行了解,有助于读者从整体上把握MATLAB的应用方法与使用范围。本章,我们将对MATLAB的主要属性特征进行介绍,包括它的界面窗口、变量与表达式的定义与书写、日志的使用、内存空间、脚本编辑、帮助的使用等,掌握了这些基本操作,有助于读者主动性地学习,提高学习效率。1 MATLAB的概况1.1 MATLAB简介1.1.1 MATLAB的历史1.1.2 版本1.1.3 MATLAB的特点1.2 MATLAB的主要界面1.2.1 菜单工具栏1.2.2 窗口1.3 命令窗口及操作1.3.1 MATLAB的简单使用1.3.2 MATLAB数值的显示1.3.3 MATLAB中的标点符号1.3.4 命令窗口的常用控制1.4 数值、变量和表达式1.4.1 数值的表达1.4.2 MATLAB的默认值1.4.3 变量的命名1.4.4 复数1.4.5 运算符1.5 日志命令与历史命令窗口1.5.1 diary1.5.2 历史命令1.6 当前目录窗口1.6.1 概况1.6.2 设置用户目录和当前目录1.7 MATLAB的工作空间1.7.1 工作空间中的变量1.7.2 数据应用分析1.7.3 常用的工作空间管理命令1.8 M脚本与M函数编辑器1.8.1 File1.8.2 Navigate1.8.3 Edit1.8.4 Breakpoints1.8.5 Run1.9 帮助文件的使用1.9.1 帮助命令1.9.2 帮助浏览器1.9.3 MathWorks官方网站1.1 MATLAB简介1.1.1 MATLAB的历史

人们常说,科学发展源于观察与生产实践,MATLAB的产生,也是如此。在20世纪70年代中期,科学计算还是以Fortran语言为主,Eispack主要用于求解矩阵的特征值,Linpack则是解线性方程的程序库。在当时,它们代表矩阵运算的最高水平。

20世纪70年代后期,美国New Mexico大学计算机系系主任Cleve Moler在给学生讲授线性代数课程时,想让学生使用Eispack和Linpack程序库,但他发现,学生们编写Fortran接口程序很费时间,于是便自己动手为学生编写了这两个程序库的接口程序。这个接口程序便是今天MATLAB的前身,之所以取名为MATLAB,是因为该名取自矩阵(Matrix)和实验室(Laboratory)两个英文单词的前三个字母的组合。

在之后的多年里,MATLAB作为免费的教学辅助软件,在多所大学广为流传,直到1983年春天,Cleve Moler到Stanford大学讲学时,MATLAB的方便易用等特点吸引了工程师John Little。John Little敏锐地觉察到MATLAB在工程领域的广阔前景,于是他和Cleve Moler、Sieve Bangert一起,开发了第二代专业版。这一代的MATLAB语言用C语言开发,因此,MATLAB的许多语法,都能找到C语言的影子,比如在C语言中广泛使用的printf函数,就有MATLAB的fprintf等与之类似,这一代的MATLAB还具备了数值计算和数据图示化的功能。1984年,MathWorks公司成立,正式把MATLAB推向市场。

在之后的发展中,MathWorks公司顺应潮流,在数值计算和图示能力的基础上,又开拓了符号计算、文字处理、可视化建模和实时控制能力。时至今日,经过MathWorks公司的不断完善,MATLAB已经发展成为适合多学科、多种工作平台的功能强劲的大型软件。

目前,在高等院校,MATLAB已经成为线性代数、自动控制理论、数理统计、数字信号处理、时间序列分析、动态系统仿真等课程的基本教学工具;掌握MATLAB也已成为当代大学生、硕士生、博士生的一项基本技能。此外,MATLAB在设计研究单位和工业部门也已广泛应用于科学研究和各种具体问题的解决。1.1.2 版本

自正式推出MATLAB产品以来,MATLAB经历了多个版本的变迁,从MATLAB4.2c开始,每个版本增加了一个建造编号,例如MATLAB7.6的建造标号是R2008a,说明MATLAB7.6与MATLAB2008a是等同的。对于建造编号,现在每年出两个版本,例如2014a和2014b。一般来说,a是测试版,b是正式版。从出版时间上看,a是前半年出品,b是后半年出品。

2015年3月5日,MathWorks公司发布了MATLAB2015a版,其中的许多新功能都是在R2014b版的功能基础上升级而来的。2015a全面提升了MATLAB图形处理系统,包括更新的界面和许多增强功能以及新功能,支持用户利用大数据功能分析大数据,然后再扩展至Hadoop Mapreduce。对于日期和时间数据类型,MATLAB使用新的数据类型,实现日期与时间的高效计算、比较以及各种形式显示等。MATLAB采用Git和Subversion源控制管理代码,允许用户自定义工具箱,将其封装成一个独立的可安装文件。在2015年9月15日,推出MATLAB 2015b。1.1.3 MATLAB的特点

MATLAB可用于算法开发、数据可视化、数据分析以及数值计算等,既可以作为高级计算语言进行编程,也可以在交互环境下使用。和传统的编程语言(如C、C++和Fortran)相比,使用MATLAB编程可以更快地解决技术计算问题。例如,同样是计算求和1到100,使用不同的语言,其代码编码量也不相同:#C 语言求和1到100 # include stdio.h void main() { int sum=0; int iloop; for(iLoop=1; iLoop<=100; iLoop++) sum+=iLoop; printf(“Sum=%d\n”, sum); } % MATLAB实现相同的功能 A=1:100; SumA=sum(A,2); fprintf(‘Sum=%d\n', SumA);

MATLAB提供了非常丰富的工具箱,利用这些工具箱,可解决某应用领域内特定类型的问题,如信号与图像处理工具箱、Simulink仿真工具箱、计算生物学分析工具箱等,我们会在后续的章节中陆续学习。

MATLAB提供了很多用于记录和分享工作成果的功能,用户可以将MATLAB代码与其他语言和应用程序集成,来分发成熟的MATLAB算法和应用。1.1.3.1 科研计算快速实现

MATLAB对矩阵的计算非常方便,将矩阵按照数值对待,就可简便的得到矩阵的乘积等,以遗传研究中的豌豆杂交为例,多次杂交之后结果,可通过马尔可夫模型计算得到。

在孟德尔的豌豆杂交实验中,考虑豌豆种子的圆形与皱形这一对等位基因,圆形是显性基因,以A表示,皱形是隐性基因,以a表示。两种基因组成三种基因型,即纯显性AA,杂交Aa,纯隐性aa。这三种基因型是杂交后可能形成的三种状态,构成遗传杂交实验随机过程的状态空间U={AA, Aa, aa},如果安排的杂交是以基因型Aa基因型与之进行杂交,则在杂交实验中,按照基因型AA, Aa, aa,分配的比例分别为x, x, x。显然,x, x, x具有随机性,且存在x+ x+ 12312312x=1。它们构成向量X=(x, , x x ),经过杂交实验,子一代的基因3123分配可列表计算得到:它实际上是由原分配比率向量与转移矩阵的乘积而获得,即继续杂交下去,则得到第2,3, …, n代的结果,观察最终的结果。以M脚本编写,会有A=[0.5,0.5,0;0.25,0.5,0.25;0,0.5,0.5]; OnOff=1; n=1; B=A; while OnOff n=n+1; T=A^n; D=abs(T-B); if sum(D(:))<eps OnOff=0; else B=T; end end n, T运行上述代码,结果如下。可知,多次杂交以后,最终遗传会稳定在T。>> Untitled n = 55 T= 0.2500 0.5000 0.2500 0.2500 0.5000 0.2500 0.2500 0.5000 0.25001.1.3.2 数据可视化

科研实践中,研究得到的数据常常需要以图表的形式展现出来,MATLAB为数据的可视化提供了方便的工具。下面是利用contour实现的等值线图(图1-1)。图1-1 函数contour实现的等值线图Z = peaks(100); zmin = floor(min(Z(:))); zmax = ceil(max(Z(:))); zinc = (zmax - zmin) / 40; zlevs = zmin:zinc:zmax; figure; contour(Z, zlevs)1.1.3.3 方便的数据分析

MATLAB在数据分析方面,有许多已经成形的函数,它们可以用来直接进行数据处理,例如主成分分析是高级统计分析中非常重要的一个内容,它广泛应用于数据分析的方方面面。从方法论的角度来讲,主成分分析是“抓住主要矛盾”或者“抓住矛盾的主要方面”的具体数学实现,因此,凡是数据中涉及主要与次要方面的确定、权重大小的评定等,主成分分析都可适用。MATLAB为主成分分析提供的成形的函数为pca,借助该函数,可直接分析数据。例如,>> load hald >> coeff = pca(ingredients) coeff = -0.0678 -0.6460 0.5673 0.5062 -0.6785 -0.0200 -0.5440 0.4933 0.0290 0.7553 0.4036 0.5156 0.7309 -0.1085 -0.4684 0.4844当然,用户也可以自己编写代码,以便于输出必要的计算信息。1.1.3.4 丰富的工具箱

MATLAB有丰富的工具箱可供用户调用,这些工具箱分属于三个不同的产品家族,分别是MATLAB产品家族、Simulink产品家族和Polyspace产品家族。MATLAB产品家族包括并行计算、数学、统计与优化、控制、金融等11个方向分支;Simulink产品家族包括模拟、验证、通信等8个方向分支;Polyspace产品家族属于代码调试维护等方面。下面是MATLAB 2015a关于各种工具箱的一个名录列表,按照家族分类,用户可根据自己的专业方向,选择安装适合的工具箱。

1.1.3.4.1 MATLAB产品家族

1)并行计算

• Parallel Computing Toolbox

• MATLAB Distributed Computing Server

2)数学、统计与优化

• Symbolic Math Toolbox

• Partial Differential Equation Toolbox

• Statistics and Machine Learning Toolbox

• Curve Fitting Toolbox

• Optimization Toolbox

• Global Optimization Toolbox

• Neural Network Toolbox

• Model-Based Calibration Toolbox

3)控制系统

• Control System Toolbox

• System Identification Toolbox

• Fuzzy Logic Toolbox

• Robust Control Toolbox

• Model Predictive Control Toolbox

• Aerospace Toolbox

• Robotics System Toolbox

4)信号处理与通信

• Signal Processing Toolbox

• DSP System Toolbox

• Communications System Toolbox

• Wavelet Toolbox

• RF Toolbox

• Antenna Toolbox

• Phased Array System Toolbox

• LTE System Toolbox

5)图像处理与计算机视觉

• Image Processing Toolbox

• Computer Vision System Toolbox

• Vision HDL Toolbox

• Image Acquisition Toolbox

• Mapping Toolbox

6)测试&测量

• Data Acquisition Toolbox

• Instrument Control Toolbox

• Image Acquisition Toolbox

• OPC Toolbox

• Vehicle Network Toolbox

7)计算金融

• Financial Toolbox

• Econometrics Toolbox

• Datafeed Toolbox

• Database Toolbox

• Spreadsheet Link EX (for Microsoft Excel)

• Financial Instruments Toolbox

• Trading Toolbox

8)计算生物

• Bioinformatics Toolbox

• SimBiology

9)代码生成和验证

• MATLAB Coder

• HDL Coder

• Vision HDL Toolbox

• HDL Verifier

• Filter Design HDL Coder

• Fixed-Point Designer

10)应用发布

• MATLAB Compiler

• MATLAB Compiler SDK

• Spreadsheet Link EX (for Microsoft Excel)

• MATLAB Production Server

11)数据库访问与报告

• Database Toolbox

• MATLAB Report Generator

1.1.3.4.2 Simulink产品家族

1)基于事件的建模

• Stateflow

• SimEvents

2)物理建模

• Simscape

• SimMechanics

• SimDriveline

• SimHydraulics

• SimRF

• SimElectronics

• SimPowerSystems

3)控制系统

• Simulink Control Design

• Simulink Design Optimization

• Aerospace Blockset

• Robotics System Toolbox

4)信号处理与通信

• DSP System Toolbox

• Communications System Toolbox

• Phased Array System Toolbox

• SimRF

• Computer Vision System Toolbox

5)代码生成

• Simulink Coder

• Embedded Coder

• HDL Coder

• Vision HDL Toolbox

• Simulink PLC Coder

• Fixed-Point Designer

• DO Qualification Kit (for DO-178)

• IEC Certification Kit (for ISO 26262 and IEC 61508)

6)实时仿真与测试

• Simulink Real-Time

• Simulink Desktop Real-Time

7)验证、确认和测试

• Simulink Verification and Validation

• Simulink Design Verifier

• Simulink Test

• Simulink Code Inspector

• HDL Verifier

• Polyspace Bug Finder

• Polyspace Code Prover

8)仿真绘图与报告

• Simulink 3D Animation

• Gauges Blockset

• Simulink Report Generator

1.1.3.4.3 Polyspace产品家族

• Polyspace Bug Finder

• Polyspace Code Prover

• DO Qualification Kit (for DO-178)

• IEC Certification Kit (for ISO 26262 and IEC 61508)1.2 MATLAB的主要界面

图1-2给出了MATLAB 2015a(以下简称MATLAB,不再含版本信息)初次运行时的界面。从这里可以看到,MATLAB主要包括三个部分,一是顶部的菜单工具栏部分,这部分主要包括三个子页,分别是HOME子页、PLOTS子页和APPS子页;二是左侧的文件快捷操作部分,这部分又被划分成三个子区,分别对应着当前文件夹中文件显示、选定文件的内容预览和MATLAB工作空间(内存)中的内容;三是命令窗口部分,也是我们日常使用MATLAB时主要的工作区。图1-2 MATLAB 2015a运行初始界面1.2.1 菜单工具栏

HOME子页上包含6项设置,这些设置分别为FILE文件管理项、VARIABLE变量管理项、CODE代码段管理项、SIMULINK动态模拟管理项、ENVIROMENT运行环境设置项、RESOURCES资源管理项。这些项目设置与MATLAB总体运行有关。我们在后续的课程中会逐渐展开讲授这些设置,在初始学习MATLAB时,不必全部清楚各项功能。除了图1-3中看到的这些选项,每个下拉三角按钮都会提供更为详尽的各项子项功能。图1-3 HOME子页包含的设置

PLOTS子页上主要提供了绘图的基础,即各种模板,方便将数据进行可视化处理,在这个子页中,可直接调用各种模板,如曲线图、柱状图、饼图、直方图、等高线图、三维曲面图、散点图等,如图1-4所示,点开右侧的下拉菜单,会提供更多的绘图选项,如图1-5所示。图1-4 PLOTS子页的各项模板图1-5 PLOTS子页中其他绘图模板选项

APPS子页上主要包括两部分,一部分是和各种应用相关的文件部分,包括APP应用文件的获取、安装以及打包(图1-6);另一部分则是各种常见应用工具箱的使用,包括曲线拟合、优化、图像获取、系统辨识、生物模拟等控件工具。点击右侧的三角下拉按钮,会有更多的辅助工具箱出现(图1-7)。图1-6 APPS子页上的工具箱应用部件图1-7 MATLAB各种应用工具箱1.2.2 窗口

为了操作方便与清晰地表达各项结果,MATLAB对交互环境设置采取了多种布置方式,以不同的窗口来实现不同的设置或表达不同的内容。在HOME主页的Layout上,给出了各种不同的布置,其下拉菜单如图1-8所示。图1-8 Layout菜单选项

在MATLAB给定的Layout布置中,第一项是默认设置(Default),也是图1-9中给出的样式,即窗口显示部分分为左右两部分,左侧是当前文件夹和工作空间部分,右侧是命令窗口部分。左侧的当前文件夹(Current Folder)是指当前MATLAB工作路径,这部分又分成两部分,上部是当前文件夹中的文件与文件夹的列表,下侧是文件的细节展示部分,在当前文件夹中,可以像在操作系统下那样创建、编辑、删除新的文件、文件夹等。左侧最下部是工作空间的窗口,我们可以在其中进行变量的创建、编辑、保存、删除等操作。占据屏幕大部分的是命令窗口部分,在这里,用户可以进行交互式的计算、操作等,也可以从这里观察各种输出结果。图1-9 Layout中选择Default时的窗口布置情况

当用户在Layout中选择Three Column布置时,则和默认设置稍微有点差别,这种布置下,左侧只剩下当前文件夹窗户,中间是命令窗口,右侧是工作空间,如图1-10所示。除了窗口布置的位置有所差别外,其他没什么实质性差异。图1-10 Layout中选择Three Column时的窗口布置情况

用户还可以自己定义自己的Layout布置方式,并保存在菜单中。例如,将命令窗口布置在屏幕左侧,将代码编辑窗口布置在右侧,关闭其他窗口,形成两窗口并列形式。布置完毕,选择Layout中的Save Layout,在弹出的交互窗口中(图1-11),填上本次布置的名字,则可以保存当前的布置到Layout菜单中(图1-12),这样在以后的使用中,可按照自己的习惯定制显示窗口。图1-11 命名自定义窗口布置图1-12 已保存好的自定义布置

除了上述的这些窗口外,还有其他几种窗口,在Layout的下拉菜单中,选择“Show”下部的某个窗口名称,如Command History历史命令窗口(图1-13),利用其右边的三角展开,选择Docked、Popup或者Closed等,使得窗口可驻停、弹出或关闭。图1-14显示命令窗口和历史命令窗口并列排列。图1-13 打开历史命令窗口布置图1-14 历史命令窗口与命令窗口并列1.3 命令窗口及操作

打开MATLAB,最先看到的较大空白窗口就是MATLAB的命令窗口。MATLAB的命令窗口也是MATLAB与用户进行交流的主要窗口之一,通过命令窗口,用户可以输入指令,可以观察运行结果,做到与程序进行交互。

对于MATLAB命令窗口,点击命令窗口标题栏右侧的下拉三角形,会弹出下拉菜单,菜单分四个部分,一是清除窗口命令,二是编辑中常用的选取、查找等,三是命令窗口内容输出格式的定制,四是命令窗口的停靠与最大最小化,如图1-15所示,一般情况下,采用默认形式即可。图1-15 命令窗口的操作1.3.1 MATLAB的简单使用

MATLAB的基本使用非常简单,就如同在白纸上进行演算一样,在命令窗口中,MATLAB的命令提示符是双大于号“>>”,用户可以在这个提示符下输入想运行的命令或者计算式等,输入完毕后,回车立即执行,即刻出现结果。例如,要计算1+2×-3 4/5,只须按照我们日常的书写习惯,输入到命令提示符后即可,如图1-16所示。图1-16 在命令行窗口进行计算

在MATLAB中,日常使用的运算符号,如加(+)减(-)乘(*)除(/)等,仍然符合我们的使用习惯,运算的先后顺序也是按照日常默认的习惯进行。输出的结果,默认的情况下,以ans表达,这里的ans是英文单词answer的简写,即答案。运行完毕,MATLAB默认回到命令提示符状态。

在MATLAB中,数据默认以矩阵的形式存储,MATLAB以方括号[]表达矩阵,所有输入的数据都放在该括号内部。在命令窗口中直接输入矩阵数据时,各元素之间的分割,可以是逗号,也可以是空格,以二者分隔的数据,在矩阵中都按照同一行数据对待,在实践中,尤其是当把运行结果拷贝到其他文本编辑器中进行编辑时,逗号分隔比空格分隔更具可读性,出错的概率更少一些。矩阵中不同行之间的分割以分号或者回车键Enter分割,但在命令窗口中,笔者建议使用分号分割,虽然Enter键回车也可以分割各行数据,但有时候和运行回车Enter混在一起,可读性差。对比如下的输入,可知使用逗号与分号分割元素与行,更显可读性。>> a=[1,2,3;4,5,6;7,8,9] a= 1 2 3 4 5 6 7 8 9 >> b=[1,2,3 4 5 6 7 ,8 9] b= 1 2 3 4 5 6 7 8 9

需要特别注意的是,MATLAB不认识中文标点,所有的标点,均以英文状态为准,否则会报错。例如,将上述的输入在中文状态下重做一遍,会看到:凡是使用中文标点的地方,都以红色字体醒目的显示,告诉用户“红灯禁行”(图1-17)。图1-17 MATLAB不支持中文标点

在MATLAB中,数据的保存是默认的,矩阵的维数根据输入时的行列分割自动确定。一般来说,MATLAB对矩阵的大小限制,因版本和实际电脑内存配置而不同,可通过memory命令查阅配置。另外,MATLAB的部分函数还是有维数限制的。例如,对于零矩阵命令zeros,当使用zeros(100000)命令试图创建10万维矩阵时,MATLAB报错认为超限,而当zeros(25000)时,则认为内存不足。>> zeros(100000); 超出了程序允许的最大变量值。 >> zeros(50000) 错误使用 zeros 超出了程序允许的最大变量值。 >> zeros(25000) 错误使用 zeros 内存不足。请键入 HELP MEMORY 查看选项。

在MATLAB中,创建的变量被保存在工作空间中备用,直到用户使用命令clear把它清除掉,或者关闭MATLAB命令窗口后才释放其占据的空间。MATLAB对字母的大小写敏感,大小写不同的字母,被认为是不同变量,比如ABC、abc、Abc、aBc、ABc等都是不同的变量,万不可认为它们是同一个“人”。>> ABC=1, abc=2, Abc=3, aBc=4, ABc=5 ABC = 1 abc = 2 Abc = 3 aBc = 4 ABc = 5

MATLAB允许在同一行内输入多条命令,其长度没有限制。为此,笔者特意测试了在同一行内输入命令的条数,例如输入10000条命令,分别为a1=1, a2=2, …直到a10000=10000,经测试,仍然可行。但MATLAB在命令窗口中输出的文本不允许超出命令行窗口显示的行长度,最多为25000个字符,多余的文本会截断。之所以测试这个长度,是想告诉读者,你如果想一行写到底,也是可以的,但很显然,这种代码的可读性将会感觉极差。因此,在适当时候,需要换一行书写,既错落有致,显得美观,又易阅读,方便查错。为了能在A4幅面打印输出,笔者建议在MATLAB中,设定5号字的情况下,每行最好不超过70个字符,多余的可使用MATLAB提供的续行符进行接续。

MATLAB中,续行命令是使用连续的三个或者三个以上的英文状态的点,即省略号,如下面的命令使用了3个点构成的续行符,可正确运行:>>1+2+3+4+... 5+6 ans =21

需要注意的是,续行符不能直接跟在数据后边,它必须跟在运算符的后边,否则在输入回车Enter,本想继续输入下一行的情况下,MATLAB会默认输入完毕,将你认为的ENTER回车换行看作执行代码的回车,这样会把续行符看作错误,实验如图1-18所示。图1-18 续行符的不当使用(1)

续行符,顾名思义,主要是执行“续”的功能,因此,续行符最好不要放在句首。对于放在句首的续行符,MATLAB会将该行当作注释行,不予执行,而是从其下一行的输入开始执行,因此这种情况MATLAB不会报错,但执行结果却不是我们所预期的。例如,>> ...+4+5+... 6+... 7 ans = 13 >>

实际上,对于续行符放在句首的情况,MATLAB编辑器还是给出警示的。例如,上述的输入,MATLAB会以不同颜色显示,表达其有潜在的问题,如图1-19所示。图1-19 续行符的不当使用(2)

续行符执行续行的命令,不能通过help帮助来查阅它的使用,当在命令窗口试图使用“help …”查阅其使用时,是得不到其帮助的。

和其他计算机语言类似,MATLAB也允许在代码中加上注释语句,MATLAB的注释语句以百分号%开头,默认设置以绿色表示注释:>> a=magic(5); % 5阶魔方矩阵1.3.2 MATLAB数值的显示

在MATLAB中,默认的情况下,MATLAB以4位小数点显示数据,这里要提醒读者,这里只是说显示为4位小数,不代表其计算精度是4位小数。实际上,显示4位小数是MATLAB按照默认的format short格式输出的,它从format short和format short e中选择最合适的显示形式。但从笔者多年使用来看,4位小数有时候显得啰唆,尤其是当数据的小数部分都是0时,更显得啰唆。为此,我们在后续的章节会编写合适的智能化数据输出函数。

format输出格式有多种格式,对于不同的格式,其显示也是各不相同。例如,对于π=3.141592653589793,我们逐一实验,得:>>format long % 双精度以15位小数显示数据,单精度以7位小数显示 >> pi ans = 3.141592653589793 >>format short % 以4位小数显示精度,数据大于1000时, >>pi % 以5位有效数字科学计数法显示,默认格式 ans = 3.1416 >>format short e % 以5位有效数字,使用科学记数法显示 >> pi ans = 3.1416e+00 >>format long e % 以15位有效数字,使用科学记数法显示 >> pi ans = 3.141592653589793e+00 >>format long g % 从format long 和 format long e中择优选择 >> pi ans = 3.14159265358979 >>format rat % 将数据显示为最接近的有理数 >> pi ans = 355/113 >>format hex % 以十六进制表示数据 >> pi ans = 400921fb54442d18 >>format bank % 以银行金融格式显示数据:元,角,分 >> pi ans = 3.14 >>format short eng % 工程计数格式,小数点后保留4位,指数部分保留3位 >> pi ans = 3.1416e+000 >>format long eng % 工程计数格式,小数点后有效保留15位,指数部分保留3位 >> pi ans = 3.14159265358979e+000

format还有其他几种形式的显示格式,如format +、format loose、format compact等,读者可通过help format,查阅其中的style获得帮助,不再一一介绍。提醒读者注意的是,所有设置的格式只是当前有效。1.3.3 MATLAB中的标点符号

在前文已经讲过续行符的使用,由此可以看出,MATLAB中的标点符号,具有非常重要的作用,它帮助运算符实现了功能的扩展,下面我们详细学习其他标点的使用。1.3.3.1 空格

和其他语言一样,空格在MATLAB里同样起到分隔的作用,在变量之间使用,使得变量分离开,在矩阵中使用,使得数据元素分隔开。例如,a=[2 3 4]1.3.3.2 逗号

逗号的主要作用是分隔,用在命令后边,表示该命令的输出结果要显示在屏幕上;用在数据之间,表达了元素的分隔;也是MATLAB函数文件的参数列表的分隔符。例如,a=[2,3,4] % 分隔矩阵中的元素 a=sin(pi/3), b=cos(pi/3); % 分隔命令,使其运行结果显示在屏幕上 plot(x, y, 'r-'); % 分隔函数的输入参数前已讲过,空格和逗号都具有分隔的作用,但从实践上看,还是建议读者尽可能使用明确能够“看得到”的逗号替代“透明”的空格为好。1.3.3.3 冒号

冒号在MATLAB用得较多,一是用来生成一维的数字,典型的用法如下:>> a=1:10 a=1 2 3 4 5 6 7 8 9 10在这种用法中,它表示“到”的含义,冒号前的数据是起始点,其后的数据是结束点,生成自起始点到结束点的有序数据。如本句命令即表达了,生成自1到10的数组,并赋值给变量a。顺便多讲一句,这种用法是a=1:1:10的简写,其默认的步长为1,更准确的格式是a=start:step:end例如,>> b=8:-2:-5 b=8 6 4 2 0 -2 -4

冒号的第二种用法是引用,它将被援引的全体数据进行转换,构成一个列向量。例如,>>b(:) % 引用前述行向量b的全部元素,形成列向量 ans = 8 6 4 2 0 -2 -4

对于多维数据,冒号则按照从左到右的顺序引用所有数据形成列向量。例如,>>c=magic(3) % 魔方矩阵 c= 8 1 6 3 5 7 4 9 2 >>c(:) % 按照列引用各个数据,自左向右引用各列 ans = 8 3 4 1 5 9 6 7 2

冒号在多维数据中,还可以表达某行或某列数据。例如,>>c(1, :) % 引用第一行的各列数据 ans=8 1 6 >>c(:,1) % 引用第一列的各行数据 ans = 8 3 41.3.3.4 分号

分号也是MATLAB中用得最多的符号,它主要有两个方面的应用:一个是分隔作用,另一个是隐藏作用。前文已经介绍过,分号可以用来分隔矩阵数据的各行,也可以分隔不同命令语句。例如,>>a=[1,2,3;4,5,6] % 分隔矩阵各行数据 a= 1 2 3 4 5 6 >>a=1; b=2 % 分隔两条命令语句

在命令语句后边使用的分号,将会使该命令运行的结果“隐藏”起来。例如,>>a=2; b=3; c=4 % 隐藏a和b的值 c = 4

需要明确的是,对于计算结果,分号可以隐藏其结果,但对于非计算结果,引号并不能隐藏其结果,如输出语句末尾的分号就不起作用。例如,>>disp('hello, world! '); % 输出语句不受分号隐藏限制 hello, world! >>fprintf('%s\n', 'Hello world! '); % 输出语句不受分号隐藏限制 Hello world!对于绘图plot等语句,也不能隐藏其结果。例如,>> x=-pi:0.01:pi; >>y=sin(x); >>plot(x, y, 'r-'); % 绘图语句不受分号隐藏限制1.3.3.5 百分号

百分号主要用来表达注释的内容,以它为首的所有行,都被看作是注释文本,不参与执行。1.3.3.6 点号

英文点号在MATLAB中主要起两个作用,一个是作为数据中的小数点,另一个是和传统的运算符一起,构成新的运算格式,和乘号*一起构成点乘(.*),和除号一起构成点除(./)等。例如,>> a=[1,2,3;4,5,6;7,8,9] a= 1 2 3 4 5 6 7 8 9 >> b=[2,3,1;5,6,2;0,0,3] b= 2 3 1 5 6 2 0 0 3 >>a.*b % 点乘实现对应元素的乘法 ans = 2 6 3 20 30 12 0 0 271.3.3.7 单引号

在MATLAB中,单引号用来表达字符串。例如,myStr='Hello, MATLAB, I"m coming! ' % 转义

需要提醒的是,在MATLAB中,不使用双引号。1.3.3.8 圆括号

圆括号一是用来引用数组的下标,二是用来表达函数的参数列表。例如,a=[0.8147, 0.9134, 0.2785; 0.9058, 0.6324, 0.5469; 0.1270, 0.0975, 0.9575]; >>a(2,3) % 引用第2行第3列的数据 ans =0.5469 >> function PrinCompAnalz(TypeFlag, VarName) % 主成分分析函数的参数列表 % 主成分分析 Principal Component Analysis==>P C A.1.3.3.9 方括号

方括号[]主要用来表达输入的数据是矩阵的情形。例如,对于绘图命令plot来讲,可直接输入矩阵作为其参数。例如,plot([-10:0.1:10], sin([-10:0.1:10]), 'r-')

此外,方括号还可以当作字符串的连接器,将字符串逐一串起来。例如,>> str=['aaaa', 'bbbb', 'cccc'] str =aaaabbbbcccc

方括号在函数的使用过程中,可以用于界定返回参数的列表。例如,a =[ 17, 24, 1, 8, 15; 23, 5, 7, 14, 16; 4, 6, 13, 20, 22; 10, 12, 19, 21, 3; 11, 18, 25, 2, 9; ]; >>[row, col]=size(a) % 界定返回参数row和col row =5 col = 51.3.3.10 花括号

花括号{}主要用来表达cell数组的定义,在后续的章节我们将详细介绍。例如,>> b={'Hello', 'MATLAB world! ';2,4} b= 'Hello' 'MATLAB world! ' [ 2] [ 4] >> class(b) ans =cell1.3.3.11 句柄符

与其说@是标点,不如说是操作符更为恰当,它一方面可用来表达句柄,如函数的句柄、绘图图形句柄等;另一方面可用来表达对象,如目录等。例如,定义匿名函数nx,>>fxn=@(x, n)x^n % 定义 fxn = @(x, n)x^n1.3.4 命令窗口的常用控制

MATLAB为命令窗口提供了通用的操作指令,以方便用户对屏幕输出、内存变量等进行交互管理控制,常见的命令有cd、clf、clc、close、clear、dir、edit、exit、quit、mkdir、more、type等。1.3.4.1 cd

cd指令早在Windows系统之前的DOS操作系统中就是更换当前工作目录的命令,MATLAB中用它完成同样的工作。在默认的情况下,MATLAB的工作目录是用户安装MATLAB时所在磁盘分区中的X:\MATLAB\ MATLAB production server\ R2015a\...,这往往不是用户期冀的工作目录,通过在命令窗口使用cd命令,可转换到用户希望的工作目录。用户也可以自己设置好特定位置的文件夹作为自己的工作目录,每次启动MATLAB自动转换到该目录下。

cd的使用格式有3种,分别为

• cd

• cd(newFolder)

• oldFolder = cd(newFolder)

我们常用的是第2种,更换到新目录即可。第3种使用方法是cd命令在更换到新目录的同时,还会返回一个字符串,该字符串保存更换前的目录信息,这种使用方式多用于批量创建目录,并在目录中写入文件的情形,后续的章节中会详细介绍这种用法。>>cd % 第1种,不带参数的cd命令返回当前的工作目录 D:\ >>cd e: % 命令格式:将参数直接写在命令后边,不使用括号,也不使用单引号 >> cd E:\ >>cd('d:') % 命令格式:将字符串作为参数使用 >> cd D:\

需要说明一点,当我们想回到上一级目录时,使用“cd ..”即可。请注意,这里的“cd ..”,更明确的表达是“cd+空格+点点”,缺失了中间的空格,将会报错。1.3.4.2 dir

dir也是经典的DOS操作命令之一,用于列出指定目录下的文件以及子目录名称,其使用方式为

• dir

• dir name

• listing = dir(name)

第1种dir最为简单,直接列出当前工作目录下的所有文件与目录;第2种则列出与name描述的属性相同的文件或子目录,当name为文件夹时,则列出其文件与子目录;第3种则具有返回值,返回第2种得到的属性。listing包含的属性如表1-1所示。表1-1 Iisting属性列表属性名描述分类称字符数name文件或文件夹名称组字符数date修改日期标签组bytes文件大小,以字节为单位双精度isdir当name是文件夹时返回1,否则返回0逻辑型datenu将修改日期表达为序列日期,其值与系统环双精度m境相关

下面是笔者电脑上D:\MATLAB路径下的实验结果。>>dir % 使用第1种格式,列出所有文件与子目录 . DrawBiDstr.m DrawPdfAndTrib.m PrinCompAnalz.m TriAngStable.m >>dir T*.m % 列出以T开始的MATLAB文件 TestPause.m TriAngStable.m test.m >>dir d:\% 列出指定目录下的文件等 $RECYCLE.BIN FindComplexRoot.m Untitled4.m Folder.jpg printStar.m 工作记录44.docx 2015年工作计划 NewSelectSongs showHorzStar.m >>s=dir('test.m') % 列出指定文件的属性 s= name: 'test.m' date: '09-九月-2015 12:07:57' bytes: 6830 isdir: 0 datenum: 7.3622e+05

和dir类似的一条命令是what,它和dir的差别在于列出内容的多寡,what只用于显示出某目录下存在哪些MATLAB文件,若输入完整路径,可列出指定目录下的文件,而dir不仅仅局限于MATLAB文件,也列出其他类型文件。1.3.4.3 clf

clf用来清除当前的图形窗口,需要注意的是,它只是清除了句柄为非隐藏设置的图像对象。常见的使用格式有5种,分别为

• clf直接清除当前图形窗口。

• clf('reset')除图像的Position、Units、PaperPosition和PaperUnits属性外,均设置为默认值。

• clf(fig)清除由句柄fig指定的图形窗口。

• clf(fig, 'reset')同上。

• figure_handle = clf(...)%带返回句柄的形式,当图像的IntegerHandle设置为off时,返回句柄非常有用。

下面给出一个应用实例:figure; ezpolar('sin(2*t)*cos(2*t)*exp(1i*pi/6)'); clf

从clf的效果来讲,它清除掉图形窗口内的所有内容(图1-20),但并不是把图像整体清除,图像本身还存在,只留下没有窗口的空白图像初值状态。实际上,只剩下当我们使用figure命令时建立的空白图像。要清除掉整个图像,须要使用close指令,后续会给出介绍。图1-20 clf命令应用前后对比1.3.4.4 clc

clc命令用来清除屏幕上显示的内容,要强调一句,它只是“表面上”清理了屏幕,打扫干净了屏幕,所有的变量仍然存在。1.3.4.5 close

close命令用来清除指定的图像,其功能等价于close(gcf)。在MATLAB中,close有以下几种调用格式:

• close不带参数,等于close(gcf),指清除当前的图像。

• close(h)清除由句柄h指定的图像。

• close name删除带指定名称name的图像。

• close all清除所有句柄设置为非隐藏状态的图像。

• close all hidden清除所有图像,包括句柄设置为隐藏状态的图像。

• close all force强力删除所有图像,即使那些GUI属性中CloseRequestFcn设置为不关闭的窗口也一并删除。

• status = close(...)带返回参数的格式,当指定窗口被成功删除时返回1,否则返回0。试运行如下代码,图像(图1-21)3秒钟后被删除。

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

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载