
第二讲数值数组及其运算.ppt
81页第二讲第二讲 数值数组及其运算数值数组及其运算数值数组和数组运算始终数值数组和数组运算始终是是MATLAB的的核心核心1第二讲第二讲 数值数组及其运算数值数组及其运算2.1 引言引言2.2 一维数组的创建和寻访一维数组的创建和寻访2.3 二维数组的创建二维数组的创建2.4 二维数组元素的标识二维数组元素的标识2.5 二维数组的子数组寻访和赋值二维数组的子数组寻访和赋值2.6 执行数组运算的常用函数执行数组运算的常用函数2第二讲第二讲 数值数组及其运算数值数组及其运算2.7 数组运算和矩阵运算数组运算和矩阵运算2.8 标准数组生成函数和数组操作函数标准数组生成函数和数组操作函数2.9 数组构作技法综合数组构作技法综合2.10 高维数组高维数组2.11 “非数非数”和和“空空”数组数组2.12 关系操作和逻辑操作关系操作和逻辑操作32.1 引言引言数组:由一组实数或复数排成的长方数组:由一组实数或复数排成的长方阵列阵列((Array))n一维的一维的“行行”或或“列列”n二维的二维的“矩形矩形”n三维的三维的“若干矩形的堆叠若干矩形的堆叠”n更高的任意维更高的任意维42.1 引言引言数组运算:无论对数组施加什么运算(包数组运算:无论对数组施加什么运算(包括函数),总认为是对数组中括函数),总认为是对数组中每个元素每个元素平等的实施平等的实施同样的操作同样的操作设计数组和数组运算的目的:设计数组和数组运算的目的:n使程序简单、易读;更接近数学公式使程序简单、易读;更接近数学公式n提高程序向量化程度,提高计算效率,节省提高程序向量化程度,提高计算效率,节省系统开销系统开销52.1 引言引言绘制函数绘制函数 在在0≤x≤1时的曲线时的曲线x=0:0.1:1 %定义自变量的采样点取值数组定义自变量的采样点取值数组y=x.*exp(-x)%利用数组运算计算各自变量采样点上的函数值利用数组运算计算各自变量采样点上的函数值plot(x,y),xlabel('x'),ylabel('y'),title('y=x*exp(-x)') %绘图绘图第一句定义自变量数组:第一句定义自变量数组:0为起点,每隔为起点,每隔0.1取一个点,直到取一个点,直到1。
得到得到1×11的数组的数组第二句中,指数函数第二句中,指数函数exp(-x)对对x每个元素求值,结果也是每个元素求值,结果也是1×11的数的数组组数组乘是两个数组对应元素相乘,得到数组乘是两个数组对应元素相乘,得到y也是也是1×11的数组的数组连续函数必须在相应区间上连续函数必须在相应区间上采样采样才能进行数值计算才能进行数值计算62.1 引言引言72.2 一维数组的创建和寻访一维数组的创建和寻访1. 一维数组的创建一维数组的创建逐个元素输入逐个元素输入x=[2 pi/2 sqrt(3) 3+5i]冒号生成冒号生成n格式格式 x=a:inc:bna是第一个元素,是第一个元素,inc是步长(缺省为是步长(缺省为1))n若若(b-a)是是inc的整数倍,则生成数组最后一个元素的整数倍,则生成数组最后一个元素等于等于b,否则小于,否则小于bn inc可取正数或负数取正:可取正数或负数取正:ab82.2 一维数组的创建和寻访一维数组的创建和寻访线性采样线性采样n格式格式 x=linspace(a,b,n)na,b是第一个和最后一个元素,是第一个和最后一个元素,n是采样点数是采样点数n生成生成1×n的数组的数组n等价于等价于x=a:(b-a)/(n-1):b运用运用MATLAB函数生成法函数生成法如如rand,zeros,ones等等以上均为行数组,列数组转置即可以上均为行数组,列数组转置即可92.2 一维数组的创建和寻访一维数组的创建和寻访2.一维数组子数组的寻访和赋值一维数组子数组的寻访和赋值子数组的寻访(子数组的寻访(Address))rand('state',0)%把均匀分布伪随机发生器置为把均匀分布伪随机发生器置为0状态状态x=rand(1,5) %产生产生1×5的均布随机数组的均布随机数组x(3) %寻访数组寻访数组x的第三个元素的第三个元素x([1 2 5])%寻访数组寻访数组x的第一、二、五个元素组成的子数组的第一、二、五个元素组成的子数组x(1:3) %寻访前三个元素组成的子数组寻访前三个元素组成的子数组x(3:end)%寻访除前寻访除前2个元素外的全部其他元素。
个元素外的全部其他元素end是最后一个是最后一个元素的下标元素的下标x(3:-1:1) %由前三个元素倒排构成的子数组由前三个元素倒排构成的子数组x(find(x>0.5)) %由大于由大于0.5的元素构成的子数组的元素构成的子数组x([1 2 3 4 4 3 2 1])%对元素可以重复寻访,使所得数对元素可以重复寻访,使所得数组长度允许大于原数组组长度允许大于原数组102.2 一维数组的创建和寻访一维数组的创建和寻访子数组的赋值(子数组的赋值(Assign))x(3) = 0 %第三个元素赋值为第三个元素赋值为0x([1 4])=[1 1] %第一、四个元素都赋值为第一、四个元素都赋值为1n保证被赋值的子数组长度与送入的数组保证被赋值的子数组长度与送入的数组长度长度相同相同112.3 二维数组的创建二维数组的创建二维数组与矩阵二维数组与矩阵n二维数组是由实数或复数排列成矩形构成的二维数组是由实数或复数排列成矩形构成的n从从数据结构数据结构上看,矩阵和二维数组上看,矩阵和二维数组没有区别没有区别n当二维数组带有线性变换含义时,就是矩阵当二维数组带有线性变换含义时,就是矩阵122.3 二维数组的创建二维数组的创建1.直接输入法直接输入法二维数组三要素:二维数组三要素:n整个数组必须以整个数组必须以“[]”为首尾为首尾n数组行与行之间必须用数组行与行之间必须用“;”或或回车回车隔离隔离n数组元素必须用数组元素必须用“,”或或空格空格分隔分隔132.3 二维数组的创建二维数组的创建在在MATLAB环境下,用下面三条指令创建二维数组环境下,用下面三条指令创建二维数组Ca=2.7358; b=33/79;%这这两两条条指指令令分分别别给给变变量量 a ,,b 赋值赋值C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i] %创建二维数组创建二维数组CC = 1.0000 5.4716 + 0.4177i 0.6909 0.7071 4.8244 3.5000 + 1.0000i “;”在在“[]”内,是数组行分隔符内,是数组行分隔符“;”作为指令结束符,作为指令结束符,不显示不显示执行结果执行结果142.3 二维数组的创建二维数组的创建复数数组的另一种输入方式复数数组的另一种输入方式M_r=[1,2,3;4,5,6],M_i=[11,12,13;14,15,16]CN=M_r+i*M_i %由实部、虚部数组构成复数数组由实部、虚部数组构成复数数组M_r = 1 2 3 4 5 6M_i = 11 12 13 14 15 16CN = 1.0000 +11.0000i 2.0000 +12.0000i 3.0000 +13.0000i 4.0000 +14.0000i 5.0000 +15.0000i 6.0000 +16.0000i “,”在在“[]”内,是数组元素分隔符内,是数组元素分隔符“,”作为指令结束符,作为指令结束符,显示显示执行结果执行结果152.3 二维数组的创建二维数组的创建2.数组编辑器创建数组编辑器创建单击工作空间中的单击工作空间中的“新建新建”图标图标3.利用利用M文件创建和保存数组文件创建和保存数组对于经常需要调用的数组,尤其是比较大对于经常需要调用的数组,尤其是比较大而复杂的数组,值得为它专门建立一个而复杂的数组,值得为它专门建立一个M文件文件4.利用利用MATLAB函数创建函数创建162.4 二维数组元素的标识二维数组元素的标识1.“全下标全下标”标识标识经典教科书的标识法经典教科书的标识法即指出是即指出是“第几行,第几列第几行,第几列”的元素的元素优点:几何概念清楚,引述简单。
最常用)优点:几何概念清楚,引述简单最常用)“全下标全下标”由两个下标组成:行下标,列下标由两个下标组成:行下标,列下标例如:例如:A(2,5)172.4 二维数组元素的标识二维数组元素的标识2.“单下标单下标”标识标识就是用一个下标来指明元素在数组中的位置就是用一个下标来指明元素在数组中的位置对二维数组元素进行对二维数组元素进行“一维编号一维编号”n把二维数组所有列,按先左后右的次序,首尾相接排成把二维数组所有列,按先左后右的次序,首尾相接排成“一一维长列维长列”,然后自上往下编号,然后自上往下编号“单下标单下标”与与“全下标全下标”转换关系:以转换关系:以(m×n)的二维的二维数组数组A为例,全下标元素位置是为例,全下标元素位置是“第第r行,第行,第c列列”,改,改为单下标表示为为单下标表示为a=(c-1)×m+rMATLAB有两个指令可实现此转换:有两个指令可实现此转换:nsub2ind 据全下标算出单下标据全下标算出单下标nind2sub 据单下标算出全下标据单下标算出全下标182.4 二维数组元素的标识二维数组元素的标识3.“逻辑逻辑1”标识标识常用问题:寻找数组中大于某值的元素常用问题:寻找数组中大于某值的元素找出数组找出数组 中所有绝对值大于中所有绝对值大于3的元素的元素A=zeros(2,5); %预生成一个预生成一个2×5全零数组全零数组A(:)=-4:5 %运用运用“全元素全元素”赋值法获得赋值法获得AL=abs(A)>3 %产生与产生与A同维的同维的“0-1”逻辑值数组逻辑值数组islogical(L) %判断判断L是否逻辑值数组是否逻辑值数组X=A(L) %把把L中逻辑值中逻辑值1对应的对应的A元素取出元素取出192.4 二维数组元素的标识二维数组元素的标识A = -4 -2 0 2 4 -3 -1 1 3 5L = 1 0 0 0 1 0 0 0 0 1ans = 1X = -4 4 5 L的元素是的元素是0或或1,它是它是“逻辑数组逻辑数组”,是一种特殊的数据类型。
是一种特殊的数据类型逻辑逻辑1”标识法:通过与标识法:通过与A同样大小的逻辑数组同样大小的逻辑数组L中中“1”的位置的位置指示指示A中元素的位置中元素的位置202.5 二维数组的子数组寻访和赋值二维数组的子数组寻访和赋值A(r,c)A的的r行行c列元素列元素A(r,:)A的的r行全部元素行全部元素A(:,c)A的的c列全部元素列全部元素A(:)A的的“单下标全元素单下标全元素”寻访寻访A(s)“单下标单下标”寻访生成寻访生成“s指定的指定的”一维数组一维数组s是行数组(或列数组),则是行数组(或列数组),则A(s)就是长度就是长度相同的行数组(或列数组)相同的行数组(或列数组) A(L)“逻辑逻辑1”寻访寻访 由与A同样大小的同样大小的“逻辑数组逻辑数组”L中的中的“1”元素选出元素选出A的对应元素的对应元素21A(r,c)=Sa“双下标双下标”方式赋值方式赋值Sa的的“行宽、列长行宽、列长”必须与必须与A(r,c)的的“行宽、列长行宽、列长”相同A(:)=D(:)全元素赋值结果:保持全元素赋值结果:保持A的的“行宽、列长行宽、列长”不变条件:不变条件:A、、D两个数组的元素数相等。
两个数组的元素数相等A(s)=Sa “单下标单下标”部分元素赋值结果:保持部分元素赋值结果:保持A的的“行宽、列长行宽、列长”不变条件:不变条件:s单下标数组长度必须与一单下标数组长度必须与一维数组维数组Sa的长度相等,但的长度相等,但s、、Sa不一定同是不一定同是“行数组行数组”或或“列数组列数组”2.5 二维数组的子数组寻访和赋值二维数组的子数组寻访和赋值22A=zeros(2,4) %创建创建2×4的全零数组的全零数组A = 0 0 0 0 0 0 0 0 A(:)=1:8 %全元素赋值方式全元素赋值方式A = 1 3 5 7 2 4 6 8 s=[2 3 5]; %产生单下标数组行数组产生单下标数组行数组A(s) %由由“单下标行数组单下标行数组”寻访产生寻访产生A元素组成的行数组元素组成的行数组Sa=[10 20 30]‘ %Sa是长度为是长度为3的的“列数组列数组”(行数组也可以)(行数组也可以)A(s)=Sa %单下标方式赋值单下标方式赋值 2.5 二维数组的子数组寻访和赋值二维数组的子数组寻访和赋值23ans = 2 3 5Sa = 10 20 30A = 1 20 30 7 10 4 6 8 A(:,[2 3])=ones(2) %双下标赋值方式:把双下标赋值方式:把A的第的第2、、3列元素全列元素全赋为赋为1A = 1 1 1 7 10 1 1 8 2.5 二维数组的子数组寻访和赋值二维数组的子数组寻访和赋值242.6 执行数组运算的常用函数执行数组运算的常用函数数组加、减、数组加、减、乘、除、幂乘、除、幂函数的数组运算规则:函数的数组运算规则:n函数函数f(.)对数组的运算相当于对数组的对数组的运算相当于对数组的每一个元素作相同的函数运算每一个元素作相同的函数运算大部分常用函数都执行数组运算大部分常用函数都执行数组运算三角、指数、复数、取整求余、坐标变换三角、指数、复数、取整求余、坐标变换252.7 数组运算和矩阵运算数组运算和矩阵运算矩阵运算有明确、严格的数学规则矩阵运算有明确、严格的数学规则数组运算是数组运算是MATLAB定义的规则定义的规则n目的:数据管理方便、操作简单、指令形式目的:数据管理方便、操作简单、指令形式自然、执行计算有效自然、执行计算有效n缺乏严谨的数学推理,本身仍在完善缺乏严谨的数学推理,本身仍在完善n影响随影响随MATLAB而扩大而扩大262.7 数组运算和矩阵运算数组运算和矩阵运算运算指令对照运算指令对照A.’ 非共轭转置非共轭转置 A’ 共轭转置共轭转置A.^n 各元素各元素n次幂次幂A^n方阵的方阵的n次幂次幂A.*B 对应元素相乘对应元素相乘A*B矩阵相乘矩阵相乘A./B A元素除以元素除以B元素元素A/BA右除右除BB.\A 同上同上B\AA左除左除Bexp(A) 对各元素求幂对各元素求幂expm(A)矩阵指数矩阵指数log(A) 对各元素求对数对各元素求对数logm(A)矩阵对数矩阵对数sqrt(A) 对各元素求方根对各元素求方根sqrtm(A)矩阵平方根矩阵平方根272.7 数组运算和矩阵运算数组运算和矩阵运算A=s 标量赋给标量赋给A的每个元素的每个元素(s和和A同大小同大小)A#B 对应元素关系运算对应元素关系运算(==,~=,>,<,>=,<=)A@B 对应元素逻辑运算对应元素逻辑运算(&,|,~)关系运算和逻辑运算仅对数组进行。
关系运算和逻辑运算仅对数组进行282.7 数组运算和矩阵运算数组运算和矩阵运算两种不同转置的比较两种不同转置的比较clear;A=zeros(2,3);A(:)=1:6; %全元素赋值法全元素赋值法A=A*(1+i) %运用标量与数组乘产生复数矩阵运用标量与数组乘产生复数矩阵A_A=A.' %数组转置,即非共轭转置数组转置,即非共轭转置A_M=A' %矩阵转置,即共轭转置矩阵转置,即共轭转置A = 1.0000 + 1.0000i 3.0000 + 3.0000i 5.0000 + 5.0000i 2.0000 + 2.0000i 4.0000 + 4.0000i 6.0000 + 6.0000iA_A = 1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i 4.0000 + 4.0000i 5.0000 + 5.0000i 6.0000 + 6.0000iA_M = 1.0000 - 1.0000i 2.0000 - 2.0000i 3.0000 - 3.0000i 4.0000 - 4.0000i 5.0000 - 5.0000i 6.0000 - 6.0000i29两种不同乘的比较两种不同乘的比较clear;A=[1,2;3,4]B=[2,3;4,5]C_A=A.*BC_M=A*BA =1 2 3 4B =2 3 4 5C =2 6 12 20D =10 13 22 292.7 数组运算和矩阵运算数组运算和矩阵运算302.7 数组运算和矩阵运算数组运算和矩阵运算两种不同求平方根的比较两种不同求平方根的比较clear;B=[4,9;16,25]B_A=sqrt(B)B_M=sqrtm(B)B = 4 9 16 25B_A = 2 3 4 5B_M = 0.9421 + 0.9969i 1.5572 - 0.3393i 2.7683 - 0.6032i 4.5756 + 0.2053i312.8 标准数组生成函数和数组标准数组生成函数和数组操作函数操作函数1.标准数组生成函数标准数组生成函数diag产生对角形数组产生对角形数组eye产生单位数组产生单位数组magic产生魔方数组产生魔方数组 (以上三类数组不适用于高维,只适用于二维以下)(以上三类数组不适用于高维,只适用于二维以下)ones产生全产生全1数组数组rand产生均匀分布随机数组产生均匀分布随机数组randn 产生正态分布随机数组产生正态分布随机数组zeros产生全产生全0数组数组322.8 标准数组生成函数和数组标准数组生成函数和数组操作函数操作函数标准数组产生的演示标准数组产生的演示ones(1,2) %产生长度为产生长度为2的全的全1行数组行数组ans = 1 1 randn(‘state’,0)%把正态随机数发生器置把正态随机数发生器置0A=randn(2,3)%产生产生2×3的正态随机阵的正态随机阵A = -0.4326 0.1253 -1.1465 -1.6656 0.2877 1.1909 B=eye(3) %产生产生3×3的单位阵的单位阵B = 1 0 0 0 1 0 0 0 1332.8 标准数组生成函数和数组标准数组生成函数和数组操作函数操作函数C=diag(A) %取取A阵的对角元阵的对角元C = -0.4326 0.2877D=diag(C) %内内diag取取A的对角元,外的对角元,外diag利用一维利用一维数组生成对角阵数组生成对角阵D = -0.4326 0 0 0.2877342.8 标准数组生成函数和数组标准数组生成函数和数组操作函数操作函数2.数组操作函数数组操作函数(P115表表3.2--3)rot90把数组逆时针旋转把数组逆时针旋转90度度diag 提取对角元素,或生成对角阵提取对角元素,或生成对角阵flipud上下交换上下交换fliplr左右交换左右交换repmat按指定的行数列数铺放模块数组按指定的行数列数铺放模块数组reshape 改变行数列数,元素数不变改变行数列数,元素数不变以上指令只适用于以上指令只适用于二维数组二维数组352.8 标准数组生成函数和数组操作函数reshape的使用演示的使用演示a=-4:4A=reshape(a,3,3) %把一维数组把一维数组a重排成重排成3×33×3的二维数组的二维数组a = -4 -3 -2 -1 0 1 2 3 4A = -4 -1 2 -3 0 3 -2 1 4 36diag的使用演示的使用演示b=diag(A) %取取A元素对角阵生成数组元素对角阵生成数组bB=diag(b) %根据根据b数组生成数组生成B对角矩阵对角矩阵b = -4 0 4B = -4 0 0 0 0 0 0 0 42.8 标准数组生成函数和数组标准数组生成函数和数组操作函数操作函数A =A = -4 -1 2 -4 -1 2 -3 0 3 -3 0 3 -2 1 4 -2 1 437repmat使用演示B1=repmat(B,2,2)B1 = -4 0 0 -4 0 0 0 0 0 0 0 0 0 0 4 0 0 4 -4 0 0 -4 0 0 0 0 0 0 0 0 0 0 4 0 0 42.8 标准数组生成函数和数组标准数组生成函数和数组操作函数操作函数382.8 标准数组生成函数和数组标准数组生成函数和数组操作函数操作函数flipudflipud和和fliplrfliplr使用演示使用演示flipud(A) %上下对称交换上下对称交换 ans = -2 1 4 -3 0 3 -4 -1 2 fliplr(A) %左右对称交换左右对称交换 ans = 2 -1 -4 3 0 -3 4 1 -2A =A = -4 -1 2 -4 -1 2 -3 0 3 -3 0 3 -2 1 4 -2 1 4392.9 数组构作技法综合数组构作技法综合1.数组的扩展数组的扩展赋值扩展法赋值扩展法A=reshape(1:9,3,3)%创建创建3×3数组数组AA = 1 4 7 2 5 8 3 6 9 402.9 数组构作技法综合数组构作技法综合A(5,5)=111%扩展为扩展为5×5数组。
扩展部分除数组扩展部分除((5,,5)元素为)元素为111外,其余均为外,其余均为0A = 1 4 7 0 0 2 5 8 0 0 3 6 9 0 0 0 0 0 0 0 0 0 0 0 111412.9 数组构作技法综合数组构作技法综合A(:,6)=222 %标量对子数组赋值,扩展为标量对子数组赋值,扩展为5×6数组数组 A = 1 4 7 0 0 222 2 5 8 0 0 222 3 6 9 0 0 222 0 0 0 0 0 222 0 0 0 0 111 222 422.9 数组构作技法综合数组构作技法综合多次寻访扩展法多次寻访扩展法AA=A(:,[1:6,1:6])%相当于指令相当于指令repmat(A,1,2)AA = 1 4 7 0 0 222 1 4 7 0 0 222 2 5 8 0 0 222 2 5 8 0 0 222 3 6 9 0 0 222 3 6 9 0 0 222 0 0 0 0 0 222 0 0 0 0 0 222 0 0 0 0 111 222 0 0 0 0 111 222 指令指令repmat 中,中,A为模块数组,为模块数组,1表示行方向上铺一块,表示行方向上铺一块,2表示列表示列方向上铺两块。
方向上铺两块A = 1 4 7 0 0 222 2 5 8 0 0 222 3 6 9 0 0 222 0 0 0 0 0 222 0 0 0 0 111 222432.9 数组构作技法综合数组构作技法综合合成扩展法合成扩展法B=ones(2,6)%创建创建2×6全全1数组数组B = 1 1 1 1 1 1 1 1 1 1 1 1 442.9 数组构作技法综合数组构作技法综合AB_r=[A;B]%行数扩展合成行数扩展合成AB_r = 1 4 7 0 0 222 2 5 8 0 0 222 3 6 9 0 0 222 0 0 0 0 0 222 0 0 0 0 111 222 1 1 1 1 1 1 1 1 1 1 1 1 452.9 数组构作技法综合数组构作技法综合AB_c=[A,B(:,1:5)']%列数扩展合成列数扩展合成AB_c = 1 4 7 0 0 222 1 1 2 5 8 0 0 222 1 1 3 6 9 0 0 222 1 1 0 0 0 0 0 222 1 1 0 0 0 0 111 222 1 1 462.9 数组构作技法综合数组构作技法综合2.单下标寻访和单下标寻访和reshape指令演示指令演示clear %清除内存变量清除内存变量A=reshape(1:16,2,8)%变一维数组成变一维数组成2×8数组数组A = 1 3 5 7 9 11 13 15 2 4 6 8 10 12 14 16 472.9 数组构作技法综合数组构作技法综合reshape(A,4,4) %变变2×8数组为数组为4×4数组数组ans = 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16482.9 数组构作技法综合数组构作技法综合s=[1 3 6 8 9 11 14 16];%定义定义“单下标单下标”数组数组A(s)=0 %利用利用“单下标单下标”数组对数组对A的元素重新赋值的元素重新赋值A = 0 0 5 7 0 0 13 15 2 4 0 0 10 12 0 0 492.9 数组构作技法综合数组构作技法综合3.逻辑函数的运用演示逻辑函数的运用演示randn(‘state’,1),R=randn(3,6) %创建正态随机阵创建正态随机阵R = 0.8644 0.8735 -1.1027 0.1684 -0.5523 -0.6149 0.0942 -0.4380 0.3962 -1.9654 -0.8197 -0.2546 -0.8519 -0.4297 -0.9649 -0.7443 1.1091 -0.2698 L=abs(R)<0.5|abs(R)>1.5 %不等式条件运算,结果给出逻辑数组不等式条件运算,结果给出逻辑数组L = 0 0 0 1 0 0 1 1 1 1 0 1 0 1 0 0 0 1 50R(L)=0%“逻辑逻辑1”对应的元素赋对应的元素赋0值值R = 0.8644 0.8735 -1.1027 0 -0.5523 -0.6149 0 0 0 0 -0.8197 0 -0.8519 0 -0.9649 -0.7443 1.1091 0 2.9 数组构作技法综合数组构作技法综合512.9 数组构作技法综合数组构作技法综合s=(find(R==0))’ %利用利用find获得符合关系等式条件的元素获得符合关系等式条件的元素“单单下标下标”一维行数组一维行数组s = 2 5 6 8 10 11 17 18 R(s)=111 %利用利用“单下标单下标”定位赋值定位赋值R = 0.8644 0.8735 -1.1027 111.0000 -0.5523 -0.6149 111.0000 111.0000 111.0000 111.0000 -0.8197 111.0000 -0.8519 111.0000 -0.9649 -0.7443 1.1091 111.0000 522.9 数组构作技法综合数组构作技法综合[ii,jj]=find(R<0);%利利用用find获获得得符符合合关关系系等等式式条件的元素条件的元素“双下标双下标”disp(ii'),disp(jj') 3 1 3 3 1 2 1 1 3 3 4 5 5 6 结果第一行表示元素行数,第二行表示元素列数。
结果第一行表示元素行数,第二行表示元素列数532.10 高维数组高维数组三维数组三维数组n行(行(Row),列(),列(Column),页),页((Page))n行(一维),矩形面(二维)行(一维),矩形面(二维)n长方体(三维)长方体(三维)高维数组高维数组542.10 高维数组高维数组1.高维数组的创建高维数组的创建常用的四种创建方法:常用的四种创建方法:n直接直接“全下标全下标”赋值赋值n由若干同样大小的低维数组组合由若干同样大小的低维数组组合n由函数由函数ones,,zeros,,rand,,randn创建创建n由由repmat,,reshape等函数构造等函数构造552.10 高维数组高维数组“全下标全下标”赋值法赋值法A(2,2,2)=1%单元素赋值创建单元素赋值创建2×2×2数组数组B(2,5,:)=1:3%子数组赋值创建子数组赋值创建2×5×3数组数组562.10 高维数组高维数组由函数由函数ones,,zeros,,rand,,randn创创建建rand(‘state’,1111),rand(2,4,3) %产生均匀分布随机数组产生均匀分布随机数组572.10 高维数组高维数组reshape(1:12,2,2,3)nreshape的第一个输入量是待重组的数组,后的第一个输入量是待重组的数组,后面的输入量是要生成数组的各维大小面的输入量是要生成数组的各维大小n生成数组总元素数必须与待重组数组总元素数生成数组总元素数必须与待重组数组总元素数要相等要相等n元素放置顺序遵循单下标规则元素放置顺序遵循单下标规则582.10 高维数组高维数组2.高维数组的标识高维数组的标识数组的数组的维数维数((dimension))n行(列)数组行(列)数组/向量,维数为向量,维数为1n矩阵的维数为矩阵的维数为2n指令指令ndims(A)可直接给出数组可直接给出数组A的维数的维数592.10 高维数组高维数组数组的数组的大小大小((Size))n指令指令size(A)给出给出A各维的大小:行数、列数各维的大小:行数、列数…n指令指令length(A)给出所有维中的最大长度给出所有维中的最大长度clear;A=reshape(1:24,2,3,4);dim_A=ndims(A)%测量测量A的维数的维数size_A=size(A)%测量测量A的大小的大小L_A=length(A)%求求A的长度的长度3 32 3 42 3 44 4602.11 “非数非数”和和“空空”数组数组1.1.非数非数NaNIEEE规定规定0/0,∞×∞,0×∞都会产生非数都会产生非数NaN的性质:的性质:n传递性传递性,, NaN参与运算所得结果也是参与运算所得结果也是NaNn没有没有“大小大小”概念,不能比较两个非数的大小概念,不能比较两个非数的大小612.11 “非数非数”和和“空空”数组数组非数的产生非数的产生a=0/0,b=0*log(0),c=inf-inf非数的传递性非数的传递性0*a,sin(a)非数的属性判断非数的属性判断class(a) %数据类型归属数据类型归属isnan(a) %该指令唯一能正确判断非数的指令该指令唯一能正确判断非数的指令622.11 “非数非数”和和“空空”数组数组非数元素的寻访非数元素的寻访rand('state',0)R=rand(2,5);R(1,5)=NaN;R(2,3)=NaN %产生一个均匀分布产生一个均匀分布随机随机数组,其中元素(数组,其中元素(1 1,,5 5)和元素()和元素(2 2,,3 3)为非数元素)为非数元素R= 0.9501 0.6068 0.8913 0.4565 NaN 0.2311 0.4860 NaN 0.0185 0.4447LR=isnan(R) %对数组元素是否非数进行判断对数组元素是否非数进行判断 %找出非数元素的位置标识找出非数元素的位置标识LR = 0 0 0 0 1 0 0 1 0 0632.11 “非数”和“空”数组si=find(LR)%非数的非数的“单下标单下标”si = 6 9[ri,ci]=ind2sub(size(R),si) %转换成转换成“全下标全下标”标识标识[rj,cj]=find(LR) %直接确定全下标直接确定全下标disp(‘disp(‘非数在二维数组非数在二维数组R R中的位置中的位置’)’)disp([‘单下标时的第单下标时的第’,int2str(si(1)),’和第和第‘, int2str(si(2)),’个元素个元素‘]) %输出输出“全下标全下标”标识标识64ri = 2 1ci = 3 5rj = 2 1cj = 3 5非数在二维数组非数在二维数组R中的位置中的位置单下标时的第单下标时的第6和第和第9个元素个元素2.11 “非数非数”和和“空空”数组数组652.11 “非数非数”和和“空空”数组数组2.“空空”数组数组是是MATLAB为操作和表述需要专门设计的为操作和表述需要专门设计的某维或若干维某维或若干维长度为长度为0的数组的数组662.11 “非数非数”和和“空空”数组数组注意:注意:n“空空”数组不同于全零数组数组不同于全零数组n“空空”数组不是数组不是“虚无虚无”,存在于工作空间,存在于工作空间n判断是否判断是否“空空”::isemptyn不具备传递性,得不具备传递性,得“空空”结果要谨慎解释结果要谨慎解释672.11 “非数非数”和和“空空”数组数组创建创建““空空””数组的几种方法数组的几种方法a=[],b=ones(2,0),c=zeros(2,0) ,d=eye(2,0),f=rand(2,3,0,4)““空空””数组的属性数组的属性class(a)%“空空”的数据类别的数据类别ans= doubleisnumeric(a)%是数值数组类吗是数值数组类吗ans= 1isempty(a) %唯一可正确判断数组是否唯一可正确判断数组是否“空空”的指令的指令ans= 1682.11 “非数非数”和和“空空”数组数组which a % a是什么是什么a is a variable ndims(a)%数组数组a的维数的维数ans= 2 size(a)%a数组的大小数组的大小ans= 0 0692.11 “非数非数”和和“空空”数组数组用于子数组的删除和大数组的大小收缩用于子数组的删除和大数组的大小收缩A=reshape(-4:5,2,5)%创建一个数值数组创建一个数值数组AA = -4 -2 0 2 4 -3 -1 1 3 5A(:,[2,4])=[]%删除删除A的第二、四列的第二、四列 A = -4 0 4 -3 1 5A(1,:)=[] %删除删除A A的第一行的第一行A = -3 -1 1 3 5 702.12 关系操作和逻辑操作关系操作和逻辑操作MATLAB的约定:的约定:n任何任何非非0数认为是数认为是“逻辑逻辑真真” 只有只有0作为作为“逻辑逻辑假假”n关系表达式和逻辑表达式的计算结果是关系表达式和逻辑表达式的计算结果是“逻逻辑数组(辑数组(Logical Array))”w1表示表示“真真”,,0表示表示“假假”n逻辑数组是一种逻辑数组是一种特殊特殊的的数值数组数值数组 数值类的有关操作和函数同样适用数值类的有关操作和函数同样适用712.12 关系操作和逻辑操作关系操作和逻辑操作1.关系操作关系操作<小于小于<= 小于等于小于等于>大于大于>= 大于等于大于等于== 等于等于~= 不等于不等于标量与数组比较,标量与每个元素比较标量与数组比较,标量与每个元素比较两数组比较,必须同维同大小两数组比较,必须同维同大小722.12 关系操作和逻辑操作关系操作和逻辑操作关系运算示例关系运算示例A=1:9,B=10-A,r0=(A<4),r1=(A==B)关系运算和关系运算和NaN的运用之一:的运用之一: --- ---求近似极限,修补图形缺口求近似极限,修补图形缺口t=-2*pi:pi/10:2*pi;%自变量数组中存在自变量数组中存在0值值y=sin(t)./t; %在在t=0处,计算将产生处,计算将产生NaNtt=t+(t==0)*eps; %逻辑数组参与运算,使逻辑数组参与运算,使0元素元素 被被 一个一个“机器零机器零”小数代替小数代替yy=sin(tt)./tt; %用数值可算的用数值可算的sin(eps)/eps近似近似 替代替代sin(0)/0极限极限732.12 关系操作和逻辑操作关系操作和逻辑操作subplot(1,2,1),plot(t,y); %使(使(1×2)幅子图中的第)幅子图中的第1幅成为当前图,绘制曲线幅成为当前图,绘制曲线axis([-7,7,-0.5,1.2]); %坐标控制指令,设定坐标范围坐标控制指令,设定坐标范围xlabel(‘t’),ylabel(‘y’),title(‘残缺图形残缺图形’);%坐标轴命名,书写图名坐标轴命名,书写图名subplot(1,2,2),plot(tt,yy); %使(使(1×2)幅子图中的第)幅子图中的第2幅成为当前图,绘制曲线幅成为当前图,绘制曲线axis([-7,7,-0.5,1.2]);xlabel(‘t’),ylabel(‘yy’),title(‘正确图形正确图形’);74752.12 关系操作和逻辑操作关系操作和逻辑操作左图残缺,右图连续完整左图残缺,右图连续完整这是这是典型典型的处理极限的的处理极限的方法方法NaN在绘图中的一个用途:在绘图中的一个用途: 对曲线或曲面进行裁剪对曲线或曲面进行裁剪762.12 关系操作和逻辑操作关系操作和逻辑操作2.逻辑操作逻辑操作 & 与与 |或或 ~非非 xor 异或异或标量与数组的逻辑运算在标量与每个元标量与数组的逻辑运算在标量与每个元素之间进行素之间进行数组之间的运算,要求数组同维同大小数组之间的运算,要求数组同维同大小772.12 关系操作和逻辑操作关系操作和逻辑操作逻辑操作示例逻辑操作示例A=1:9,L1=~(A>5) %判断判断A中,哪些元素不大于中,哪些元素不大于5L2=(A>3)&(A<7)%判断判断A中,哪些元素大于中,哪些元素大于3小于小于7A = 1 2 3 4 5 6 7 8 9L1 = 1 1 1 1 1 0 0 0 0L2 = 0 0 0 1 1 1 0 0 0逻辑操作应用之一:逐段解析函数的计算和表现逻辑操作应用之一:逐段解析函数的计算和表现 削顶整流正弦半波的计算和图形绘制削顶整流正弦半波的计算和图形绘制783.常用逻辑函数演示常用逻辑函数演示(见书(见书P131表表3.5--3))clear;A=[1,2,0;3,0,0]A = 1 2 0 3 0 0logical(A)ans = 1 1 0 1 0 02.12 关系操作和逻辑操作关系操作和逻辑操作79B=true(2,3)B = 1 1 1 1 1 1islogical(B)ans = 12.12 关系操作和逻辑操作关系操作和逻辑操作80小结小结掌握数值数组的创建和寻访方法掌握数值数组的创建和寻访方法理解数组运算和矩阵运算的含义理解数组运算和矩阵运算的含义熟悉标准数组生成函数和数组操作函数熟悉标准数组生成函数和数组操作函数的运用的运用熟悉两类特殊数组的应用熟悉两类特殊数组的应用了解关系运算和逻辑运算及应用了解关系运算和逻辑运算及应用81。












