610 likes | 795 Views
本章内容提要. 10.1 MATLAB 概述 10.2 MATLAB 语言基础 10.3 MATLAB 编程 10.4 小结. 10.1 MATLAB 概述. Matlab 是目前在国际上被广泛接受和使用的科学与工程计算软件,起源于美国墨西哥州立大学矩阵实验室,由美国 Mathworks 公司设计和开发。 虽然开发它的初衷是为了更简单、更快捷地解决矩阵运算,但 Matlab 现在的发展已经使其成为一种集数值运算、符号运算、数据可视化、图形界面设计、程序设计、仿真、图像处理、电路设计等多种功能于一体的集成化软件。. 10.1 MATLAB 概述.
E N D
本章内容提要 10.1 MATLAB概述 10.2 MATLAB语言基础 10.3 MATLAB编程 10.4 小结
10.1 MATLAB概述 • Matlab 是目前在国际上被广泛接受和使用的科学与工程计算软件,起源于美国墨西哥州立大学矩阵实验室,由美国Mathworks公司设计和开发。 • 虽然开发它的初衷是为了更简单、更快捷地解决矩阵运算,但Matlab 现在的发展已经使其成为一种集数值运算、符号运算、数据可视化、图形界面设计、程序设计、仿真、图像处理、电路设计等多种功能于一体的集成化软件。
10.1 MATLAB概述 • MABLAB的基本特点 • 运算符丰富 • 高级但简单的程序环境 • 程序限制不严格,程序设计自由度大 • 程序的可移植性很好 • Matlab的图形功能强大 • 语言简洁紧凑,使用方便灵活,库函数极其丰富 • 功能强大的工具箱 • 源程序的开放性 • Matlab有强大的自带的帮助手册
10.1 MATLAB概述 • MATLAB应用领域 Matlab和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。Matlab可以进行矩阵运算、绘制函数和数据图形、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
10.1 MATLAB概述 • MATLAB界面 Matlab本身包括多种窗口,其中最重要的窗口包括命令窗口(Command Window)、历史命令窗口(Command History)、当前文件夹窗口(Current Folder)、工作空间窗口(Workspace)、图形窗口(Figure)、图像窗口(Image)、帮助窗口(Help)等。
10.1 MATLAB概述 1.命令窗口 在命令窗口中输入语句,然后由Matlab 逐句解释执行并在命令窗口中给出结果。命令窗口可显示除图形以外的所有运算结果。 >> a=5; >>pi ans = 3.1416 >> b=3+8 b = 11 >>cos(0.3*pi) ans = 0.5878
10.1 MATLAB概述 上述操作中,如果在命令输入以“;”结束,则表示不显示结果,否则显示语句执行结果。 如果一行较长,则在行尾使用“…”表示续行。 >>a=5 a = 5 >> b=6 b = 6 >> a... +b ans = 11 在命令窗口中,可以通过按↑键向上回调以前输入的语句行,按↓键向下回调以前输入的语句行。
10.1 MATLAB概述 2. 历史窗口 历史窗口用于保存在命令窗口中运行过的命令,其作用之一是当需要重复执行某些语句时,可在历史窗口中双击语句或者使用复制/粘贴功能,使其重新在命令窗口中执行。 3. 当前窗口 当前窗口的管理方式与Windows 资源管理器管理类似,利用该窗口可组织、管理和使用所有Matlab 文件和非Matlab 文件,例如新建、复制、删除和重命名文件夹和文件。甚至还可用此窗口打开、编辑和运行M 程序文件以及载入MAT 数据文件等。 在当前窗口中,用户可以设定和管理自己的工作文件夹。
10.1 MATLAB概述 4. 工作空间窗口 工作空间窗口的主要目的是为了对 Matlab 中用到的变量进行观察、编辑、提取和保存。从该窗口中可以得到变量的名称、数据结构、字节数、变量的类型甚至变量的值等多项信息。 如执行以下语句后: >>a=5 a = 5 >> b=8 b = 8 >> pi ans = 3.1416
10.1 MATLAB概述 因为工作空间反映了内存的使用情况, 存放其中的Matlab 变量(或称数据)在退出Matlab 系统后会自动丢失。若想在以后利用这些数据,可在退出前用数据文件(.MAT 文件)将其保存在磁盘中。可以在命令窗口中输入: >> save 文件名 变量名1 变量名2 变量名3…参数 以后还需要使用这些数据的话,可输入下述命令来重新装载: >> load 文件名 变量名1 变量名2 变量名3…
10.1 MATLAB概述 • 基本命令 1. cd 改变工作目录 >> cd 工作目录名 2. quit 退出Matlab >> quit 3. help 帮助 >> help 4. date显示日期 >> date 5. demo访问演示程序 >> demo
10.1 MATLAB概述 6. format 设置输出格式 >> format short %数据长度为5位显示 >>format long %数据长度为16位显示 >>format short e %数据长度为5位的科学计数法显示 >>format long e %数据长度为16位的科学计数法显示 >>format rat %结果以分数形式显示 %表示注释行,一般用于程序文件中。 7. clc 清除命令窗口显示内容 >>clc 8. clf 清除图形窗口显示内容 >>clf
10.1 MATLAB概述 9. clear 清除内存 >>clear 10. input 根据提示信息输入 >>a=input(‘Please Input:’) %提示输入一个任意的非字符数到变量a >>b=input(‘Please Input:’, ‘s’) %提示输入一个字符串到变量b 11. fscanf、fprintf格式化输入与输出 >> fprintf(“%d\n”, a) %输出整数a >> fprintf(“%s\n”, b) %输出字符串b
10.2 MATLAB语言基础 • 基本概念 1.Matlab数据类型 • 数据是计算机的处理对象,在程序语言中可分为多种类型,在Matlab中,将数据分为:基本型、构造型和符号对象。 • 基本型包括:数值型和字符串型,其中数值型又包括整型和浮点型。 • 构造型包括:矩阵型、细胞型、结构型和类类型。 2. 常量、变量和标识符 • 常量是在运算过程中不可改变的量,如area=radius^2*3.14159,其中3.14159就是常量,而area、radius是可变量,称之为变量。再如Name= 'Jackson’,其中'J ackson’是字符串常量,而Name是变量。在编程语言中,变量通常用于保存中间结果或者计算结果。 • 在Matlab中,字符串常量采用一对半角单引号括起来,其中可以包括数字、字母和其他符号。 • 对于矩阵,如[1,2;3,4],可以认为是矩阵常量,这是一个2×2的矩阵,矩阵通常使用半角中括号“[”和“]”括起来。
10.2 MATLAB语言基础 除此之外,Matlab还定义了一些非常常用的常量,用固定的符号表示,也称为符号常量,如表10.1所示。 表10.1中的常量符号用于专门用途,因此在程序中应避免使用这些符号作为变量名。
10.2 MATLAB语言基础 对于变量,使用时需要为其命名,标识符就是用于对变量或者函数命名的。Matlab的标识符规则与C语言类似,同样区分大小写,必须是以字母开头,后续只能是字母、数字或下划线(_),不能包含空格和任何标点符号。同样不能使用Matlab保留字作为标识符名。 需要特别说明的是,与其他语言不同,变量在使用之前无须声明和定义,也无须指定数据类型。它的数据类型由其赋值的数据的类型所决定。如在命令窗口输入: >> test=1.59 则变量test是浮点类型,再接着输入: >>test=’hello’ 则变量test变成了字符串类型。 Matlab中包含一个特殊变量,就是ans,这个变量用于当计算结果未赋值给任何自定义的变量时,则自动赋予ans。
10.2 MATLAB语言基础 3. 标量、向量、矩阵 Matlab中,任何数据对象都是以标量、向量、矩阵和数组的形式存在,标量和向量均可理解为矩阵和数组。 • 矩阵:矩阵是二维数组,是一个数学概念,矩阵是用中括号括起来,以空格或逗号“,”分隔各元素,以分号“;”分隔各行的数据集合。 • 向量:向量是一维数组,是一个数学概念,向量是单行或单列矩阵。 • 标量:标量是一个独立量,可以理解为1×1矩阵,数值型标量都当作复数来处理。 在Matlab中,标量、向量、矩阵都可以作为一个独立的运算量进行处理。
10.2 MATLAB语言基础 4. 字符串 • 字符串是 Matlab 中另外一种形式的运算量。正如前面介绍的那样,在Matlab 中,字符串是用单引号来标示的,例如,S='I am a student.'。赋值号之后在单引号内的字符即是一个字符串,而S 是一个字符串变量,整个语句完成了将一个字符串常量赋值给字符串变量的操作。 • 在Matlab 中,字符串的存储是按其中字符逐个顺序单一存放的,且存放的是它们各自的ASCII 码,由此看来字符串实际可视为一个字符矩阵,字符串中每个字符则是这个矩阵的一个元素。 • 与数值型类似,可以定义字符串矩阵。
10.2 MATLAB语言基础 5. 运算符 (1) 算术运算符
10.2 MATLAB语言基础 (2) 关系运算符
10.2 MATLAB语言基础 (3) 逻辑运算符
10.2 MATLAB语言基础 (4) 运算符的优先级
10.2 MATLAB语言基础 6. 命令、表达式、函数和语句 使用常量、变量、运算符以及矩阵等即可组成Matlab中的表达式和语句,表达式和语句编程语言的基本单位,除此之外,还包括命令和函数。 (1) 命令 命令是在命令窗口执行的指令,前面介绍命令窗口时已经介绍了一些常用的命令,在Matlab 中,命令与函数都组织在函数库里,有一个专门的函数库general 就是用来存放通用命令的。一个命令也是一条语句。 (2) 函数 与C语言类似,Matlab也包含自定义函数和内置函数。通常对于复杂的程序,可以将其分解为多个简单函数,再按照调用规则调用。 函数最一般调用格式是: 变量=函数名(参数1,参数2,…)
10.2 MATLAB语言基础 (3) 表达式 表达式是由运算符、常量、变量(含标量、向量、矩阵等)、函数等多种运算对象组成的运算式,如 x*y/t+5&b-sin(x*pi) 就是一个表达式。当计算该表达式值时,需要考虑各种运算符的优先级。 (4) 语句 在Matlab 中,表达式本身即可视为一个语句。最典型的Matlab 语句是赋值语句,其一般的结构是: a=sin(x) 在C语言中,这也视为一个表达式来处理,其中“=”称为赋值运算符,在Matlab中亦可同样理解。
10.2 MATLAB语言基础 (7). 基本库函数 Matlab提供了非常多的内置函数,也称为库函数,用户只需要在使用中直接调用,但必须遵循调用规则,表3-7介绍了一些常用的数学库函数。
10.2 MATLAB语言基础 • 向量 1. 向量生成方法 在 Matlab 中,生成向量主要有3 种方式:直接输入法、冒号表达式法和函数法,分别介绍如下。 (1). 直接输入法 直接输入法是指在命令提示符>>之后直接输入一个向量,并使用一对半角中括号“[”和“]”括起来,其格式是: 向量名=[x1,x2,x3,…] 例如: >> x=[15, 20,3+2i]; >> y=[15;20;30];
10.2 MATLAB语言基础 (2) 冒号表达式法 冒号表达式a:step:b即可生成向量,其中a为向量的第一个元素,b为向量的最后一个元素的限定值,step 是变化步长,省略步长时系统默认为1。 例如: >>A=2:2:10; >>B=1:5; >>C=5:-1:1; >>D=10:2:4; 其中D不能生成向量(为什么?)
10.2 MATLAB语言基础 (3) 函数法 有两个函数可用来直接生成向量。一个实现线性等分——linspace( );另一个实现对数等分——logspace( )。 • 线性等分的通用格式为A=linspace(a,b ,n),其中a是向量的第一个元素,b是向量的最后一个元素,n 把a至b之间的闭区间分成n-1等分,共生成n个元素。省略n则默认生成100 个元素的向量。 • 对数等分的通用格式为A=logspace(a,b ,n),其中a是向量第一个元素的幂,即A(1)=10a;b 是向量最后元素的幂,即A(n)=10b,n 是向量的元素个数,省略n则默认生成50个元素的对数等分向量。 向量一旦生成,即可作为一个整体来引用,也可只引用向量元素,如A是一个向量,则A(m)就表示A的第m个元素,其中m不能超出向量元素的个数。向量和向量的元素可以当作普通变量来使用。
10.2 MATLAB语言基础 2. 向量的基本运算 向量的基本运算包括加法、减法、乘法和数乘,加法和减法运算是指对应位置的元素进行加或减,要求参与运算的两个向量具有相同的特征(同为行向量或同为列向量),且元素个数必须相等。 向量乘法遵循矩阵运算规则,如C=A*B,如果A为行向量,B为列向量,则结果为一个标量值,此时要求A和B的元素个数必须相同。当A为列向量,B为行向量时,生成的结果是一个矩阵。 向量数乘是指一个标量数与向量的乘积,结果为标量数分别与各元素相乘后得到的向量。
10.2 MATLAB语言基础 3. 向量的点、叉积运算 向量的点积即数量积,叉积又称向量积或矢量积。点积、叉积甚至两者的混合积在场论中是极其基本的运算。Matlab 是用函数实现向量点、叉积运算的。 (1) 点积运算 • 点积运算(A·B)的定义是参与运算的两向量各对应位置上元素相乘后,再将各乘积相加。所以向量点积的结果是一标量而非向量。 • 点积运算函数是:dot(A,B),类似于线性代数中的向量的内积,A、B 是具有相同元素个数的向量,A和B可以是行向量,也可以是列向量。
10.2 MATLAB语言基础 (2) 叉积运算 • 从几何意义来说,向量A、B的叉积是一新向量C,C的方向垂直于A与B所决定的平面。设A=[Ax, Ay, Az],B=[Bx, By, Bz],则 C=A×B=[Ay Bz-Az By, Az Bx -Ax Bz, Ax By-Ay Bx] • 叉积运算的函数是:cross(A,B),该函数计算的是A、B 叉积后各分量的元素值,且A、B 只能是包含三个元素的向量,结果C也包含三个元素。 例如: >>A=1:3,B=3:5; >>C=cross(A,B);
10.2 MATLAB语言基础 • 矩阵的建立 • 在 Matlab 中建立矩阵的方法很多,本节将介绍3种,它们分别是:直接输入法、提取法、拼接法。不同的方法往往适用于不同的场合和需要。 • 因为矩阵是Matlab 特别引入的量,所以在表达时,必须给出一些相关的约定与其他量区别,这些约定是: (1) 矩阵的所有元素必须放在方括号([])内; (2) 每行的元素之间需用逗号或空格隔开; (3) 矩阵的行与行之间用分号或回车符分隔; (4) 元素可以是数值或表达式。
10.2 MATLAB语言基础 1. 直接输入法 在命令行提示符“>>”后,直接输入一矩阵的方法即是直接输入法。直接输入法对建立规模较小的矩阵是相当方便的,适用于在程序中给矩阵变量赋初值。 例如: >> x=27;y=3; >>A=[1 2 3;4 5 6];B=[2,3,4;7,8,9;12,2*6+1,14]; >>C=[3, 4, 5 7, 8, x/y 10, 11, 12]; 注意,在输入矩阵时,元素之间需要使用空格或者逗号“,”进行分隔,而行与行之间则使用分号“;”或回车换行进行分隔,即如果输入A=[1,2,3], B=[1;2;3],则A是行向量而B是列向量。
10.2 MATLAB语言基础 2. 提取法 提取法是从大矩阵中提取出需要的小矩阵(或子矩阵),相当于线性代数中的分块矩阵或子矩阵。矩阵的提取实质是元素的抽取,用元素下标的向量表示从大矩阵中去提取元素就能完成抽取过程。 可以采用双下标方法提取子矩阵,例如: >> clear >>A=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16]; >>B=A(1:3,2:3) %取矩阵A的行数为1~3,列数为2~3 的元素构成子矩阵B >> C=A([1 3],[2 4]) %取矩阵A的行数为1、3,列数为2、4的元素构成子矩阵C >> D=A(4,:) %取矩阵A 第4 行,所有列,“:”可表示所有行或列 >> E=A([2 4],end) %取1、4 行,最后列,用“end”表示某一维数中的最大值 也可以采用单下标方法提取子矩阵,例如: >> clear >>A=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16]; >>B=A([4:6;3 5 7;12:14])
10.2 MATLAB语言基础 3. 拼接法 行数与行数相同的小矩阵可在列方向扩展拼接成更大的矩阵。同理,列数与列数相同的小矩阵可在行方向扩展拼接成更大的矩阵。例如: >>A=[1 2 3;4 5 6;7 8 9], B=[9 8;7 6;5 4], C=[4 5 6;7 8 9]; >>E=[A B;B A] %行列两个方向同时拼接,请留意行、列数的匹配问题 >> F=[A;C] %A、C列数相同,沿行向扩展拼接 E = 1 2 3 9 8 4 5 6 7 6 7 8 9 5 4 9 8 1 2 3 7 6 4 5 6 5 4 7 8 9 F = 1 2 3 4 5 6 7 8 9 4 5 6 7 8 9
10.3 MATLAB编程 • Matlab 与其他高级计算机语言一样,可以编制Matlab 程序,进行程序设计,而且与其他几种高级计算机语言比较起来,有许多无法比拟的优点。 • Matlab 作为一种高级计算机语言,有两种常用的工作方式,一种是交互式命令行操作方式,另一种是m文件的编程工作方式。在交互式命令行操作方式下,Matlab 被当作一种高级“数学演算纸和图形显示器”来使用,前面都是采用这种方式。在m文件的编程工作方式下,Matlab 可以像其他高级计算机语言一样进行程序设计,即编制一种以. m 为扩展名的Matlab 程序(简称m文件)。
10.3 MATLAB编程 • m文件综述 • Matlab语言是一种高效的编程语言,可以用普通的文本编辑器把一系列Matlab语句写在一起构成Matlab程序,然后存储在一个文件里,文件的扩展名为.m,因此称为m文件。这些文件都是由纯ASCII码字符构成的,在运行m文件时只需在Matlab命令窗口下输入该文件名即可。 • m文件有两种形式:脚本文件(Script File)和函数文件(Function File)。 • 脚本文件通常用于执行一系列简单的Matlab 命令,运行时只需输入文件名字,Matlab 就会自动按顺序执行文件中的命令; • 函数文件和脚本文件不同,它可以接受参数,也可以返回参数,在一般情况下,用户不能靠单独输入其文件名来运行函数文件,而必须由其他语句来调用,Matlab 的大多数应用程序都以函数文件的形式给出。
10.3 MATLAB编程 无论在脚本文件还是在函数文件中,都会定义一些变量。函数文件所定义的变量是局部变量,这些变量独立于其他函数的局部变量和工作空间的变量,即只能在该函数的工作空间引用,而不能在其他函数工作空间和命令工作空间引用。 某些变量被定义成全局变量,就可以在整个Matlab 工作空间进行存取和修改,以实现共享。因此,定义全局变量是函数间传递信息的一种手段。 用命令global 定义全局变量,其格式为 global A B C m文件是由一系列基本命令、表达式、基本语句、程序控制流语句、循环语句等组成的程序文件,任何在命令方式“>>”可以执行的语句和命令都可以包含在m文件中。
10.3 MATLAB编程 • m文件的编辑 (1) 新建文件。 ① 最简单的方法是单击Matlab的主界面的工具栏上的图标; ② 在命令窗口输入edit语句建立新文件,或输入edit filename语句,打开名为filename的m文件,在弹出文件不存在的提示框中,单击“Yes”按钮,则建立名为filename新的m文件; ③ 利用Matlab主界面的File|New子菜单,再从下拉菜单中选择“M-file”项; ④ 如果已经打开了文件编辑器后需要再建立新文件,可以用编辑器的菜单或工具栏上相应的图标进行操作。
10.3 MATLAB编程 (2) 打开文件。 ① 单击Matlab 的主界面的工具栏上的图标,弹出“打开文件”(Open)对话框,选择已有的m文件,单击“打开”按钮; ② 输入edit myfile语句,打开名为myfile的m文件; ③ 利用Matlab主界面的File|Open子菜单,弹出“打开文件”(Open)对话框,选择已有的m文件,单击“打开”按钮; ④ 如果已经打开了文件编辑器后需要打开其他文件,可以用编辑器的菜单或工具栏上相应的图标进行操作。
10.3 MATLAB编程 • m脚本文件 • 脚本文件是m文件中最简单的一种,不需要输入输入输出参数。 • 在运行过程中,产生的所有变量均是命令工作空间变量,这些变量一旦生成,就一直保存在内存空间中,除非用户执行clear 命令将它们清除。 • 运行一个脚本文件等价于从命令窗口中顺序运行文件里的语句。由于脚本文件只是一串命令的集合,因此只需像在命令窗口中输入语句那样,依次将语句编辑在脚本文件中即可。
10.3 MATLAB编程 例如:编程计算1~100之和。 % ex_1.m x=1:100; % 此处生成一个向量x,其元素为1~100 result=sum(x) % 调用函数sum求向量元素之和 将其保存为ex_1.m,在命令提示符下运行,只需要输入文件名。如: >>ex_1.m result = 5050
10.3 MATLAB编程 • 路径设置 打开Matlab时,系统默认的文件路径是安装Matlab时所确定的文件路径,例如“C:\Program Files\Matlab\R2010b\bin”,如果需要指定自己的工作路径,则需要在命令方式下输入: >> cd d:\test 此时,系统将文件夹d:\test设置为当前的工作路径,也可以在“Current Folder”窗口中选择自己的当前工作路径,如图10.4所示。
10.3 MATLAB编程 对于自定义函数、m文件以及从自其他方面获得的一些专用程序或函数文件,通常保存在特定的文件夹下,不能直接使用,需要设置查找路径,其方法为利用Matlab的主界面File|Set Path…来设置查找路径。
10.3 MATLAB编程 • 分支语句 1. 条件分支结构if 格式如下: if 表达式 语句1 else 语句2 end 如果表达式为真,则执行语句1;如果表达式为假,则执行语句2。如果表达式为假时,不需要执行任何语句,则可以去掉else和语句2。其中语句1和语句2可以是多条语句组成的复合语句,而这些语句并不需要像C语言一样用{}括起来。if条件语句同样可以嵌套使用。
10.3 MATLAB编程 • 多分支switch 语句。格式如下: switch 表达式 case 表达式1 语句1 case 表达式2 语句2 ... ... case 表达式n 语句n otherwise 语句n+1 end • 当表达式的值等于表达式1的值时,执行语句1; • 当表达式的值等于表达式2 的值时,执行语句2; • 当表达式的值等于表达式n 的值时,执行语句n; • 当表达式的值不等于任何case 后面所列的表达式时,执行语句n+1。 • 当任何一个分支语句执行完后,都直接转到end 语句的下一条语句。
10.3 MATLAB编程 3. 错误控制try-catch 在程序执行过程中,有时先执行某些语句并观察是否正确,而当出现错误时执行其他语句,此时可以用到try-catch结构。格式如下: try 语句1 catch 语句2 end 它先试探性地执行语句1,如果出错,则将错误信息存入系统保留变量lasterr 中,然后再执行语句2;如果不出错,则转向执行end 后面的语句。此语句可以提高程序的容错能力,增加编程的灵活性。
10.3 MATLAB编程 • 循环语句 1. for 循环 for 循环允许一组命令以固定的和预定的次数重复。一般形式是 for 循环控制变量=表达式1:表达式2:表达式3 语句 end 表达式1的值为循环控制变量的初值;表达式2的值为步长,每执行循环体一次,循环控制变量的值将增加步长大小。步长可以为负值,当步长为1时,表达式2可省略;表达式3为循环控制变量的终值,当循环控制变量的值大于终值时循环结束。
10.3 MATLAB编程 例如 求的值 % ex_2.m s=0; 设定初始值 for n=1:100 %表达式2省略时,默认为1 s=s+n; end s 将上述文件保存为ex_2.m,在命令方式下输入ex_2,结果如下: >> ex_2 s = 5050