1 / 81

第二章 Matlab 编程基础

第二章 Matlab 编程基础. 数组和矩阵基本运算. 主要内容:. 2.1 矩阵 和数组 2.2 matlab 基本运算 2.3 matlab 语言结构与编程 2.4 文件 I/O. 2.1 矩阵和数组. 2.1.1 基本概念 2.1.2 矩阵和数组的创建 2.1.3 矩阵和数组的访问 2.1.4 矩阵操作. 2.1.1 基本概念. 1. 变量 所谓变量,就是指在程序运行过程中需要改变数值的量,每一个变量都具有一个名字,变量将在内存中占据一定的空间,以便在程序运行的过程中保存其数值。

Download Presentation

第二章 Matlab 编程基础

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. 第二章 Matlab编程基础 数组和矩阵基本运算

  2. 主要内容: • 2.1 矩阵和数组 • 2.2 matlab基本运算 • 2.3 matlab语言结构与编程 • 2.4 文件I/O

  3. 2.1 矩阵和数组 • 2.1.1 基本概念 • 2.1.2 矩阵和数组的创建 • 2.1.3 矩阵和数组的访问 • 2.1.4 矩阵操作

  4. 2.1.1 基本概念 • 1.变量 • 所谓变量,就是指在程序运行过程中需要改变数值的量,每一个变量都具有一个名字,变量将在内存中占据一定的空间,以便在程序运行的过程中保存其数值。 • 对变量的命名有相应的要求:变量必须以字母开头,后面可以是19个字母、数字或者下划线的组合

  5. 2.数组 • 数组是有序数据的集合,在大多数编程语言中,数组的每一个成员(元素)都属于同一种数据类型,它们使用同一个数组名称和不同的下标来惟一确定数组中的成员(元素)。

  6. 3. 向量 • 从编程语言的角度上看,向量其实就是一维数组,然而从数学的角度上看,向量就是1×N或者N×1的矩阵,即行向量或列向量 • MATLAB的基本运算单位就是矩阵和向量,而M语言本身就是以向量化运算为基础的编程语言

  7. 4.矩阵 • 在MATLAB中,矩阵的概念就是线性代数中定义的矩阵的概念——矩阵是用一对圆括号或者方括号括起来,符合一定规则的数学对象。例如:

  8. 2.1.2 数组和矩阵的创建 • 1. 创建向量 • 2. 创建矩阵 • 3. 稀疏矩阵

  9. 1.创建向量 • 从编程语言的角度上看,向量也就是一维数组。在MATLAB中创建向量可以使用五种不同的方法,最直接也最简单的方法就是逐个输入向量的元素 • 1).创建行向量 • 2).创建列向量

  10. 1).创建行向量 • (1)直接创建,通过直接输入数组中每个元素的值来创建数组,方法为以左方括号开始,以空格或逗号为间隔输入元素值,最后以右方括号结尾 • 例:在命令窗口输入X=[1 2 3 4 5 6 7 8 9]或x=[1,2,3,4,5,6,7,8,9] • (2)利用冒号运算符创建向量 • X=初值:终值,创建从初值开始到终值结束,增量为1的行向量x • 例:x=0:10

  11. (3)x=初值:增量:终值,创建从初值到终值,给定增量的行向量(3)x=初值:增量:终值,创建从初值到终值,给定增量的行向量 • 例:x=0:0.1:1 • (4)利用函数X=linspace(初值,终值,n)创建从初值开始到终值结束,有n个元素的行向量 • 例:x=linespace(0,pi,11) • (5)利用函数x=logspace(初值,终值,n)创建从初值开始到终值结束,有n个元素对数分隔量。 • 例:x=logspace(0,1,11) • 1.0000 1.2589 1.5849 1.9953 2.5119 3.1623 3.9811 5.0119 6.3096 7.9433 10.0000

  12. 2). 创建列向量 • (1)直接输入元素法。通过直接输入数组中每个元素的值来创建数组,方法为以左方括号开始,以分号为间隔输入元素值,最后以右方括号结尾 • 例:A = [1;2;3;4;5;6] • (2)使用转置的方法 • 例:B = (1:6)'

  13. 2.创建矩阵 • 1)直接输入法 • A = [1 2 3;4 5 6;7 8 9]或A = [1,2,3;4,5,6;7,8,9] • 在创建矩阵的时候,需要注意: • 整个矩阵的元素必须在“[ ]”中键入 • 矩阵的元素行与行之间需要使用分号;间隔,也可以在需要分行的地方用回车键间隔 • 矩阵的元素之间可以使用逗号或者空格间隔。 • 其实创建上面的矩阵时还可以这么做 • A = [1:3;4:6;7:9]

  14. A=

  15. 2)创建特殊矩阵 • (1)随机数矩阵 • rand(x,y)产生x行y列的随机数矩阵 • (2)全1阵 • ones(n) 产生n行n列的全1方阵 • ones(x,y) 产生x行y列的全1矩阵 • (3)全零阵 • zeros(n)产生n行n列的全零方阵 • zeros(x,y)产生x行y列的全零矩阵 • (4)对角矩阵 • eyes(x,y)产生x行y列的对角阵

  16. 3.稀疏矩阵 • 在实际工作中,经常遇到这样一类矩阵,这类矩阵中数值为0的元素居多,这类矩阵一般被称为稀疏矩阵。如果使用满阵的方式来表示稀疏矩阵,则0元素将占用相当的内存空间,特别是在MATLAB中,由于MATLAB默认的数据类型是双精度类型,每一个双精度类型的数据元素都要占用八个字节的内存空间,当0元素很多的时候将占用相当可观的内存空间,因此,在MATLAB中,专门提供了稀疏矩阵的表示方法。

  17. 创建稀疏矩阵 • 在MATLAB命令行窗口中键入下面的指令: • >> A = eye(5) • A = • 1 0 0 0 0 • 0 1 0 0 0 • 0 0 1 0 0 • 0 0 0 1 0 • 0 0 0 0 1

  18. B = sparse(A) • B = • (1,1) 1 • (2,2) 1 • (3,3) 1 • (4,4) 1 • (5,5) 1 • >> whos • Name Size Bytes Class • A 5x5 200 double array • B 5x5 84 double array (sparse) • Grand total is 30 elements using 284 bytes

  19. 在上例中,首先使用eye函数创建了五阶的单位矩阵,五阶单位方阵一共有25个元素,其中却有20个元素是0,于是使用sparse函数将该函数构造成为稀疏矩阵,这样就得到了矩阵B。在上例中,首先使用eye函数创建了五阶的单位矩阵,五阶单位方阵一共有25个元素,其中却有20个元素是0,于是使用sparse函数将该函数构造成为稀疏矩阵,这样就得到了矩阵B。 • 通过whos指令可以清晰地比较两个矩阵占用的内存空间,A矩阵占用了200个字节,而B矩阵仅占用了84个字节。

  20. 稀疏矩阵和普通矩阵(满阵)之间可以直接进行运算,例如稀疏矩阵和普通矩阵(满阵)之间可以直接进行运算,例如 • >> A+B • ans = • 2 0 0 0 0 • 0 2 0 0 0 • 0 0 2 0 0 • 0 0 0 2 0 • 0 0 0 0 2 • 这里运算得到的结果是一个满阵。

  21. MATLAB中使用“三元组”表示法来表示稀疏矩阵,该表示方法一般由三个向量组成: MATLAB中使用“三元组”表示法来表示稀疏矩阵,该表示方法一般由三个向量组成: • 第一个向量是由矩阵中非零元素组成的向量,其长度一般为nzmax,即矩阵中所有非零元素的个数; • 第二个向量是非零元素的行序号,该向量的长度也为nzmax; • 第三个向量是非零元素的列序号,该向量的长度也为nzmax。

  22. 例如对于下面的稀疏矩阵: • 因此,表示矩阵的三个向量分别为 • >> data = [15 91 11 3 28 22 −6 −15]; • >> ir = [ 1 5 2 2 6 1 3 1]; • >> jc = [1 1 2 3 3 4 4 6];

  23. 利用上面的三个矩阵和sparse函数创建六行六列的稀疏矩阵:利用上面的三个矩阵和sparse函数创建六行六列的稀疏矩阵: • >> S = sparse(ir,jc,data,6,6) • S = • (1,1) 15 • (5,1) 91 • (2,2) 11 • (2,3) 3 • (6,3) 28 • (1,4) 22 • (3,4) -6 • (1,6) -15

  24. >> %将该矩阵还原成满阵 • >> full(S) • ans = • 15 0 0 22 0 -15 • 0 11 3 0 0 0 • 0 0 0 -6 0 0 • 0 0 0 0 0 0 • 91 0 0 0 0 0 • 0 0 28 0 0 0

  25. >> whos • Name Size Bytes Class • S 6x6 124 double array (sparse) • ans 6x6 288 double array • data 1x8 64 double array • ir 1x8 64 double array • jc 1x8 64 double array • Grand total is 68 elements using 604 bytes

  26. 2.1.3 数组和矩阵的访问 • 1.向量元素的访问 • 访问向量的元素只要使用相应元素的索引即可,以例说明 • 例1: A = [1 2 3 4 5 6 7 8 9 0],访问向量中的元素。 • 在MATLAB的命令行窗口中键入下面的指令: • >> %访问向量的第三个元素 • >> A(3) • ans = • 3

  27. >> %访问向量的第一、三、七个元素 • >> A([1 3 7]) • ans = • 1 3 7 • >> %访问向量的第一、三、五个元素 • >> A([1,3,5]) • ans = • 1 3 5 • >> %访问向量的最后四个元素 • >> A([end-3:end]) • ans = • 7 8 9 0 • >> %重复访问向量中的元素 • >> A([1:5,5: -1:1]) • ans = • 1 2 3 4 5 5 4 3 2 1

  28. 说明: • 访问向量的元素直接给出元素在向量中的序号,元素的序号不仅可以是单一的整数,还可以是元素序号组成的向量,如例1中的各种操作。 • 关键字end在访问向量元素时,表示向量中最后一个元素的序号。 • 访问向量元素时,序号的数值必须介于数值1~end之间

  29. 例2 对向量A = [1 2 3 4 5 6 7 8 9 0]中的元素赋值 • 在MATLAB命令行窗口中键入下面的指令: • >> %对向量的第三个元素赋值 • >> A(3) = -3 • A = • 1 2 -3 4 5 6 7 8 9 0 • >> %对向量中不存在的数据赋值 • >> A(15) = -15 • A = • Columns 1 through 10 • 1 2 -3 4 5 6 7 8 9 0 • Columns 11 through 15 • 0 0 0 0 -15

  30. 说明: • 在例2中,对向量的第15个元素赋值,在赋值之前向量的第11~15个元素不存在,但是在赋值之后,将自动创建这些元素,并且为没有明确赋值的元素赋默认值0,这就是MATLAB的数据自动扩充和初始化机制。

  31. 2.矩阵元素的访问 • 访问矩阵的元素也需要使用矩阵元素的索引,不过具有两种方式,第一种方式是使用矩阵元素的行列全下标形式,第二种方法是使用矩阵元素的单下标形式 • 例3 : • MATLAB工作空间中具有一个5×5的矩阵,该矩阵是五阶的幻方,通过命令行获取矩阵的第二行、第四列的元素,于是在MATLAB命令行窗口中键入下面的指令:

  32. >> %创建矩阵 • >> A = magic(5) • A = • 17 24 1 8 15 • 23 5 7 14 16 • 4 6 13 20 22 • 10 12 19 21 3 • 11 18 25 2 9 • >> %使用全下标的形式访问元素 • >> A(2,4) • ans = • 14 • >> %使用单下标的形式访问元素 • >> A(17) • ans = • 14

  33. 说明: • 使用了MATLAB函数magic创建幻方。所谓幻方,就是n阶的方阵,该方阵的行元素和列元素的和都相等。 • 使用全下标的形式访问矩阵元素的方法简单、直接,同线性代数的矩阵元素的概念一一对应。 • 矩阵元素的单下标是矩阵元素在内存中存储的序列号,一般地,同一个矩阵的元素存储在连续的内存单元中。 • 矩阵元素的单下标与全下标之间的转换关系如下,以m行的矩阵为例,该矩阵的第i行第j列的元素全下标表示为单下标l=(j-1)×m+i。 • 注意: • MATLAB的矩阵元素的排列以列元素优先,这一点同FORTRAN语言的二维数组元素的排列方法一致,与C语言的二维数组元素的排列不同,C语言的二维数组元素排列以行元素优先。

  34. 使用索引访问矩阵元素的方法

  35. 例4 用不同的方法访问矩阵的元素。 • 在MATLAB命令行中键入下面的指令: • >> % 创建矩阵 • >> A = 1:25; • >> A = reshape(A,5,5) • A = • 1 6 11 16 21 • 2 7 12 17 22 • 3 8 13 18 23 • 4 9 14 19 24 • 5 10 15 20 25

  36. >> %访问矩阵的第三行第一列元素 • >> A(3,1)或A(3) • ans = • 3 • >> % 访问矩阵第三行的所有元素 • >> A(3,:) • ans = • 3 8 13 18 23 • >> %访问矩阵第四列的所有元素 • >> A(:,4) • ans = • 16 • 17 • 18 • 19 • 20

  37. >> %访问矩阵的最后一行元素 • >> A(end,:) • ans = • 5 10 15 20 25 • >> %获取矩阵的子矩阵 • >> I = [1 3 5];J = [2 4]; • >> A(I,J) • ans = • 6 16 • 8 18 • 10 20

  38. 2.1.4 数组/矩阵操作 • 对数组或矩阵的基本操作有: • 插入 • 重新排列 • 提取 • 按列拉长 • 置空(去掉某行或某列) • 置零 • 用单个下标操作一个矩阵 • 用逻辑数组操作一个矩阵 • 按指定条件求子数组 • 求数组的规模

  39. 例1:X=4:6,按下列要求进行操作: • (1)插入:通过对x进行插入运算创建矩阵A • A=[x-3;x;x+3] • A = • 1 2 3 • 4 5 6 • 7 8 9 • (2)重新排列:以逆序重新排列A的各行形成矩阵B • B=A[3:-1:1,1:3] • B = • 7 8 9 • 4 5 6 • 1 2 3

  40. (3)提取:提取A的前两行的后两列构成矩阵C • C=A[1:2,end-1:end](或C=A[1:2,2:3]) • C= • 2 3 • 5 6 • (4)按列拉长:对C按列拉长形成矩阵D • D=C(:) • D= • 2 • 5 • 3 • 6

  41. (5)置空:删除B的第2列 • B(:,2)=[] • B= • 7 9 • 4 6 • 1 3 • (6)置零:将矩阵B的第2行第2列的元素置为0 • B(2,2)=0 • B= • 7 9 • 4 0 • 1 3

  42. (7)用单个下标操作一个矩阵,获得矩阵B的第3个元素(7)用单个下标操作一个矩阵,获得矩阵B的第3个元素 • B(3) • ans= • 1 • (8)用逻辑数组操作一个矩阵:判断矩阵A中元素绝对值大于3的情况,如果绝对值大于3则置为1,否则为0 • abs(A)>3 • ans= • 0 0 0 • 1 1 1 • 1 1 1

  43. (9)按指定条件求子数组:寻找A中大于4的元素对应的下标(9)按指定条件求子数组:寻找A中大于4的元素对应的下标 • [r,s]=find(A>4) • r= • 3 • 2 • 3 • 2 • 3 • s= • 1 • 2 • 2 • 3 • 3

  44. (10)求数组的规模 • S=size(A),返回一个二元素行向量s,s的第一个元素是A的行数,第二个元素为A的列数 • [r,c]=size(A),返回两个变量r和c分别为A的行数和列数 • r=size(A,1),只返回A的行数给r • c=size(A,2),只返回A的列数给c • n=length(A),返回行数和列数中较大的一个

  45. 2.2 Matlab基本运算 • 2.2.1 数组和矩阵的基本运算 • 2.2.2逻辑运算和关系运算

  46. 2.2.1 数组和矩阵的基本运算 • 1. 数组操作函数 • 2. 矩阵生成函数 • 3. 数组和矩阵的运算符 • 4. 数组和矩阵的基本运算函数

  47. 1. 数组操作函数

  48. 2. 矩阵生成函数

  49. 矩阵操作函数

  50. 3. 数组和矩阵运算符号 • 矩阵和数组运算是不同的,数组运算是元素对元素的运算,而矩阵运算采用线性代数的运算方式,两种运算符号也不同,其区别见下表

More Related