1 / 125

二维数值数组及其应用

二维数值数组及其应用. 一、二维数组简介 二、创建二维数组 三、二维数组的访问(引用)和赋值 四、数组运算 五、二维数组操作函数 六、与数组相关的函数 七、二维数组在绘图中的应用 八、二维数组在线性代数中的应用. 一、二维数组简介. 二维数组( array )是由实数或复数排列成矩形而构成的,从数据结构上看,二维数组和矩阵没有什么区别。当二维数组带有线性变换含义时,该二维数组就是矩阵( matrix )。. 1 、二维数组与矩阵. 2 、标量、向量、矩阵都是二维数组.

malik-lott
Download Presentation

二维数值数组及其应用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 二维数值数组及其应用 一、二维数组简介 二、创建二维数组 三、二维数组的访问(引用)和赋值 四、数组运算 五、二维数组操作函数 六、与数组相关的函数 七、二维数组在绘图中的应用 八、二维数组在线性代数中的应用

  2. 一、二维数组简介 二维数组(array)是由实数或复数排列成矩形而构成的,从数据结构上看,二维数组和矩阵没有什么区别。当二维数组带有线性变换含义时,该二维数组就是矩阵(matrix)。 1、二维数组与矩阵

  3. 2、标量、向量、矩阵都是二维数组   一个数,称为标量(scalor),在Matlab中看作为 1 X 1 二维数组(矩阵) n个元素排成一行,称为行向量(row vector),在Maltab中被看作为 1 X n 二维数组(矩阵) n个元素排成一列,称为列向量(column vector),在Matlab中看作为 n X1 二维数组(矩阵)   在Matlab中提到向量,一般都是指的列向量

  4. 3、二维数组(矩阵)可以看作为:

  5. 4、Matlab二维数组在内存中的存储方式 列优先

  6. (1)在键盘上输入下列内容 A = [1,2,3; 4,5,6; 7,8,9] (2)按【Enter】键,指令被执行。 (3)在指令执行后,MATLAB指令窗中将显示以下结果: A = 1 2 3 4 5 6 7 8 9 二、创建二维数组 1、用方括号[ ]创建二维数组 说明:输入二维数组时,每行元素用逗号分隔,行与行之间用分号分隔,整个二维数组放在方括号[ ]里,标点符号一定要在英文状态下输入。二维数组一般用大写字母表示。

  7. 2、用方括号[ ]由一维数组创建二维数组 a = [1,3,5] b = [2,4,6] c = [3,5,7] D = [a;b] E = [b;c] F = [D,E] G = [a’,b’,c’] H = [G;G]

  8. 3、用Matlab提供的函数创建二维数组

  9. diag(v,k)

  10. 列向量 行向量 二维数组 列× 行= 二维数组 4、利用矩阵乘法由一维数组创建二维数组 x = linspace(0,2*pi) x = x’ y = [1,2,3] C = x*y

  11. 5、根据数组元素的规律,用matlab脚本创建二维数组5、根据数组元素的规律,用matlab脚本创建二维数组 A = zeros(n,n) for i = 1:n for j = 1:n A(i,j) = 1/(i+j-1); end end   希尔伯特矩阵是高度病态的,即任何一个元素发生一点变动,整个矩阵的值和逆矩阵都会发生巨大变化,病态程度和阶数相关。

  12. 练习:在matlab中生成如下的二维数组 A = 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 B = 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 4 -4 0 0 0 0 -3 0 0 0 0 -2 0 0 0 0 -1

  13. 三、二维数组的数组运算 1、二维数组的转置运算 A.’ A’ 对A做转置(行→列,列→行) 对A做共轭转置 若A的元素均为实数,则A.’与A’的结果相同 B = A.’ 对数组A做转置运算,将运算结果赋值给变量B,内存中数组A的内容并没有任何变化。

  14. 2、两个维数相同的二维数组之间的数学运算 运算结果为与A、B同维的数组 • A + B:加,对应位置的数组元素相加 • A - B:减,对应位置的数组元素相减 • A.*B:点乘,对应位置的数组元素相乘 • A./B:右点除,对应位置的数组元素相除 • A.\B:左点除 • A.^B:点幂,对应位置的数组元素做幂运算

  15. 3、二维数组与标量的之间的数组运算 A + c :A的每个元素加c A - c: A的每个元素减c A.*c 或 A*c:A的每个元素乘c, A./c 或 A/c: A的每个元素除以c A.\c 或 A\c:c除以A的每个元素 A.^c:点幂, A的每个元素做幂运算 c.^A:点幂,c做幂运算 运算结果为与A同维的数组

  16. 练习:试写出下列matlab语句的输出结果,并在matlab中进行验证。练习:试写出下列matlab语句的输出结果,并在matlab中进行验证。 A = ones(3) B = eye(3) C = zeros(3) D = (A+B).*(A-B) E = (D + 1) + (D - 1)*i F = E.’./E’ + E.’.\E’ G = B.^D + D.^B

  17. 4、二维数组的关系运算 一个二维数组可以与另一个同维的数组,或一个标量进行关系运算,返回一个由0和1组成的同维的“逻辑数组” 。

  18. 5、二维数组的逻辑运算 一个二维数组可以与另一个同维的数组,或一个标量进行逻辑运算,返回一个由0和1组成的同维的“逻辑数组”   任何非 0 实数都被看作是“逻辑真”(true),只有 0 才被认为是“逻辑假”(false)。

  19. 6、函数作用在二维数组上的运算规则 Matlab中的很多函数都可以直接以数组作为输入参数,函数输出也为数组。 输入为二维数组, 输出也为二维数组

  20. 7、二维数组用做for循环的循环变量 forx = array statement (循环体) end x 为循环变量,数组 array 的列数决定 for 循环的次数。每次循环,x依次取数组array 的一列 s1 = 0; for x = [1,2,3,4] s1 = s1 + x; end s2 = 0; for x = [1,2;3,4] s2 = s2 + x; end s1 = ? s2 = ?

  21. 8、二维数组用于 if 结构的条件表达式 ifexpression statements end 一般情况下,表达式 expression 都是标量,但也允许为数组,此时只有数组元素都为逻辑真时,statements才被执行。如果表达式为空数组,被认为是假。 a = [0,1;2,3]; b = 1:3; if a b = b.^2; else b = 2.^b; end a = [0,1;2,3]; b = 1:3; if a-0.1 b = b.^2; else b = 2.^b; end b = ? b = ?

  22. 1、二维数组单个元素的访问和赋值 四、二维数组的访问(引用)和赋值 (1)A(r,c)全下标 A =[1:3;2:2:6;3:3:9] a = A(2,3) b = A(1,end) A(3,2) = 0 A(end,1) = A(end,end) 指出是“第几行,第几列”的元素 (2) A(ind)单下标(Linear Index)   只用一个下标来指明元素在数组中的位置:把二维数组的所有列,按先左后右的次序,首尾相接排成“一维长列”,然后,自上往下对元素位置进行标号。 c = A(7) d = A(end) A(end) = c+d

  23. (3) 二维数组扩展大小 A = 1 0 0 7 0 1 0 0 0 0 1 0 A = 1 0 0 0 1 0 0 0 1 A =eye(3) A(1,4) = 7 B =eye(3) B(10) = 7 B = 1 0 0 0 1 0 0 0 1 In an assignment A(I) = B, a matrix A cannot be resized. 使用单下标,无法扩展二维数组!

  24. (4)“单下标”与“全下标”的转化: ind = sub2ind(siz,r,c) 全下标→单下标 [r,c] = ind2sub(siz,ind) 单下标→全下标 A =eye(4,5) ind = sub2ind(size(A),2,3) [a, b] = ind2sub(size(A),19)

  25. 2、二维数组的子数组 的引用和赋值 (1)使用“双下标”方式 A =eye(5,6) B1 = A(2,:) C1 = A([2,2],:) D1 = A([1,2,4],:) E1 = A(1:2:end,:) B2 = A(:,2) C2 = A(:,[2,2]) D2 = A(:,[1,2,4]) E2 = A(:,1:2:end) B3 = A([2,3],[3,2]) C3 = A([1,2,1],[2,2,3]) D3 = A([1,3,5],[1,2,4]) E3 = A(:,:)

  26. (2)使用“单下标”方式

  27. (3) 使用 “ 逻辑索引 ” 逻辑索引:通过逻辑数组中“逻辑1”所在的位置,指出数组中元素的的位置,从而可以对数组中的元素(子数组)进行访问或赋值。 逻辑数组的元素个数应等于或小于 被索引的数组的元素个数,一般情况下,两者维数应相同。 x = 1:10 L = logical([0 1 0 1]) a = x(L) A = [80:100;180:200] B = rem(A,7) L = B==0 Result = A(L) 返回二维数组A中的能被7整除的数。 二维数组使用逻辑索引,返回结果为列。

  28. (4) 使用find( ) 函数 ind = find(X) 找出数组X中的所有非零的元素的位置,并且在向量ind中返回非零元素的线性索引(单下标)。如果X是一个行向量,则ind也是一个行向量,否则,ind是一个列向量。如果X没有非零元素或者是空数组,则ind为空数组。 ind = find(X, k) 或ind = find(X, k, 'first') 返回数组X中所有非零元素的前k个元素的索引值,k必须为正整数。 ind = find(X, k, ‘last’) 返回数组X中所有非零元素的后k个元素的索引值。 [row,col] = find(X, ...)返回矩阵 X 中非零元素的双下标索引,行索引返回至 row,列索引返回至 col [row,col,v] = find(X, ...)返回 X 中非零元素组成的向量 v,以及相应的行、列索引(双下标)。如果X是一个逻辑式,则v是一个逻辑数组。输出v包含表达式X计算出的逻辑数组的非零值。

  29. find( ) 函数举例 A = 0 3 0 0 0 5 0 0 0 k = 4 8 A = diag([3,5],1) k = find(A) [r,c,v] = find(A) A(k) A(find(A)) s = find(A>4) [a,b,c] = find(A>4) A(s) A(find(A>4)) r = 1 2 c = 2 3 v = 3 5 A(k)的输出是什么? A(find(A)) 的输出是什么? s,a,b,c的输出是什么

  30. (5) 二维数组子数组 引用 / 赋值 应用举例 矩阵初等变换 Matlab中:A([i,j],:) = A([j,i],:) Matlab中:A(i,:) = k*A(i,:) Matlab中:A(i,:) =A(i,:) + k*A(j,:)

  31. ~ ~ ~ 1 1 2 1 4 ~ ~ 0 1 1 1 0 0 0 0 1 3 0 00 0 0 练习:用matlab实现下面的矩阵初等变换 r1r2 1 1 2 1 4 r32 2 1 1 1 2 2 3 1 1 2 3 6 9 7 9 r2r3 r22 1 1 2 1 4 1 1 2 1 4 r32r1 r35r2 0 2 2 2 0 0 1 1 1 0 0 5 5 3 6 0 0 0 2 6 r43r1 r43r2 0 3 3 4 3 0 00 1 3 r3r4 r1r2 1 0 1 0 4 r42r3 r2r3 0 1 1 0 3 0 0 0 1 3 0 00 2 6 0 00 0 0 行阶梯形矩阵 行最简形矩阵

  32. 五、二维数组操作函数

  33. 练习:试写出下列matlab语句的输出结果,并在matlab中进行验证。练习:试写出下列matlab语句的输出结果,并在matlab中进行验证。 a = 1:12 B = reshape(a,3,4) C = rot90(B) d = diag(C) E = diag(d) F = [tril(B);triu(B)] G = cat(2,tril(C),triu(C)) H = repmat(a,4,1) I = flipud(G) J = kron(d,E)

  34. 六、与二维数组相关的函数 当输入参数 A 为二维数组时: cmax = max(A) 返回cmax为一个行数组,元素为A的每个列的最大值 rmax = max(A,[],2) 返回rmax为一个列数组,元素为A的每个行的最大值 返回A中每个列的最大值及其位置, cmax,index为行数组 [cmax,index] = max(A) 返回A中每个行的最大值及其位置,rmax,index为列数组 [rmax,index] = max(A,[],2) max(A,B) 返回一个二维数组,元素为A,B相同位置上的较大值   函数 min( )与函数 max( )的用法相同

  35. dim=1,列 dim=2,行

  36. 返回逻辑值的一些函数: (1) logical( ) : 将数值型数据转换为逻辑型数据 L = logical(A) 输入A为实数数组,返回值L为一个与A同维的逻辑数组,当A中的元素为非零元素时,L中对应的位置返回逻辑1,否则返回逻辑0。 注意:A中的元素不能为复数或 NaN A = eye(3) L = logical(A) M = L + 0 A = 1.00 0 0 0 1.00 0 0 0 1.00 L = 1 0 0 0 1 0 0 0 1 逻辑型数据参与数值运算,即会转换为数值型数据。故M就不是逻辑数组了,而是双精度数值数组。

  37. (2) ture( ) 和 false( ):创建逻辑类型的数据 用ture( )和false( )函数可以创建逻辑类型的数据 true: 即 logical (1)true(n): 逻辑1组成的n×n二维数组true(m, n) :逻辑1组成的m×n二维数组true([m, n]) :与 true(m, n) 功能相同true(size(A)):与数组A维数相同的值为逻辑1数组 false 的用法与 true 相同

  38. (3) 逻辑函数:all( ) 和 any( ) 任何非 0 数都被看作是“真”,只有 0 才被认为是“假”。 A = [1,2,3;0,4,6] a = all(A) b = any(A) c = all(a) d = all(b) a = 0 1 1 b = 1 1 1 c = 0 d = 1

  39. (4) is* 系列测试函数: 返回逻辑类型数据 doc is*可以在matlab的help中查看到所有的测试函数

  40. 绘制第n条曲线 绘制第1条曲线 七、二维数组在绘图中的应用 1、利用二维数组绘制2D图形 plot(X,Y):当 X, Y 是维数相同的实数二维数组时,将 X 的列和 Y 相应的列相组合,绘制多条平面曲线。 当 X, Y 是复数数组时, 忽略虚部,等效于: plot(real(X),real(Y))

  41. plot(x,Y) x是一维数组, Y 是二维数组 若 x 的长度与 Y 的行数相等,则将 x 与 Y 中的各列相对应,绘制多条平面曲线; 若 x 的长度与 Y 的列数相等,则将 x 与 Y 中的各行相对应,绘制多条平面曲线。 plot(X,y) X是二维数组, y 是一维数组 若 y 的长度与 X 的行数相等,则将 X 中的各列与 y 相对应,绘制多条平面曲线; 若 y 的长度与 X 的列数相等,则将 X 中的各行与 y 相对应,绘制多条平面曲线。

  42. plot(Y) 当Y 是实数一维数组时,等价于: x = 1:length(Y) plot(x,Y) 当Y 是实数二维数组时,等价于: x = 1:size(Y,1) plot(x,Y) 当Y为复数数组时,等价于: plot(real(Y),imag(Y))

  43. x = 0:0.1:2*pi X = [x; x; x ] Y = [cos(x);2*cos(x);3*cos(x)] plot(X,Y) 为什么是这样的? x = 0:0.1:2*pi X = [x, x, x ] Y = [cos(x),2*cos(x),3*cos(x)] plot(X,Y) 图形是什么样的,能分析一下吗? x = 0:0.1:2*pi x = x' X = [x, x, x ] Y = [cos(x),2*cos(x),3*cos(x)] plot(X,Y) 为什么现在对了?

  44. 例:利用矩阵乘法生成绘图数据,并绘制图形:例:利用矩阵乘法生成绘图数据,并绘制图形: n = 9 x = linspace(0,2*pi,50) y = cos(x)’*(1:n) plot(x,y) 线性代数中: 列 × 行 = 矩阵

  45. 2、利用二维数组绘制3d图形 (1) 利用二维数组绘制三维曲线: plot3( ) plot3(X,Y,Z)的用法与plot(X,Y)类似,只是多了一个 Z 数组。   当X,Y,Z为同维的一维数组时,plot3( )依次以 X 、Y、Z 数组中的的第k个元素X(k),Y(k),Z(k)作为第k个点的直角坐标值(X(k),Y(k),Z(k)),描点连线,绘制出三维空间中的一条3d曲线。 t=[0:0.2:10*pi]; x=2*t; y=sin(t); z=cos(t); plot3(x,y,z,'bo'); hold on plot3(x,y,z,'r-','LineWidth',2)

More Related