matlab矩阵数组
第二章 Matlab矩阵和数组
由于Matlab自身的特点,它是一种 以科学计算为基础的软件,M语言 的基本处理单位是数值矩阵或向量, 在M语言中统一把矩阵、向量称为 数组。 首先了解一些相关的概念。
一、概述
1.变量和常量 • 变量:指在程序运行过程中需要改变数值 的量,每个变量都有一个名字(命名规则 和C相似,字母开头,数字字母和下划线 的组合。)每个变量在内存中占据一定的 空间。注:在matlab中变量名区分大小写。 • 常量:在程序运行过程中不需要改变数值 的量。
• 说明: • 访问向量元素的结果是创建新的向量。 • 访问向量的元素可以直接用元素在向量中 的序号,元素的序号不仅可以是单一的整 数,还可以是元素序列号组成的向量。 • 关键字end在访问向量元素时,表示最后一 个元素的序号。
• • • •
对向量元素的赋值: >>A(3)=-3 >>A(15)=-15 原先11~15号元素不存在,所以在赋值后, 会自动创建这些元素,对于没有明确赋值 的元素,则默认为0。
• 3.点运算 • 点运算是大小相等的矩阵或向量之间各元 素一一对应的运算,是它们对应元素的直 接运算,如C=A.*B表示A矩阵和B矩阵的相 应元素之间直接进行乘法运算(点乘.*), 然后将结果赋值给C矩阵,这和矩阵的乘积 是不同的。
• • • •
例: >> x=1:5; 创建一个向量 >> x*x 结果是? 出错 >> x.*x
A’ A^n A*B A/B A\B A+/-B
说明
矩阵转置 矩阵求幂 矩阵相乘 矩阵右除 矩阵左除 矩阵加减
inv
det rank
矩阵求逆,注意不是所有矩阵都有逆矩阵(方阵或满秩的阵)
求方阵的行列式 求矩阵的秩
[V,D]=eig
trace svd Norm size length
求矩阵的特征向量和特征值
A(i,j) A(I,J) A(i,:)
A(:,j) A(:)
访问矩阵A的第i行第j列的元素 访问由向量I(决定行)和J(决定列)指定的元素 访问矩阵A中第i行的所有元素
访问矩阵A中第j列的所有元素 访问矩阵A中所有元素,将矩阵看作一个(列)向量
A(l)
A(L)
使用单下标的形式访问矩阵元素,l为标量
• (3)单下标和全下标之间的转换 • Matlab提供了两个函数可以完成它们之间 的转换: • sub2ind 由全下标→单下标 sub2ind(size(A),i,j) i,j 全下标 • ind2sub 由单下标→全下标 [i,j]=ind2sub(size(A),IND) IND单下标
• 其他引用矩阵元素的方法:
访问由向量L指定的矩阵元素,向量L中的元素为矩阵 元素的单下标数值
五、矩阵的运算
• 1.前面已经介绍了很多矩阵的生成函数,不 再重复。 • 2.矩阵的基本运算 • 对于矩阵的运算,Matlab提供了若干函数 和基本的运算规则,这些规则和函数分别 和线性代数中的概念和运算规则是对应的, 如下表 :
运算
三、创建矩阵
• 一般的矩阵具有m行n列(m×n),和二维数组 是同一个概念。 • 创建矩阵的方法: • 1.第一种直接输入法: • 适合创建矩阵的行、列比较少的矩阵。 • 如: A=[1 2 3;4 5 6;7 8 9;] • 注:①整个矩阵的元素必须在[ ]之内。 • ②行与行之间要用分号;隔开,或者在需 要分行的地方用回车键。 • ③元素之间可以用空格或逗号间隔。
16 5 0 11 0 0 0 0
特殊矩阵的生成函数
diag compan hilb inhilb pascal magic
获取矩阵的对角线元素,也可以生成对角矩阵
产生伴随矩阵 产生希尔伯特矩阵 希尔伯特逆矩阵 产生帕斯卡矩阵(即杨辉三角) 产生魔方矩阵
vander
meshgrid
产生万达摩方阵
产生三维绘图基底坐标平面输出矩阵
2.数组 数组就是有序数列的集合。 数组的每一个元素都属于同一种类型,它 们使用同一个数组名和不同的下标来唯一 确定数组中的成员。下标是指数组元素在 数组中的序号。
3.向量 从编程语言的角度,向量就是一维数组, 从数学的角度看,向量就是1×N或N×1的 矩阵,即行向量或列向量。
4.矩阵 在Matlab中,矩阵的概念和线性代数中 定义的矩阵的概念是一样的。矩阵使用一 对圆括号或方括号括起来,符合一定规则 的数学对象。如:
• 创建多维数组也有两种方法: • 1.直接赋值的方法 • 2.使用Matlab提供的函数创建
1.直接赋值的方法
• • • • • >>A=pascal(4); >>A(:,:,2)=eye(4); >>A(:,:,3)=magic(4); 创建了一个三维矩阵,由三页构成。 如果>>A(:,:,3)=magic(5),由于维数不匹配 系统将报错! • 或者>>B(3,3,3)=1 也可以创建一个三维矩 阵,前两页都为零,最后一页的最后一个元 素为1.
• logspace和linspace的用法一样,用来创建 对数间隔的向量。 • 如: logspace(1,2,5) 与linspace比较 • 以上创建的都是行向量,如果要创建列向量, 在各个元素之间用分号;隔开,或对行向量进 行转置运算。转置运算符为单引号’。 • 如: x=[1;2;3;4] 4个元素的列向量 • A=linspace(1,2,5) 先创建一个行向量 • B=A’ 对A进行转置运算,结果赋给B
tril(A), trilu(A) A的主对角线的(下)上三角矩阵
介绍几个矩阵变换常用命令
命令格式
flipud(A)
功能
矩阵A上下翻转
fliplr(A)
rot90(A) rot90(A,K)
矩阵A左右翻转
矩阵A逆时针旋转90度 矩阵A逆时针旋转k个90度
reshape(A,m,n) 将矩阵A重新排列成m*n的矩阵输 出,各元素在矩阵中的序号不变
功能 创建n阶全零矩阵 创建m*n全零矩阵 n阶全1矩阵 m*n的全1矩阵 n阶单位矩阵,n=1时可省 n阶均匀分布的随机矩阵 m*n均匀分布的随机矩阵 n阶正态分布的随机矩阵 m*n正态分布的随机矩阵 n阶魔方矩阵
• • • • • •
例子: >>ones(4) >>magic(4) >>rand(3,4) >>A=magic(4) >>tril(A)
9 16 25
• ans = • 1 4
• >>x*x’ • 55 • >>x’*x
结果是?
1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25
• • • • • • • • • • •
例: >>A=[1 2; 3 4] >>B=[5 6; 7 8] >>A*B ans = 19 22 43 50 >>A.*B ans = 5 12 21 32
• 点运算还包括点左除(.\),点右除(./), 点乘方(.^)。该运算在Matlab中起着很重 要的作用。 • 如:当x是一个向量时,求其各元素的5次 方,不能直接写成x^5,而必须写成x.^5。 • 特别注意:点运算要求两个矩阵或向量的 维数相同。(是对应元素之间的操作)
稀疏矩阵
• 在实际工作中经常会遇到这样一类矩阵,这 类矩阵中数值为0的元素比较多(如单位矩 阵),这类矩阵一般被称为稀疏矩阵。如果 使用满阵的方式来表示稀疏矩阵,则0元素 将占用相当多的内存空间,尤其是在matlab 中,由于matlab默认数据类型为双精度,每 个双精度的数据元素要占用8个字节空间, 当0元素很多时,将占用很多的内存空间。 因此,在matlab中专门提供了稀疏矩阵的表 示方法。
• 赋值操作 matlab中赋值有两种格式: (1) 变量=表达式 ( = 赋值运算) (2) 表达式 对第二种形式,会将表达式的值赋给 Matlab的预定义变量ans。 如: x=4+cos(50) sin(50)
• 经常使用的几个常量: pi 圆周率 inf 无穷大,负无穷大可以表示为-inf Nan 代表“非数值量 ”,如0/0或inf/inf的结果。 eps 机器零阈值,若变量的绝对值小于eps, 则可以认为这个量为零 i和j 如果i和j不被定义,则表示虚数单位。
• 冒号表达式的一般格式为: • X=J:INC:K • ①J 表示第一个元素,K表示最后一个元素, INC表示元素递增的步长 • ②都用:隔开 • ③如果省略INC,则按默认步长为1 • ④INC为正,则要求K>J,INC为负,则要 求J>K • 如: x=1:0.01:1.1
• • • •
3.使用函数linspace或logspace创建向量 linspace是用来产生线性间隔向量的函数 用法: x=linspace(x1,x2,n) x1 第一个元素,x2 最后一个元素,n为元 素的个数。该函数将根据n的数值计算元素 之间的间隔, (x2-x1)/(n-1)。如省略n,为 100。 • 如: linspace(1,2,5) • linspace(1,2)
创建稀疏矩阵
• >>A=eye(5) %五阶的单位矩阵 • >>B=sparse(A) %用sparse构造为稀疏矩阵
• >>whos %可以比较A,B占用内存空间 • >>full(B) %用full函数将稀疏矩阵还原成满阵
多维矩阵
• 多维矩阵(数组),就是下标数超过了两 个的数组。常用的为三维矩阵,更高维的 用到的机会较少。 • 习惯上将第一维称为行,第二维称为列, 第三维称为页。要注意的是,第三维数的 页上,每一页的数组必须具有相同的行, 列。