第二讲数值数组及其运算_第1页
第二讲数值数组及其运算_第2页
第二讲数值数组及其运算_第3页
第二讲数值数组及其运算_第4页
第二讲数值数组及其运算_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

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

文档简介

1、第二讲 数值数组及其运算数值数组和数组运算始终是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)一维的“行”或“列”二维的“矩形”三维的“若干矩形的堆叠”更高的任意维42.1 引言数组运算:无论对数

2、组施加什么运算(包括函数),总认为是对数组中每个元素平等的实施同样的操作设计数组和数组运算的目的:使程序简单、易读;更接近数学公式提高程序向量化程度,提高计算效率,节省系统开销52.1 引言绘制函数 在0 x1时的曲线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。得到111的数组第二句中,指数函数exp(-x)对x每个元素求值,结果也是111的数组数组乘是两个数组对应

3、元素相乘,得到y也是111的数组连续函数必须在相应区间上采样才能进行数值计算62.1 引言72.2 一维数组的创建和寻访1. 一维数组的创建逐个元素输入x=2 pi/2 sqrt(3) 3+5i冒号生成格式 x=a:inc:ba是第一个元素,inc是步长(缺省为1)若(b-a)是inc的整数倍,则生成数组最后一个元素等于b,否则小于b inc可取正数或负数。取正:ab82.2 一维数组的创建和寻访线性采样格式 x=linspace(a,b,n)a,b是第一个和最后一个元素,n是采样点数生成1n的数组等价于x=a:(b-a)/(n-1):b运用MATLAB函数生成法如rand,zeros,one

4、s等以上均为行数组,列数组转置即可92.2 一维数组的创建和寻访2.一维数组子数组的寻访和赋值子数组的寻访(Address)rand(state,0)%把均匀分布伪随机发生器置为0状态x=rand(1,5) %产生15的均布随机数组x(3) %寻访数组x的第三个元素x(1 2 5)%寻访数组x的第一、二、五个元素组成的子数组x(1:3) %寻访前三个元素组成的子数组x(3:end)%寻访除前2个元素外的全部其他元素。end是最后一个元素的下标x(3:-1:1) %由前三个元素倒排构成的子数组x(find(x0.5) %由大于0.5的元素构成的子数组x(1 2 3 4 4 3 2 1)%对元素可

5、以重复寻访,使所得数组长度允许大于原数组102.2 一维数组的创建和寻访子数组的赋值(Assign)x(3) = 0 %第三个元素赋值为0 x(1 4)=1 1 %第一、四个元素都赋值为1保证被赋值的子数组长度与送入的数组长度相同112.3 二维数组的创建二维数组与矩阵二维数组是由实数或复数排列成矩形构成的从数据结构上看,矩阵和二维数组没有区别当二维数组带有线性变换含义时,就是矩阵122.3 二维数组的创建1.直接输入法二维数组三要素:整个数组必须以“”为首尾数组行与行之间必须用“;”或回车隔离数组元素必须用“,”或空格分隔132.3 二维数组的创建在MATLAB环境下,用下面三条指令创建二维

6、数组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,16CN=M_r+i*M_i %由实部、虚部数组构成复数数组M_r = 1 2 3 4 5 6M_

7、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.“全下标”标识经典教科书的标识法即指出是

8、“第几行,第几列”的元素优点:几何概念清楚,引述简单。(最常用)“全下标”由两个下标组成:行下标,列下标。例如:A(2,5)172.4 二维数组元素的标识2.“单下标”标识就是用一个下标来指明元素在数组中的位置对二维数组元素进行“一维编号”把二维数组所有列,按先左后右的次序,首尾相接排成“一维长列”,然后自上往下编号“单下标”与“全下标”转换关系:以(mn)的二维数组A为例,全下标元素位置是“第r行,第c列”,改为单下标表示为a=(c-1)m+r。MATLAB有两个指令可实现此转换:sub2ind 据全下标算出单下标ind2sub 据单下标算出全下标182.4 二维数组元素的标识3.“逻辑1”

9、标识常用问题:寻找数组中大于某值的元素找出数组 中所有绝对值大于3的元素A=zeros(2,5); %预生成一个25全零数组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”

10、的位置指示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

11、“单下标”部分元素赋值。结果:保持A的“行宽、列长”不变。条件:s单下标数组长度必须与一维数组Sa的长度相等,但s、Sa不一定同是“行数组”或“列数组”。2.5 二维数组的子数组寻访和赋值22A=zeros(2,4) %创建24的全零数组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 =

12、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 执行数组运算的常用函数数组加、减、乘、除、幂函数的数组运算规则:函数f(.)对数组的运算相当于对数组的每一个元素作相同的函数运算大部分常用函数都执行数组运算三角、指数、复数、取整求余、坐标变换252.7 数组运算和矩阵运算矩阵运算有明确、严格的数学规则数组运算是MATLAB定义的规则目的:数据管理方便、操作简单、指令形式自然、执行计算有效缺乏严谨的

13、数学推理,本身仍在完善影响随MATLAB而扩大262.7 数组运算和矩阵运算运算指令对照A. 非共轭转置 A 共轭转置A.n各元素n次幂An方阵的n次幂A.*B对应元素相乘A*B矩阵相乘A./BA元素除以B元素A/BA右除BB.A同上BAA左除Bexp(A) 对各元素求幂expm(A)矩阵指数log(A) 对各元素求对数logm(A)矩阵对数sqrt(A) 对各元素求方根sqrtm(A)矩阵平方根272.7 数组运算和矩阵运算A=s标量赋给A的每个元素(s和A同大小)A#B对应元素关系运算(=,=,=,=)AB对应元素逻辑运算(&,|,)关系运算和逻辑运算仅对数组进行。282.7 数组运算和矩

14、阵运算两种不同转置的比较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.0

15、000i 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,4B=2,3;4,5C_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,25B_A=sqrt(B)B_M=sqrtm(

16、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

17、 randn(state,0)%把正态随机数发生器置0A=randn(2,3)%产生23的正态随机阵A = -0.4326 0.1253 -1.1465 -1.6656 0.2877 1.1909 B=eye(3) %产生33的单位阵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.23)rot9

18、0把数组逆时针旋转90度diag 提取对角元素,或生成对角阵flipud上下交换fliplr左右交换repmat按指定的行数列数铺放模块数组reshape改变行数列数,元素数不变以上指令只适用于二维数组352.8 标准数组生成函数和数组操作函数reshape的使用演示a=-4:4A=reshape(a,3,3) %把一维数组a重排成33的二维数组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

19、 0 0 0 0 0 0 42.8 标准数组生成函数和数组操作函数A = -4 -1 2 -3 0 3 -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 标准数组生成函数和数组操作函数flipud和fliplr使用演示flipud(A) %上下对称交换 ans = -2 1 4 -3 0 3 -4 -1 2 fliplr(A) %左右对称交换 ans = 2 -1 -4

20、 3 0 -3 4 1 -2A = -4 -1 2 -3 0 3 -2 1 4392.9 数组构作技法综合1.数组的扩展赋值扩展法A=reshape(1:9,3,3)%创建33数组AA = 1 4 7 2 5 8 3 6 9 402.9 数组构作技法综合A(5,5)=111%扩展为55数组。扩展部分除(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 %标量对子数组赋值,扩展为56数组 A = 1 4 7 0 0 222 2 5 8 0 0 222 3

21、 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

22、 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)%创建26全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_

23、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)%变一维数组成28数组A = 1 3 5 7 9 11 13 15 2 4 6 8 10 12 14 16 472.9 数组构作技法综合reshape(A,4,4) %变28数组为44数组ans = 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 164

24、82.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.

25、1091 -0.2698 L=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)=1

26、11 %利用“单下标”定位赋值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(R0);%利用find获得符合关系等式条件的元素“双下标”disp(ii),disp(jj) 3 1 3 3 1 2 1 1 3 3 4 5 5 6 结果第一行表示元素行数,第二行表示元素列数。532.10 高维数

27、组三维数组行(Row),列(Column),页(Page)行(一维),矩形面(二维)长方体(三维)高维数组542.10 高维数组1.高维数组的创建常用的四种创建方法:直接“全下标”赋值由若干同样大小的低维数组组合由函数ones,zeros,rand,randn创建由repmat,reshape等函数构造552.10 高维数组“全下标”赋值法A(2,2,2)=1%单元素赋值创建222数组B(2,5,:)=1:3%子数组赋值创建253数组562.10 高维数组由函数ones,zeros,rand,randn创建rand(state,1111),rand(2,4,3) %产生均匀分布随机数组572.

28、10 高维数组reshape(1:12,2,2,3)reshape的第一个输入量是待重组的数组,后面的输入量是要生成数组的各维大小生成数组总元素数必须与待重组数组总元素数要相等元素放置顺序遵循单下标规则582.10 高维数组2.高维数组的标识数组的维数(dimension)行(列)数组/向量,维数为1矩阵的维数为2指令ndims(A)可直接给出数组A的维数592.10 高维数组数组的大小(Size)指令size(A)给出A各维的大小:行数、列数指令length(A)给出所有维中的最大长度clear;A=reshape(1:24,2,3,4);dim_A=ndims(A)%测量A的维数size_

29、A=size(A)%测量A的大小L_A=length(A)%求A的长度32 3 44602.11 “非数”和“空”数组1.非数NaNIEEE规定0/0,0都会产生非数NaN的性质:传递性, NaN参与运算所得结果也是NaN没有“大小”概念,不能比较两个非数的大小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)=N

30、aN;R(2,3)=NaN %产生一个均匀分布随机数组,其中元素(1,5)和元素(2,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 9ri,ci=ind2sub(size(R),si) %转换成“全下标”标识rj,cj=find(LR) %直接确定全下标disp(非数在二维数组R中的位

31、置)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 “非数”和“空”数组注意:“空”数组不同于全零数组“空”数组不是“虚无”,存在于工作空间判断是否“空”:isempty不具备传递性,得“空”结果要谨慎解释672.11 “非数”和“空”数组创建“空”数组的几种

温馨提示

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

评论

0/150

提交评论