《MATLAB语言及其应用课件CH02matlab数值运算与基本类型.ppt》由会员分享,可在线阅读,更多相关《MATLAB语言及其应用课件CH02matlab数值运算与基本类型.ppt(72页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、MATLAB语言及其应用1/28/2023周学成周学成2012.022012.022.1 数据类型 2.2 矩阵和数组的算术运算2.3 字符串2.4 日期和时间2.5 结构体和元胞数组2.6 多维数组2.7 关系运算和逻辑运算2.8 数组的信息获取2.9 多项式第第2章章 MATLAB数据类型与基本运算数据类型与基本运算2.1 数据类型lMATLAB 定义了15种基本的数据类型,包括整型、浮点型、字符型和逻辑型等,用户甚至可以定义自己的数据类型。2.1.1 常数和变量常数和变量1.常数2.变量(1)MATLAB的变量命名规则如下:的变量命名规则如下:l变量名区分字母的大小写。例如,“a”和“A
2、”是不同的变量。l变量名不能超过63个字符,第63个字符后的字符被忽略。l变量名必须以字母开头,变量名的组成可以是任意字母、数字或者下划线,但不能含有空格和标点符号(如,。%等)。l关键字(如if、while等)不能作为变量名。(2)特殊变量)特殊变量2.1.2 整数和浮点数整数和浮点数1.整数整数2.浮点数浮点数数据类型存储空间表示范围类型转换函数单精度型single4字节3.402821038+3.402821038single()双精度型double8字节1.7976910308+1.7976910308double()2.1.3 复数复数MATLAB用特殊变量“i”或“j”表示虚数的单
3、位。复数的产生可以有几种方式:z=a+b*i或z=a+b*jz=a+bi或z=a+bj(当b为常数时)z=r*exp(i*theta)z=complex(a,b)2.2 矩阵和数组的算术运算l空数组(empty array):没有元素的数组;l标量(scalar):指11的矩阵,即为只含一个数的矩阵;l向量(vector):指1n或n1的矩阵,即只有一行或者一列的矩阵;l矩阵(matrix):一个矩形的mn数组,即二维数组;l数组(array):指多维数组mnk,其中矩阵和向量都是数组的特例。2.2.1 矩阵的创建矩阵的创建在MATLAB中矩阵的创建应遵循以下基本常规:l矩阵元素应用方括号()
4、括住;l每行内的元素间用逗号(,)或空格隔开;l行与行之间用分号(;)或回车键隔开;l元素可以是数值或表达式。1.空数组2向量向量包括行向量(row vector)和列向量(column vector),即1n或n1的矩阵。(1)使用from:step:to方式生成向量如果是等差的行向量,可以使用“from:step:to”方式生成:from:step:to说明:from、step和to分别表示开始值、步长和结束值;当step省略时则默认为step=1;当step省略或step0而fromto时为空矩阵,当step0而from a=1:4;linspace(2,5,4);9:-1:6a=1 2
5、 3 4 2 3 4 5 9 8 7 6 b=1 2 34 5 6%使用回车分隔行b=1 2 3 4 5 62.2.2 数组的操作数组的操作1数组的元素(1)全下标方式全下标方式是指n维数组中元素通过n个下标来引用:a(d1,d2,d3.)(2)单下标方式数组元素用单下标引用,就是先把数组的所有列按先左后右的次序连接成“一维长列”,然后对元素位置进行编号。以mn的矩阵a为例,元素a(i,j)对应的单下标=(j-1)mi。2子矩阵的产生(1)用全下标方式注意:下标为“:”表示向量的所有元素,下标为“end”表示某一维中的最后一个元素。(2)用单下标方式 a(10;11;12)a(10:12)a(
6、10:end)a(10;11;end)(3)逻辑索引方式逻辑索引方式是通过一个元素值为0或1的逻辑数组为下标,其大小和对应数组相同。例2-8 使用逻辑索引方式产生图2-6中的第四列子矩阵。a=1 2 3 4;2 3 4 5;9 8 7 6;l1=logical(1 1 1)l1=1 1 1 l2=logical(0 0 0 1)l2=0 0 0 1 a(l1,l2)ans=4 5 63数组的赋值数组的赋值包括全下标方式、单下标方式和全元素方式。l全下标方式:a(i,j,k)=b,给a数组的部分元素赋值,则b数组的行列数必须等于a数组的行列数。l单下标方式:a(n)=b,b为向量,元素个数必须等
7、于a矩阵的元素个数。l全元素方式:a=b,给a数组的所有元素赋值,则b数组的元素总数必须等于a矩阵的元素总数,但行列数不一定相等。4矩阵的合并矩阵的合并就是把两个以上的矩阵连接起来得到一个新矩阵,“”符号可以作为矩阵合并操作符,命令格式如下:c=a b%将矩阵a和b水平方向合并为cc=a;b%将矩阵a和b垂直方向合并为c5数组元素的删除在MATLAB中可以对数组中的单个元素、子矩阵和所有元素进行删除操作,删除就是将其赋值为空矩阵(用表示)。2.2.3 矩阵和数组函数矩阵和数组函数 1.矩阵的常用函数矩阵的常用函数det(x)、rank(x)、inv(x)、v,d=eig(x)、diag(x)、
8、q,r=qr(x)、triu(x)和tril(x)示例:EX02020301.m2数组翻转数组翻转常用数组翻转函数:flipud(x)、fliplr(x)、flipdim(x,dim)、rot90(x,k)示例:EX02020301.m数组或矩阵翻转示例:数组或矩阵翻转示例:lA=1 3 5 7;2 4 6 8A=1 3 5 7 2 4 6 8l%flipud(x):上下翻转上下翻转 UD=flipud(A)UD=2 4 6 8 1 3 5 7lA=1 3 5 7;2 4 6 8A=1 3 5 7 2 4 6 8l%fliplr(x):左右翻转左右翻转 LR=fliplr(A)LR=7 5 3
9、 1 8 6 4 2lA=1 3 5 7;2 4 6 8A=1 3 5 7 2 4 6 8l%flipdim(x,dim):沿约定方向沿约定方向dim翻转,翻转,dim=1-行方向,行方向,dim=2-列方向列方向 D1=flipdim(A,1)D1=2 4 6 8 1 3 5 7 D2=flipdim(A,2)D2=7 5 3 1 8 6 4 2lA=1 3 5 7;2 4 6 8A=1 3 5 7 2 4 6 8l%rot90(x,k):使使x逆时针旋转逆时针旋转k个个90度。度。R1=rot90(A)R1=7 8 5 6 3 4 1 2 R2=rot90(A,2)R2=8 6 4 2 7
10、 5 3 13数组查找数组查找 一般用于在比较命令后面,查找非零元素。其命令格式如下:ua,b,=find(x)un=find(x)4数据统计数据统计 MATLAB的数据统计分析是按列进行的,包括得出各列的最大值、最小值等统计。示例:ex02020303.mA=0,1;2,3m,n=find(A)C=find(A)C=2 3 4m=2 1 2n=1 2 2A=1,3,5;2,4,6,b=1 2;3 4;5 6;7 8;9 0A=1,3,5;2,4,6,b=1 2;3 4;5 6;7 8;9 0lmax(x):数组中各列的最大值lmin(x):数组中各列的最小值lmean(x):数组中各列的平均
11、值lstd(x):数组中各列的标准差;指各列元素与该列平均值之差的平方和的开方值。lmedian(x):数组中各列的中值元素。lvar(x):各列的方差。lsum(x,dim):计算向量元素的和,dim为对应的维,省略时指所有元素。ls.k=sort(x,n,mode):沿第n维按摸增大重新排序,k为s元素的原位置,mode为排序方式:ascend为升序,descend为降序。2.2.4 2.2.4 矩阵和数组的算术运算矩阵和数组的算术运算1矩阵运算矩阵的基本运算是+、-、和乘方()等。(1)矩阵的加、减运算A+B 和A-B(2)矩阵的乘法运算A*B(3)矩阵的除法运算矩阵的除法运算表达式有两
12、种:AB%左除A/B%右除(4)矩阵的乘方AB(5)矩阵的转置A%矩阵A的转置2数组运算数组的乘、除、乘方和转置运算符号为矩阵的相应运算符前面加“.”,数组的乘、除、乘方和转置运算格式如下:A.*B%数组A和数组B对应元素相乘A./B%数组A除以数组B的对应元素A.B%数组B除以数组A的对应元素 A.B%数组A和数组B对应元素的乘方A.%数组A的转置例2-14 使用数组算术运算法则进行向量的运算。t=0:pi/3:2*pi;%t为行向量 x=sin(t)*cos(t)?Error using=mtimesInner matrix dimensions must agree.x=sin(t).*
13、cos(t)x=0 0.4330 -0.4330 -0.0000 0.4330 -0.4330 -0.0000 y=sin(t)./cos(t)y=0 1.7321 -1.7321 -0.0000 1.7321 -1.7321 -0.00002.2.5 2.2.5 稀疏矩阵稀疏矩阵一个矩阵中如果包含很多元素值为0,则此矩阵可以只存储少量的非0元素,这个矩阵称为稀疏矩阵(Sparse Matrix)。1.创建稀疏矩阵sparse函数的语法格式如下:sparse(i,j,s,m,n)%直接创建稀疏矩阵 sparse(p)%由全元素矩阵p转换为稀疏矩阵2.稀疏矩阵的存储空间3.稀疏矩阵的运算稀疏矩阵
14、的标准数学运算按照以下原则:如果二元运算的两个操作数中有一个是全元素矩阵一个是稀疏矩阵,则对于“+”、“-”、“*”、“”运算结果为全元素矩阵,而“&”、“.*”等运算结果为稀疏矩阵;如果函数的输入参数是矩阵,输出的参数为矩阵,则输出参数以输入矩阵的方式来表示,即当输入参数为稀疏矩阵时,输出参数也是稀疏矩阵。2.3 2.3 字符串字符串2.3.1 2.3.1 创建字符串创建字符串字符串由多个字符组成,是1n的字符数组;每一个字符都是字符数组的一个元素,以ASCII码的形式存放并区分大小,而显示的形式则是可读的字符。创建字符串 s1=matlab 7.3s1=matlab 7.3(1)直接赋值用
15、单引号()括起字符来直接赋值创建字符串。使用两个单引号()输入字符串中的单引号 s3=显示matlabs3=显示matlab(2)多个字符串组合 str2=s1;s2,;s3str2=matlab 7.3字符串 显示matlab 2.字符数组的存储空间MATLAB在存储字符串时,每一个字符以ASCII码的形式存放,占用两个字节。2.3.2 2.3.2 字符串函数字符串函数1.字符串合并strcat函数用于将字符串水平连接合并成一个新字符串,合并的同时会将字符串尾的空格删除。语法格式如下:strcat(s1,s2,)%将s1,s2合并成一个长字符串char(s1,s2,)%将s1,s2合并成一个
16、字符数组strvcat(s1,s2,)%将s1,s2合并成一个字符数组2.字符串与数值的转换abs将字符串转换为ASCII码数值str2num将字符串转换为数值str2double将元胞字符串数组转换为数值3.字符串的其他操作MATLAB 7.3还可以对字符串进行比较、查找、运行等操作。l例2-19 使用字符串函数进行运算。l str=a+b,c+d,lstr=la+b,c+d,l str1=strrep(str1,*2)%将,用*2替换lstr1=la+b*2l a=5l b=2l eval(str1)%执行字符串str1lans=l 9l str2=upper(str2)%将字符串转换为大
17、写字母lstr2=lC+D,练习练习2.4 2.4 日期和时间日期和时间 日期时间的表示格式日期时间的表示格式lMATLAB 7.3以三种格式表示:日期字符串、连续的日期数值和日期向量,不同的日期格式可以相互转换。l1.日期格式l(1)日期字符串l日期字符串是最常用的,有多种输出格式。l例,“2007年1月1日”可以表示为:01-Jan-2007 08:50:10、01-Jan-2007、01/01/2007、等。(2)连续的日期数值733043l(3)日期向量 year month day hour minute second 2.4.2 2.4.2 日期时间函数日期时间函数l1.获取系统时
18、间ldate:按照日期字符串格式获取当前系统时间;lnow:按照连续的日期数值格式获取当前系统时间;lclock:按照日期向量格式获取当前系统时间。l2.提取日期时间信息l分别使用year、month、day、hour、minute、second函数。l3.日期时间的显示格式l日期时间的显示可以使用datestr函数显示为字符串的样式。datestr函数的格式如下:ldatestr(d,f)%将日期按指定格式显示l4.计时函数l(1)cputime方法lcputime是返回MATLAB启动以来的CPU时间:l程序执行的时间程序代码执行结束后的cputime在程序代码执行前的cputimel(2
19、)tic/toc方法ltic在程序代码开始用于启动的一个计时器;toc放在程序代码的最后,用于终止计时器的运行,并返回计时时间就是程序运行时间。l(3)etime方法letime方法使用etime函数来获得程序运行时间,etime函数的命令格式如下:letime(t1,t0)%返回t1-t0的值2.5 2.5 结构体和元胞数组结构体和元胞数组2.5.1 2.5.1 元胞数组元胞数组l元胞数组是常规数值数组的扩展,其基本元素是元胞,每一个元胞可以看成是一个单元(Cell),用来存放各种不同类型不同尺寸的数据,如矩阵、多维数组、字符串、元胞数组和结构体。l元胞数组可以是一维、二维或多维,使用花括号
20、()表示,每一个元胞以下标区分,下标的编码方式也与矩阵相同,分为单下标方式和全下标方式。l1.创建元胞数组l(1)直接创建l A=cell1,1 2;3 4;1 2,matlab,0:1:5l A(1,1)=cell1;l A(1,2)=1 2;3 4;l A(2,1)=1 2,matlab;l A(2,2)=0:1:5l A1,1=cell1;l A1,2=1 2;3 4;l A2,1=1 2,matlab;l A2,2=0:1:5cell 1,1 cell 1,2 cell 2,1 cell 2,2 cell10 1 2 3 4 51 23 41 2matlabl例2-22 使用cell函
21、数创建元胞数组。l A=cell(2,2)%创建空的元胞数组l A1,1=cell1l(2)使用cell函数创建lcell函数创建元胞数组的语法格式:lA=cell(m,n)%创建mn元胞数组l2.元胞数组的操作 l(1)用取元胞数组的元素内容l s=C2,1%全下标方式l s=C2%单下标方式l(2)用()取元胞数组的元素l n=C(2,1)%全下标方式ln=l 1x4 doublel(3)用deal函数取多个元胞元素的内容2.5.2 2.5.2 结构体结构体l结构体的基本组成是结构,每一个结构都包含多个字段(Fields),结构体只有划分了字段以后才能使用。l1.创建结构体l(1)直接创建
22、l直接使用赋值语句创建结构体,用“结构体名.字段名”的格式赋值。l ps(1).name=曲线1;l(2)利用struct函数创建lstruct(field1,值1,filed2,值2,)%创建结构体将值赋给各字段l2.获取结构体内部数据l(1)使用“.”符号获取l(2)用getfield函数获取lgetfield(A,A_index,fieldname,field_index)l(3)使用fieldnames函数获取结构体的所有字段lfieldnames(array)%获取结构体的所有字段l(4)使用“”合并相同字段的数据l3.结构体的操作函数l(1)删除结构体的字段lrmfield(A,f
23、ieldname)%删除字段l(2)修改结构体的数据lsetfield(A,A_index,fieldname,field_index,值)l(3)结构体转换为元胞数组l ps=setfield(ps,1,color,green);2.6 2.6 多维数组多维数组l三维数组的元素存放遵循“单下标”的编号规则:第一页第一列下接该页的第二列,下面再接第三列,依此类推;第一页的最后列下面接第二页第一列,如此进行,直至结束。l1.多维数组的创建l(1)直接赋值创建l(2)由二维数组扩展l(3)使用cat函数创建l例2-25 使用cat函数创建多维数组。l a=1 2;3 4;l b=10 9;8 7;
24、l c2=cat(3,a,b)%按第三维连接lc2(:,:,1)=l 1 2l 3 4lc2(:,:,2)=l 10 9l 8 7l c2(1,1,2)%全下标方式的数组元素lans=l 10l c2(6)%单下标方式的数组元素lans=l 82.72.7关系运算和逻辑运算关系运算和逻辑运算2.7.1 2.7.1 逻辑运算逻辑运算lMATLAB 7.3中逻辑型(logical)数据只有“1”和“0”,分别表示true和false两种状态,逻辑型变量只占1个字节。l函数logical可以用来将数值型转换为逻辑型,任何非零的数值都转换为逻辑1,数值0转换为逻辑0。2.7.2 2.7.2 关系运算关
25、系运算lMATLAB 7.3常用的关系操作符有、=、=(等于)、=(不等于)。l关系运算规则:l如果比较的两个变量都是标量,则结果为1(true)或0(false);l如果比较的两个变量都是数组,则必须尺寸大小相同,结果也是同样大小的数组;l如果比较的是一个数组和一个标量,则把数组的每个元素分别与标量比较,结果为与数组大小相同的数组。2.7.3 2.7.3 逻辑运算逻辑运算l1.元素的逻辑运算l元素的逻辑运算是将数组中的元素一一进行逻辑运算,常用的逻辑运算符:&(与)、|(或)、(非)和xor(异或)。在逻辑运算中,非0元素表示true,0元素表示false。l2.先决逻辑运算l先决逻辑运算符
26、有:&(先决与)和|(先决或)。l3.位逻辑运算l位逻辑运算函数有:bitand(位与)、bitor(位或)、bitcmp(位非)和bitxor(位异或)。练习练习2.7.4 2.7.4 运算符优先级运算符优先级l各类运算符的优先级为:括号算术运算符关系运算符逻辑运算符l各符号优先顺序为:l括号()转置.幂.一元加减+-逻辑非 乘*.*除/./.加减+-冒号:关系运算=a1=1-6 11-6 0;l b1=10;l r1,p1,k1=residue(b1,a1)%将G1部分分式展开lr1=l 1.6667l -5.0000l 5.0000l -1.6667lp1=l 3.0000l 2.000
27、0l 1.0000l 0lk1=l l3.多项式的微积分l使用polyder函数来计算多项式的微分:lpolyder(p)%计算p的导数lpolyder(a,b)%计算a和b乘积的导数lq,d=polyder(b,a)%计算a和b商的导数lMATLAB没有专门的多项式积分函数,但可以通过以下的公式计算完成积分:lp./(length(p):-1:1),k%计算多项式p的积分2.9.3 2.9.3 多项式的拟合与插值多项式的拟合与插值l1.多项式的拟合l多项式拟合是用一个多项式来逼近一组给定的数据,是数据分析上的常用方法。l(1)拟合函数lp=polyfit(x,y,n)%由x和y得出多项式pl
28、说明:x、y向量分别为数据点的横、纵坐标;n是拟合的多项式阶次;p为拟合的多项式,p是n+1个系数构成的行向量。MATLAB 7.3提供了方便的曲线拟合图形用户接提供了方便的曲线拟合图形用户接口,可以直接在图形窗口中使用菜单进行多项式拟口,可以直接在图形窗口中使用菜单进行多项式拟合,在图形窗口中选择菜单合,在图形窗口中选择菜单“Tools”“Basic Fitting”,则出现,则出现“Basic Fitting”窗口。窗口。l2.插值运算l插值(interpolation)是在两个原始数据点之间根据一定的运算关系插入新的数据点,以便更准确地得出数据的变化规律。l一维插值是指对一个自变量的插值
29、,interp1函数用来进行一维插值:lyi=interp1(x,y,xi,method)练习:练习:lx=uint8(2.3e10),则x所占的字节是_个。lA.1 B.2 C.4 D.8答案:答案:A练习:练习:l下列_是合法常量。lA.3*e10 B.1e500 C.-1.85e-56 D.10-2答案:答案:C练习:练习:l已知x=0:10,则x有_个元素。lA.10 B.11 C.9 D.12答案:答案:B练习:练习:l已知x=0:10,则x有_个元素。lA.10 B.11 C.9 D.12答案:答案:B练习:练习:l已知数组a=,则a(:,end)是指_ l lA.所有元素 lB.第一行元素lC.第三列元素 lD.第三行元素答案:答案:C练习l求解方程组 练习:练习:l已知s=显示hello,则s的元素个数是_ lA.12 B.9 C.7 D.18答案:答案:A练习:练习:l运行字符串函数strncmp(s1,s2,2),则结果是_ lA.1 B.0 C.false D.true答案:答案:C练习:练习:l计算x从0到20,y=sin(x)中,x0的所有值。练习:练习:l计算三个多项式s1、s2和s3的乘积,则算式为_ lA.conv(s1,s2,s3)B.s1*s2*s3lC.conv(conv(s1,s2),s3)D.conv(s1*s2*s3)答案:答案:C
限制150内