MAT程序基础设计应用 1_第1页
MAT程序基础设计应用 1_第2页
MAT程序基础设计应用 1_第3页
MAT程序基础设计应用 1_第4页
MAT程序基础设计应用 1_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MATLABProgrammingandEngineeringApplicationMATLAB程序设计与工程应用本书知识结构3QASDRTFYGUML,;/第2章基本数据类型及运算2.1基本数据类型了解MATLAB程序中的基本数据类型,了解浮点数和整数的表示范围及相互转换方法,熟悉常用的常量符号。2.2变量及其属性掌握MATLAB程序中变量的命名规则及其赋值方法,变量的属性及其查看方法。2.3数组熟悉数组、向量和数值序列的概念及其创建方法,掌握数组元素的访问及获取数组大小的常用方法。第2章基本数据类型及运算2.4数据的基本运算了解MTALAB中对标量和数组的基本运算方法及区别,熟悉利用运算符实现算术运算和构成算术表达式的基本方法。2.5字符与字符串了解MATLAB程序中字符的编码方法,掌握字符和字符串、字符向量与字符串数组的区别、联系及其用法,熟悉字符串的各种基本运算和操作方法。2.6数据的输入和输出掌握MATLAB程序中实现数据输入输出的基本方法,熟悉常用的数值显示格式,掌握数据格式化输出的基本方法。在程序中,数据类型(DataType)是数据的属性,用于为变量或者表达式规定可能的取值,定义数据在计算机内存中的存储方式以及对数据可以进行的操作。在MATLAB中,基本的数据类型主要有数值型数据、逻辑型数据和字符串等,此外还提供了函数句柄、结构体、元胞数组等高级数据类型。本章首先介绍简单的数值型数据类型以及MATLAB中重要的数组和向量。MATLAB程序中的数值有两种基本的类型,即整数(Integer)和浮点数(Floating-pointnumber)。其中整数可以是有符号整数或无符号整数,而浮点数又包括单精度型(Single)和双精度型(Double)两种。各种数据类型的区别主要在于能够表示的数据范围和精度有所不同。2.1基本数据类型2.1.1整数2.1基本数据类型2.1.2浮点数(实数)2.1基本数据类型2.1.3常量2.1基本数据类型在MATLAB中规定了很多专用的标识符,用于代表固定的数据,称为常量(Constant)。常用的常量名如下。pi:圆周率。inf:无穷大。典型的情况是一个非0正数除以0,结果为

;一个负数除以0,得到结果为-

,表示为-inf。eps:无穷小。MATLAB程序中能够表示的最接近0的最小数值,近似为2-52或2.2204´10-16。NaN:不确定量,又称为非数值量(NoraNumber),典型的情况如0除以0。2.2变量及其属性在MATLAB脚本命令和脚本程序的各种语句和表达式中,用变量(Variable)来表示和给定运算所需的数据。每个变量代表一定的内存单元,变量值存储在这些单元中,需要时可以从中读取出来参加运算,或者将运算结果作为变量值,重新保存到对应的单元中。在MATLAB程序中,变量及其属性不需要在使用前进行声明。在程序中,每遇到一个新的变量,会自动创建该变量,并为其分配合适的存储空间,这样极大地简化了MATLAB程序的编写。2.2.1变量及其赋值程序中的每个变量都有唯一的标识符作为名字,称为变量名。通过变量名对变量所在的单元及其中的数据进行访问。变量的命名必须符合以下规则:变量名必须以字母开头,后面可以是字母、数字、下画线等,但不能有空格。例如my_Var1。变量名的长度不能超过63个英文字符。变量名不能用保留字,即在MATLAB中已经用作特殊用途的标识符。MATLAB中的变量名是大小写敏感的,例如a1和A1是两个不同的变量。2.2变量及其属性2.2.1变量及其赋值为变量赋值的基本语法格式为:变量名=变量值需要说明以下几点:执行上述语句或命令后,可以在工作区中立即看到变量名及对应的变量值。如果表达式后无分号,则执行后在命令行窗口立即显示变量及变量值;如果有分号,则命令行窗口不会有任何显示。如果在上述命令中没有给定变量名,则将变量值赋给默认变量ans。通过在命令行窗口输入clear命令或者执行程序中的clear语句,可以清除工作区中原来创建的变量。2.2变量及其属性2.2.2变量的属性通过在命令行窗口执行whos命令,可以按字母顺序列出已经创建的所有变量的名称(Name)、大小(Size)、占用内存单元字节数(Bytes)和数据类型(Class)等属性。2.2变量及其属性2.3.1数组的基本概念在计算机科学中,数组(Array)是由相同类型数据的集合所组成的数据结构,在内存中用一块连续的区域来存储。数组中的每个数据称为元素(Element),各元素在内存中连续依次存放。数组中的各元素在数组中的位置用一个或者若干个整数指定,这些整数称为下标(Subscript)。在下标中,每个整数对应一维,下标整数的个数称为数组的维数(Dimension),维数为k的数组通常简称为k维数组。在MATLAB中,一维数组通常又称为向量(Vector),其中只有一行的数组称为行向量(RowVector),只有一列的数组称为列向量(ColumnVector)。2.3数组2.3.1数组的基本概念2.3数组2.3.2数组的创建2.3数组一维和二维数组的创建

所有元素放在中括号中。

对于一维数组,各数据元素之间用空格或者逗号分隔。对于二维数组,同一行的各数据元素之间用空格或逗号分隔,各行之间用分号来分隔。2.3.2数组的创建2.3数组三维数组的创建

三维数组可以认为是由多个相同维数的二维数组构成。因此,为创建三维数组,可以首先创建二维数组,然后再进行扩展。创建第一页创建第二页2.3.2数组的创建2.3数组序列的生成

序列(Sequence)实际上是一个行向量,其中的各元素按照一定的规律而变化,例如相邻的任意两个元素之间的差都相等。

在MATLAB中,创建序列最基本的方法是用冒号运算符,其典型格式为

first:dis:last

其中first和last分别为序列的起始值和终止值;

dis为步长,即序列中相邻两个元素之间的差。2.3.2数组的创建2.3数组完整给出3个参数步长为默认值1步长可以为负三个参数可以为实数步长为默认值1三个参数可以为实数序列的生成2.3.2数组的创建2.3数组利用专用内置函数创建序列

y=linspace(a,b)

其中,参数a和b为序列的最最小值和最大值。

该语句执行后将返回一个行向量(序列),序列中的每个数据从a到b共100个,相邻两个元素之差都相等。调用该函数也可以再给定第三个参数n。当n为大于0的正整数时,将返回n个等差数据序列,相邻两个数据之间的差值为(b-a)/(n-1)。如果n为负整数,则返回一个空向量。2.3.2数组的创建2.3数组利用专用内置函数创建序列

y=logspace(a,b)

创建10a~10b之间的对数数值序列。显然有:x1(1)=10x2(1)、x1(2)=10x2(2)

、…

2.3.2数组的创建2.3数组------------------------------------------------------------------实例2-1数组的创建用三种不同的方法创建向量a=[0,2,4,6,8,10]。方法1:在命令行窗口直接输入如下命令: >>a=[0,2,4,6,8,10]方法2:利用数值序列的创建方法实现。在命令行窗口输入如下命令: >>a=0:2:10方法3:调用linspace内置函数实现。 >>a=linspace(0,10,6)-----------------------------------------------------------------2.3.3数组元素的访问2.3数组创建数组后,根据程序的需要可以访问其中的指定元素。在MATLAB中,通过在数组名后添加一对小括号,并在小括号中依次列出需要访问的元素的下标。例如,A(2)表示访问一维数组A中的第2个元素,

而B(1,2)表示访问二维数组B中第1行第2列的元素。2.3.3数组元素的访问2.3数组需要说明以下几点:在MATLAB中,数组各维的下标序号从1开始。由于数组中各元素在内存中是按列顺序存放的,因此对多维数组,也可以与一维数组一样,采用只有一个下标的方法进行访问。

例如,对2´3数组A中的第2行第1列元素A(2,1),按照逐列顺序存放时,该元素是A中的第3个元素,因此也可以表示为A(3)。在访问数据和矩阵时,结合冒号表达式,可以同时访问数组中的多个数据。2.3.3数组元素的访问2.3数组例如,创建二维数组A:访问A中第二行第1~4列的所有元素,得到向量B。访问A中所有行第3列的所有元素,得到一个列向量。访问A中第1行第2列到最后一列的所有元素,得到行向量C。2.3.4数组大小的获取2.3数组数组的大小(Size)指的是一个数组中含有数据的总个数,也可以用各维中数据的个数表示。以二维数组为例,假设两个维的长度分别为m和n,则数组中共有m×n个数据。size函数size函数的基本调用格式有如下2种:d=size(X)S=size(X,dim)第一种调用格式返回行向量d=[mn],其中的m和n分别表示二维数组X的行数和列数。参数dim指定数组X的维数,返回数组中该维的长度,保存到变量S中。2.3.4数组大小的获取2.3数组length函数length函数用于返回数组中所有维的最大长度。如果数组为行向量或者列向量,返回结果也表示向量中数据的总个数。numel函数numel函数用于返回数组中所有元素的个数。对于二维数组,返回结果等于行数与列数的乘积。2.3.4数组大小的获取2.3数组例如,假设X为3×2数组,则

>>d

=

size(X)

>>S1=

size(X,1)

>>L=length(X)

>>N=numel(X)执行结果如下:

d=

32 %数组X共有3行2列

S1=

3

%数组X第一维的长度为3,即行数为3

L=

2

%数组X中最后一维的长度,即列数为2

N=

6

%数组X中数据的总个数为62.4数据的基本运算MATLAB中的运算主要有算术运算、关系运算、逻辑运算等,每种运算都提供了相应的运算符,可以很方便地构成各种表达式。这里首先介绍常用的基本算术运算符。在MATLAB程序中,与能够同时保存多个数据的数组不同,单个常数或者变量称为标量(Scalar)。对标量和数组,在运算方法上有所不同,因此MATLAB中规定了不同的运算符。2.4数据的基本运算2.4.1标量运算2.4数据的基本运算运算符“\”和“/”分别称为左除和右除运算,二者的区别在于表达式中被除数和除数书写的位置。

例如,表达式5/2=2.5,而5\2=0.4。赋值运算符的作用是将常数或者表达式的值赋给左侧的变量,运算符左侧只能是一个变量,而不能是表达式。

例如,如下赋值表达式:

>>a+2=20

是错误的。2.4.1标量运算2.4数据的基本运算运算符的优先级。运算符的优先级用于确定计算表达式时各运算符代表的运算的顺序。表2-3中各种算术运算符的优先级从高到低依次为:①

乘方运算(^);②

乘法(*)、右除(/)、左除(\);③

加法(+)、减法(-)。

其中,处于同一优先级的运算符将按照上述从左至右顺序依次执行运算。

与普通的数学表达式一样,利用括号可以改变上述默认的优先级顺序。此外,对于比较复杂、含有运算符种类比较多的表达式,也建议适当地引入括号,以增强程序的可读性。2.4.1标量运算2.4数据的基本运算数组中的每个元素也都是标量,因此用上述标量运算符也可以对其进行运算。例如,如下表达式:>>c=A(1,2)+B(2,2)*5将数组B中第二行第二列这所得元素乘以5,再与数组A中第一行第二列的元素相加,结果赋给变量c。由于数组中存储的是多个同类型数据,在工程应用中,通常需要对数组中的所有数据执行相同的运算。为了简化程序的编写,MATLAB中提供了专门的数组运算符,对数组整体进行运算。这是MATLAB与大多数高级语言程序的主要区别之一。2.4.2数组的运算2.4数据的基本运算2.4.2数组的运算说

明:数组的加减运算与标量的加减运算符完全相同。实现的是将这两个数组中所有对应位置上的两个数据相加减,分别得到结果数组中的各元素。假设A和B中分别有10个元素,则表达式A+B实际上一共执行了10次加法运算。2.4数据的基本运算2.4.2数组的运算数组的乘除运算和乘方运算也是对数组中每个元素分别进行乘除运算和乘方运算,但为了与标量运算相区别,在前面加上一个“.”号。

例如,数组的乘方运算数组的除法运算2.4数据的基本运算2.4.2数组的运算两个数组进行上述运算时,要求其维数和大小都必须相同。

例如:报错:数组A和B数据个数不同,不能进行加法运算!2.4数据的基本运算2.4.2数组的运算一个数组也可以与标量进行运算,此时是将该标量与数组中的各数据分别进行运算。对乘方运算,必须用“.^”运算符,而其他运算用标量运算符和数组运算符都可以。

例如:2.4数据的基本运算2.4.2数组的运算实例2-2数组的运算创建数组a=[0,1,2;1,-1,1],b=[0,0,0;1,1,1],并利用MATLAB脚本命令实现如下运算,:(1)a+b,(2)(a+b)2,(3)2ab。2.5字符与字符串2.5.1字符及其编码作为文本的各种文字符号统称为字符(Character)。为了与表示大小的普通数值型数据相区别,在程序中一般用单引号括起来。例如,'A'、'中'。在计算机中,所有信息都必须用若干位二进制的组合进行表示和区分。对文本字符(例如十进制数字代码字符、大小写英文字母字符等),目前常用的方法是将每个字符用规定的8位二进制表示,称为ASCII码(AmericanStandardInformationExchangecode,美国标准信息交换码)。在MATLAB中,字符都用Unicode编码的格式保存到计算机的内存中。为了解决存储效率问题,又出现了一些中间格式的字符集编码,称为Unicode转换格式UTF(UnicodeTransformationFormat)。2.5字符与字符串2.5.1字符及其编码ASCII码上个世纪60年代,美国制定了一套字符编码,对英文字符与二进制位之间的关系做了统一规定,称为ASCII码,一直沿用至今。ASCII码一共规定了Windows键盘上128个字符的编码,比如大写字母A的ASCII码为65,数字字符3的ASCII码为51。英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。例如,对简体中文,常用的编码方式是GB2312,在这种编码方式中,使用两个字节表示一个汉字,所以理论上最多可以表示256

256=65536个中文字符。2.5字符与字符串2.5.1字符及其编码Unicode编码由于不同国家的语言采用的编码方式不同,同一个编码可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道其编码方式。否则,如果用错误的编码方式进行解读,就会出现乱码。如果有一种编码,能够将世界上所有的符号都纳入其中,每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode编码。在Unicode编码中,每个字符用1~4个字节表示。对英文字符,Unicode编码与其ASCII码相同,比如英文大小字母A的Unicode编码和ASCII码都为65。对汉字字符,其Unicode编码为2~4个字节,例如汉字字符“中”的Unicode编码为20013。2.5字符与字符串2.5.1字符及其编码UTF编码UTF编码是Unicode编码的一种实现方式,是一种可变长度的编码方式,也就是对不同的字符用不同字节数的编码。目前常用的有UTF-8和UTF-16等。UTF-8

使用1~4字节为每个字符编码,其中大部分汉字采用3字节编码,少量不常用汉字采用4字节编码。UTF-16

使用2或4字节为每个字符编码,其中大部分汉字采用2字节编码,少量不常用汉字采用4字节编码。MATLAB中采用UTF-16编码。在MATLAB中,所有的字符都用Unicode编码表示并存储到计算机中。因此,对用单引号括起来的字符,在程序中实际上是代表其Unicode码。2.5字符与字符串2.5.1字符及其编码例如,创建数值型变量,默认为double型创建字符型变量,Class属性为char普通数值型变量的运算字符型变量的运算,是将字符的Unicode编码(ASCII码)进行运算2.5字符与字符串2.5.2字符串与字符串数组由若干个字符可以构成字符串(String),在程序中可用于指定单个文本片段(文件名和绘图标签等)、显示输出运算结果,或者将已知的字符编码数据表示为字符,从而便于在程序中输入一些不能用键盘直接输入的特殊字符(例如希腊字母、温度符号字符)。在MATLAB中,字符串又可以有两种不同的表示方法,分别称为字符向量和字符串。2.5字符与字符串2.5.2字符串与字符串数组字符向量在MATLAB中,用单引号括起来的若干个字符称为字符向量(CharacterVector)。在字符向量中,每个字符的Unicode编码按顺序依次存放到计算机内存中,相当于只有一行的数组。因此,与普通的数值型数组或向量一样,利用下标可以访问字符向量中指定的一个或多个字符。2.5字符与字符串2.5.2字符串与字符串数组字符向量在MATLAB中,用单引号括起来的若干个字符称为字符向量(CharacterVector)。在字符向量中,每个字符的Unicode编码按顺序依次存放到计算机内存中,相当于只有一行的数组。因此,与普通的数值型数组或向量一样,利用下标可以访问字符向量中指定的一个或多个字符。2.5字符与字符串2.5.2字符串与字符串数组利用double函数将字符向量中的各字符转换为对应的Unicode编码。利用char函数将字符的编码转换为字符(向量)。2.5字符与字符串2.5.2字符串与字符串数组利用double函数将字符向量中的各字符转换为对应的Unicode编码。利用char函数将字符的编码转换为字符(向量)。2.5字符与字符串2.5.2字符串与字符串数组字符串从R2017a版本开始,MATLAB程序也允许用双引号来创建字符串(String)。与字符向量不同,用双引号包围起来的字符串是一个整体。字符串是一个标量,不能单独访问其中的某个字符。2.5字符与字符串2.5.2字符串与字符串数组字符串数组用一对双引号括起来的字符序列构成一个字符串标量。与普通的数值型数据一样,多个字符串标量可以构成一个数组。数组中各元素分别都是一个字符串,则称为字符串数组(StringArray)。2.5字符与字符串2.5.3文本与数值型数据之间的转换字符和字符串统称为文本(Text),这是与前面介绍的整数、浮点数等数值型数据类似的另一种数据类型。其基本区别在于,数值型数据一般都具有大小的概念,而文本一般不具有大小概念,只是对某种信息的符号代号,例如电话号码、房间号、身份证号码等。如果一个文本中全部是数字代码字符0~9,在程序中经常需要将其转换为数值型数据,以便进行特殊的处理变换,例如排序操作。或者相反,将数值型数据转换为文本,以便实现显示输出等,例如将程序中的某个计算结果123送往计算机屏幕显示。2.5字符与字符串2.5.3文本与数值型数据之间的转换文本转换为数值型数据字符向量或字符串标量转换为数值标量常数字符串数组转换为数值型数组2.5字符与字符串2.5.3文本与数值型数据之间的转换在调用str2double函数实现转换时,表示数值的文本可以包含数字、逗号(千位分隔符)、小数点、前导

+

-

符号,还可以是科学记数法中表示以10为底的专用字符e。如果文本中包含其他的非法字符,str2double

不能将文本转换为数值,此时将返回

NaN

。2.5字符与字符串2.5.3文本与数值型数据之间的转换数值型数据转换为文本2.5字符与字符串2.5.4字符向量和字符串的基本操作字符串长度的获取字符向量

字符向量实际上是普通的一维数组,其中的所有元素构成一个字符串。因此可以调用普通数组的操作函数size、length和numel以获取其长度,返回的是其中字符的个数。字符串数组

由于其中的每个字符串元素都是一个整体或者说一个标量,因此用上述函数不是获取其中每个字符串的长度,而是字符串数组中字符串的个数。

为了获取字符串数组中各字符串的长度,必须调用strlength函数。2.5字符与字符串2.5.4字符向量和字符串的基本操作创建字符向量获取各维的长度获取字符向量第二维的长度(字符个数)获取字符的个数创建字符串数组获取数组的长度(字符串的个数)获取数组中每个字符串的长度获取数组中指定字符串的长度(字符个数)2.5字符与字符串2.5.4字符向量和字符串的基本操作字符串的连接和拆分字符向量的连接和合并实现字符向量的合并,最简单的方法是将各字符向量按顺序放到一对中括号中,各字符向量之间用空格或逗号分隔。比较:2.5字符与字符串2.5.4字符向量和字符串的基本操作字符串的连接和拆分字符串的连接和合并

对用双引号括起来的多个字符串,还可以用加号实现连接和合并。字符串的连接和合并2.5字符与字符串2.5.4字符向量和字符串的基本操作用加法运算符可以实现多个字符串的合并连接,也可以实现字符串与数值常数或字符、字符向量的合并,得到一个新的字符串。如果一个表达式中所有项都是字符向量和常数,则不是进行字符串的合并连接,而是将各字符向量中对应字符的Unicode编码与常数进行普通的相加运算,得到普通的数值型数组或向量。显然在这种情况下,同一个表达式中所有字符向量都必须具有相同长度。2.5字符与字符串2.5.4字符向量和字符串的基本操作字符串数组的连接和合并实现数组中同一行多个字符串的合并指定合并时的分隔符指定按列合并2.5字符与字符串2.5.4字符向量和字符串的基本操作字符串的拆分指定拆分时的分隔字符,默认为空格。注意:split函数实现对字符串的拆分,得到若干子字符串。对字符向量,拆分后得到的是元胞数组,这将在后面介绍。2.5字符与字符串2.5.4字符向量和字符串的基本操作字符串的编辑2.5字符与字符串2.5.4字符向量和字符串的基本操作实例2-3字符串的编辑创建如下字符串:>>chr="HelloWorld" 之后,调用内置函数依次实现如下功能:(1)删除chr字符串末尾的所有空格字符,得到字符串chr1;(2)将字符串chr1中的所有小写字母替换为大写字母,得到字符串chr2;(3)用chr和chr2构造2´1字符串数组chr3;(4)通过在各字符串末尾添加空格,使字符串数组chr3中所有字符串具有相同的长度。2.5字符与字符串2.5.4字符向量和字符串的基本操作创建字符串chr删除尾随空白字符串的合并小写字母转换为大写字母为数组中的字符串添加尾随空白,使两个字符串长度相同2.6数据的输入和输出2.6.1数据的输入根据程序流程的需要,在执行程序的过程,希望用户从键盘上实时输入参加运算的数据。x= input(prompt)其中参数prompt为提示信息,可以是用单引号或者双引号括起来的字符向量或者字符串。执行上述命令时,将在命令行窗口显示参数prompt中的字符串,并等待用户输入值。输入完毕后,按回车键,则将用户输入的数据存入变量x。2.6数据的输入和输出2.6.1数据的输入执行input函数后,用户可以输入任何数值型常数、变量或者表达式。对输入的变量或者表达式,返回结果为变量和表达式的值。如果需要文本字符串,必须在调用input函数时附加一个参数's'或者''s''。执行时,如果在提示信息后面不输入任何信息直接回车,则返回结果为一个空数组(长度为0的数组)。2.6数据的输入和输出2.6.1数据的输入执行一次该命令也可以输入一个数组。此时,在提示信息后面依次输入数组的各元素,各元素必须放在一对中括号中,各元素之间可以输入空格、逗号或分号分隔。2.6数据的输入和输出2.6.2数据的输出显示在命令行窗口直接输入变量名,或者将变量直

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论