MATLAB:运算(一)
一、运算符与运算
MATLAB中的运算分符为算术运算,关系运算符和逻辑运算符三种。这三种运算符可以分别使用,也可以同时出现。在同一运算式中同时出现两种或两种以上运算符时,运算按优先级顺序进行:算术运算级最高,其次是关系运算符,最后是逻辑运算符。
1. 算术运算符
MATLAB中的运算符由四则运算和带点四则运算符等,相关运算法则见下表:
运算符 | 运算法则 |
A+B | A与B相加 |
A-B | A与B相减 |
A*B | A与B相乘 |
A/B或A\B | A与B相除 (A、B为数值或矩阵) |
A^B | A的B次幂 (A、B为数值或矩阵) |
A.*B | A与B对应元素相乘 (A与B为相同维度的矩阵) |
A./B | A与B对应元素相除 (A与B为相同维度的矩阵) |
A.^B | A的每个元素的B次幂 (A为矩阵,B为数值) |
例:矩阵的计算
在命令窗口输入:
>> A=2*eye(2),B=ones(2),C=A*B,D=A.*B,E=A.^2
输出结果如下:
2. 关系运算符
MATLAB中有六个关系运算符,见下表:
关系运算符 | 关系说明 | 关系运算符 | 关系说明 |
| 小于 | <= | 小于等于 |
> | 大于 | >= | 大于等于 |
== | 等于 | ~= | 不等于 |
‘==’和‘=’的区别在于‘==’的运算法则是比较两个变量,当它们相等时返回1,当它们不相等时返回0,而‘=’则是被用来赋值的。
表中的运算符可以用来对数值、数组、矩阵或是字符串等数据类型进行比较,也可以进行不同类型两个数据之间的比较。
比较的方式根据所比较的两个数据类型的不同而不同,例如对矩阵与一个标量进行比较时,即将矩阵中的每个元素与标量进行比较;而将结构相同的矩阵进行比较时,则将矩阵中的元素相互比较: 关系运算符比较对应的元素,产生一个仅包含 1 和0的数值或矩阵。其亓素代表的意义如下:
返回值为1,比较结果是真;
返回值为0,比较结果是假。
例:关系运算符运算:
在命令窗口中输入:
>> A=[1,2,3;4,5,6],B=[3,2,1;6,5,4]
c1=(A>3)
c2=(A>B)
c3=(A==B)
输出结果如下:
3. 逻辑运算符
逻辑运算符提供组合或否定关系表达方法,见下表:
例:逻辑运算符的运用。
在命令窗口中输入:
>> A=[1,2,3;4,5,6],B=[3,2,1;6,5,4]
c1=~(A>3)
c2=(A>B)&(A>2)
c3=(A>3)|(B>3)
输出结果如下:
逻辑运算符与关系运算符一样可以进行矩阵与数值之间的比较;方式为将矩阵的每一个元素都与数值进行比较,比较结果为相同维数的矩阵,矩阵的每一个元素都代表比较矩阵中相同位置上的元素与数值的逻辑运算结果。
使用逻辑运算符比较两个相同维数的矩阵时,按元素来进行比较,其结果是一个包含1和0的矩阵。0元素表示逻辑为假,1元素表示逻辑为真。
A&B:返回一个与A和B相同维数的矩阵。在这个矩阵中,A和B对应元素都为非零时,对应项为1;否则为0。
A|B返回一个与A和B相同维数的矩阵。在这个矩阵中,A和B对应元素只要有一个为非零,则对应项为1;否则为0。
~A返回一个与A和B相同维数的矩阵。在这个矩阵中,A是零时,则对应项为1;否则为0。
除了上面的逻辑运算符,MATLAB 提供了各种逻辑函数,见下边表:
函数 | 运算法则 |
xor(x,y) | 异或运算。X与y不同时,返回1;否则返回0 |
any(x) | 向量x中,有任何元素是非零,返回1;否则返回0 矩阵x中的每一列有非零元素,返回1;否则返回0 |
all(x) | 向量x中,所有元素非零,返回1;否则返回0 矩阵x中的每一列所有元素非零,返回1;否则返回0 |
二、矩阵基础
矩阵的基本操作,主要包括构造矩阵,改变矩阵的维度与矩阵的大小,矩阵索引,获取矩阵的属性信息等。MATLAB提供了相应的命令或相应的库函数与各操作对应。
1. 有关概念
有关矩阵的概念,这里不再赘述。但需要注意的是向量,其本质上是一维的矩阵;在使用MATLAB进行科学计算时,基本不区分矩阵与向量,因此需要注意。
数组是在程序设计中,把具有相同类型的若干变量按有序的形式组织起来的一种形式这些按序排列的同类数据元素的集合称为数组。
矩阵和数组在MATLAB中的区别主要表现在两方面:
矩阵是数学上的概念,而数组是计算机程序设计领域的概念。
矩阵作为一种变换或者映射算符的体现,矩阵运算有着明确而严格的数学规则;而数组运算是MATLAB软件定义的规则。
两者的联系主要体现在:矩阵是以数组的形式存在的。一维数组相当于向量,二维数组相当于矩阵,可将矩阵视为数组的子集。
2. 创建矩阵
矩阵可以通过两种方式创建:
对变量直接进行赋值;
使用MATLAB提供的特殊矩阵创建函数,见下表:
函数名称 | 函数功能 |
ones(n) | 构建一个m*n的1矩阵 |
ones(m,n,..,p) | 构建一个m*n*…*p的1矩阵 |
ones(size(A)) | 构建一个和矩阵A同样大小的1矩阵 |
zeros(n) | 构建一个m*n的0矩阵 |
zeros(m,n,..,p) | 构建一个m*n*…*p的0矩阵 |
zeros(size(A)) | 构建一个和矩阵A同样大小的0矩阵 |
eye(n) | 构建一个m*n的单位矩阵 |
eye(m,n,..,p) | 构建一个m*n*…*p的单位矩阵 |
eye(size(A)) | 构建一个和矩阵A同样大小的单位矩阵 |
magic(n) | 构建一个m*n的矩阵,其每一行、每一列的元素之和都相等 |
rand(n) | 构建一个n*n的矩阵,其元素为0~1之间分布均匀的随机数 |
rand(m,n,..,p) | 构建一个m*n*…*p的矩阵,其元素为0~1之间分布均匀的随机数 |
randn(n) | 构建一个n*n的矩阵,其元素为零均值、单位方差的正态分布随机数 |
randn(m,n,..,p) | 构建一个m*n*…*p的矩阵,其元素为零均值、单位方差的正态分布随机数 |
diag(x) | 构建一个n维的方阵,它的主对角线元素值取自向量x,其余元素的值都为0 |
diag(A,k) | 构建一个由矩阵A第k条对角线的元素组成的列向量 |
diag(x,k) | 构建一个(n+|k|)*(n+|k|)维的矩阵,该矩阵的第k条对角线元素取自向量x,其余元素的值都为0 |
triu(A) | 构建一个和A大小相同的上三角矩阵,主对角线上的元素为A中相应元素,其余为0 |
triu(A,k) | 构建一个和A大小相同的上三角矩阵,第k条对角线上元素与A相同,其余为0 |
tril(A) | 构建一个和A大小相同的下三角矩阵,主对角线上的元素为A中相应元素,其余为0 |
tril(A,k) | 构建一个和A大小相同的下三角矩阵,第k条对角线上元素与A相同,其余为0 |
注:k=0为主对角线;k<0为下第k对角线;k>0为上第k对角线。
下面介绍简单矩阵和特殊矩阵的创建方法。
(1) 创建简单矩阵
采用矩阵构造符号——方括号“[]” ,将矩阵元素置于方括号内,同行元素之间用空格或逗号来隔开;行与行之间用分号“;”隔开。
此方法在上文用到,在此不作赘述。
(2) 创建特殊矩阵
例:创建特殊矩阵。
在命令窗口输入:
>> A=ones(3)
B=zeros(3)
C=eye(3)
D=eye(3,3)
输出结果如下:
(3) 创建空矩阵
可以使用[]代表空矩阵,通过直接赋值的方法来创造空矩阵。