一、基础阶段
(一)数据类型
MATLAB中有
15种
基本的数据类型,分别是:8种
数据整型、单精度浮点型、双精度浮点型、逻辑型、字符串型、单元数组、结构体类型和函数句柄。
如下表所示:
基本数据类型 | 说明 |
---|---|
int8、int16、int32、int64 | 有符号整型(分别占1、2、4、8字节) |
uint8、uint16、uint32、uint64 | 无符号整型(分别占1、2、4、8字节) |
Single | 单精度浮点型(占4字节) |
Double | 双精度浮点型(占8字节) |
Logical | 逻辑型(1字节) |
Char | 字符串型(占2字节) |
Cell | 单元数组型 |
struct | 结构体型 |
Function_handle | 函数句柄型 |
其中,双精度浮点型为默认的数据类型,数据类型可以通过函数进行转换。
1.数值类型
我们将整数
和浮点数
统称为数值类型。
整数分为有符号整数(型)
和无符号整数(型)
,浮点数分为单精度浮点数(型)
和双精度浮点数(型)
。
默认的数值类型为双精度
浮点型,一般通过整型函数
将浮点型数据转换
为整型数据。
>> x = 1
>> y = int8(x)
>> whos
Name Size Bytes Class Attributes
x 1x1 8 double
y 1x1 1 int8
当我们对浮点数
进行取整
操作时,可以采用不同的方法
将小数转换为整数。
如下表介绍了四种浮点数的取整函数
:
函数 | 作用 |
---|---|
round | 向最接近的整数取整,若小数为0.5,则取绝对值大的整数 |
fix | 向0取整 |
floor | 取不大于该数的最接近整数 |
ceil | 取不小于该数的最接近整数 |
复数
复数也属于数值类型,是对实数的扩展,包含实部和虚部两部分。
在MATLAB中,采用i
或j
来表示虚部
的单位。
产生复数的两种方法:
- 采用赋值语句直接产生复数:
z1=3+4j
- 采用函数
complex( )
产生复数:z2=complex(3,4)
复数的常用函数如下表所示:
函数 | 作用 |
---|---|
complex(a, b) | 创建复数,a为 实部,b为 虚部 |
real(z) | 得到复数z的 实部 |
imag(z) | 得到复数z的 虚部 |
abs(z) | 得到复数z的 模 |
angle(z) | 得到复数z的 角度 |
conj(z) | 得到复数z的 共轭复数 |
2.逻辑类型
逻辑类型数据只有逻辑真
和逻辑假
两种。
MATLAB中用1代表逻辑真
,用函数true
表示;用0代表逻辑假
,用函数false
表示。逻辑真和逻辑假都占用1个字节
的存储空间。
>> a=true
a =
logical
1
>> b=false
b =
logical
0
>> c=true(3,4)
c =
3×4 logical 数组
1 1 1 1
1 1 1 1
1 1 1 1
>> d=false(4)
d =
4×4 logical 数组
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
>> whos
Name Size Bytes Class Attributes
a 1x1 1 logical
b 1x1 1 logical
c 3x4 12 logical
d 4x4 16 logical
>>
还可以采用函数logical( )
将数值型
转换
为逻辑型
,任何非0数值
转换为逻辑真
(即1);数值0
转换为逻辑假
(即0)。
>> a=[0:5;3,4,0,0,0,1]
a =
0 1 2 3 4 5
3 4 0 0 0 1
>> a=logical(a)
a =
2×6 logical 数组
0 1 1 1 1 1
1 1 0 0 0 1
>>
3.字符和字符串
在MATLAB中,字符型数据类型用char
表示。字符和字符串不进行区分
,都用一对单引号
括起来。字符串中的每个字符
占用2个字节
的存储空间。
>> A='my name is 张三'
A =
'my name is 张三'
>> B=char(0x59dc) % unicode码16进制
B =
'姜'
>> C=int8('JXQ')
C =
1×3 int8 行向量
74 88 81 % Unicode码10进制
>>
4.函数句柄
函数句柄包含了函数的路径、函数名、类型以及可能存在的重载方法。通过函数句柄来间接调用函数,函数句柄的数据类型为function_handle。
函数句柄可以通过符号@
后面跟函数命令
来创建,例如程序fhandle=@cos
,创建了函数cos( )
的函数句柄
,以后就可以通过函数句柄fhandle
来间接调用
函数cos( )
。
>> C = int8('A')
C =
int8
65
>> B='你好'
B =
'你好'
>> fhandle=@int8
fhandle =
包含以下值的 function_handle:
@int8
>> fhandle(B)
ans =
1×2 int8 行向量
127 127
>>
使用函数句柄的好处:
-
提高运行速度。
因为matlab对函数的调用每次都是搜索所有的路径,从path中我们可以看到,路径是非常多的,所以如果一个函数在你的程序中如果经常被使用,使用函数句柄,对运行速度会有提高
-
使用可以与变量一样方便。
比如说,我在这个目录中创建了本目录中的一个函数句柄,当我转到其他目录下的时候,创建的函数句柄还是可以直接使用的,而不需要把那个函数文件拷贝过来,因为函数句柄中已经包含了路径
函数句柄的常用函数:
函数 | 作用 |
---|---|
func2str(fhandle) | 将函数句柄转换为字符串 |
str2func(str) | 将字符串转换为函数句柄 |
functions(fhandle) | 返回函数句柄包含的函数信息的结构体变量 |
isa(a, ‘function_handle’) | 判断a是否为函数句柄 |
isequal(fhandle1, fhandle2) | 检测两个函数句柄是否对应同一个函数 |
5.单元数组类型
单元数组是一种比较特殊的数据类型,每个元素都以单元
的形式存在。
在MATLAB中,采用大括号{}
建立单元数组
,也可以采用函数cell( )
来建立单元数组。
在获取单元数组的元素时,也采用大括号
表示下标
。
创建单元数组:
-
直接创建
>> a={1,'hello','中国'} a = 1×3 cell 数组 {[1]} {'hello'} {'中国'} >>
-
函数创建
>> a = cell(3) a = 3×3 cell 数组 {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} >>
单元数组的引用:
>> a={1,'a','b',2}
a =
1×4 cell 数组
{[1]} {'a'} {'b'} {[2]}
>> a{1,1}
ans =
1
>> a{1,2}
ans =
'a'
>>
6.结构体类型
结构体
是按照成员变量名组织起来的不同数据类型数据
的集合
。
结构体类似于C语言
的结构体数据
。每个成员变量用指针操作符“.”
表示,例如A.name
表示结构体变量A
的name
成员变量。
创建结构体变量:
>> struct('field1',1,'field2',2) % 格式为:Struct('键1', 值1, '键2', 值2 ... )
ans =
包含以下字段的 struct:
field1: 1
field2: 2
>>
引用结构体成员:
>> S=struct('A','a','B','b')
S =
包含以下字段的 struct:
A: 'a'
B: 'b'
>> x=S.A
x =
'a'
>>
结构体成员的更改、添加:
>> S=struct('A','a','B','b')
S =
包含以下字段的 struct:
A: 'a'
B: 'b'
>> S.C = 'c'
S =
包含以下字段的 struct:
A: 'a'
B: 'b'
C: 'c'
>> S.C = 'cc'
S =
包含以下字段的 struct:
A: 'a'
B: 'b'
C: 'cc'
>>
我们不难发现,对结构体成员
进行操作遵循的是“有则更改,无则添加”
规则,所以我们可以利用这一规则直接
进行结构体创建:
>> A.name = 'LiHua'; A.age=20; A.sex='man'
A =
包含以下字段的 struct:
name: 'LiHua'
age: 20
sex: 'man'
>>
(二)运算符
在MATLAB中,提供了丰富的运算符,其功能主要包括算数运算、关系运算和逻辑运算。
算数运算用于数值计算。关系运算和逻辑运算的返回值为逻辑型变量,其中1代表逻辑真,0代表逻辑假。
1.算数运算符
MATLAB提供的基本算术运算有:加(+)、减(-)、乘(*)、除(/)和乘方(^)。
对于数组和矩阵,是以元素为单元进行运算,将会在后面进行详细的介绍。
标量 | 矩阵和数组 | 作用 |
---|---|---|
+ | + | 加 |
- | - | 减 |
* | .* | 乘 |
/ | ./ | 左除右 |
\ | .\ | 右除左 |
^ | .^ | 乘方 |
’ | .’ | 转置 |
2.关系运算符
关系运算用于比较两个操作数的大小,返回值为逻辑型变量。
当2个操作数都是数组或矩阵时,这2个操作数的维数必须相同,否则会显示出错信息。
关系运算符 | 作用 | 对应函数 |
---|---|---|
< | 小于 | lt( ) |
<= | 小于等于 | le( ) |
> | 大于 | gt( ) |
>= | 大于等于 | ge( ) |
== | 恒等于 | eq( ) |
~= | 不等于 | ne( ) |
>> a=1;b=2;
>> c=a>2
c =
logical
0
>> c=b>a
c =
logical
1
>> c=ge(b,a)
c =
logical
1
>>
3.逻辑运算符
分为3类,分别是逐个元素的逻辑运算
、快速逻辑运算
和逐位逻辑运算
。
逐个元素的逻辑运算有3种,分别是逻辑与(&)、逻辑或(|)和逻辑非(~),如下表所示。
运算符 | 函数 | 作用 |
---|---|---|
& | and( ) | 逻辑 与 |
| | or( ) | 逻辑 或 |
~ | not( ) | 逻辑 非 |
无 | xor( ) | 逻辑 异或 |
需要注意的是,在进行两个数组或矩阵的逻辑与和逻辑或时,它们必须具有相同的维数。
快速逻辑运算符有两种,逻辑与(&&)和逻辑或(||)。
- &&运算符,在参与运算的第一个操作数为假时,立即返回假,不再计算第二个操作数。
- || 运算符,在参与运算的第一个操作数为真时,立即返回真,不再判断第二个操作数。
逐位逻辑运算,是将数据先转化为二进制,再进行逐位逻辑运算,其运算结果自动转换为十进制数。
函数 | 作用 |
---|---|
bitand(a, b) | 逐位逻辑与 |
bitor(a, b) | 逐位逻辑或 |
bitcmp(a, b) | 逐位逻辑非 |
bitxor(a, b) | 逐位逻辑异或 |
4.运算优先级
在进行运算时,按照运算符的优先级,从高到低进行运算。对于相同优先级的运算符,按照从左到右的顺序进行。
二、数组和矩阵分析
(一)数组及其函数
1.数组的建立
-
直接创建
用
[ ]
来创建数组,数组中同一行元素之间用逗号
或空格
进行分割,不同行之间用分号
进行分割。>> a=[1, 2, 3, 4; 5, 6, 7, 8] a = 1 2 3 4 5 6 7 8 >>
空数组是MATLAB中最特殊的数组,
不含有任何元素
,可以用于数组的声明或者清空等。a = [] % 创建空数组
-
冒号创建
格式:
X=N1:step:N2
,N1
为起始值
,N2
为终止值
,step
为步长
。当不指定step
时,系统默认step
为1
。>> a=2:6 a = 2 3 4 5 6 >> b=[1:5] b = 1 2 3 4 5 >>
加不加中括号均可。
-
函数linspace()创建一维数组
格式:
x=linspace(x1,x2,N)
,创建行向量,起始值x1
,终止值x2
,总共N
个元素的等差数列
,不指定N
时,默认100
个元素。>> s=linspace(1,10,5) s = 1.0000 3.2500 5.5000 7.7500 10.0000 >>
-
函数logspace()创建一维数组
格式:
x=logspace(x1,x2,N)
,创建行向量,起始值为10的x1次方
,终止值为10的x2次方
,总共N个元素的等比数列
,不指定N
时,默认50
个元素。>> s=logspace(1,2,2) s = 10 100 >>
2.数组元素的引用
-
下标法引用
在MATLAB中,数组元素的下标是从1开始的。
通过下标访问一维数组元素的格式如下:
A(j)
A是数组名,j是列号。
通过下标访问二维数组元素的格式如下:
A(i,j)
A是数组名,i是行号,j是列号。
需要注意的是:
i
和j
都必须是大于等于1
的整数
,而且不能超过数组的总行数和总列数。如果想访问最后一行或者最后一列的元素,可以将下标设置为end
。>> a=[1:5;6:10] a = 1 2 3 4 5 6 7 8 9 10 >> b=a(end,end) b = 10 >>
>> a(end,end-2) % 访问倒数第三个元素 ans = 8 >>
-
索引法引用
所谓
索引
,就是元素在数组中存放的顺序号
。对于
一维数组
,元素从前往后挨着存储,下标为1的元素存放在第一个位置,此时索引就为1;下标为2的元素存放在第二个位置,此时索引就为2;以此类推。但我们需要关注的是
多维数组
的情况,比如二维数组
由行和列构成,此时元素的存放顺序是按行存储还是按列存储呢?在MATLAB中,
二维数组
的元素是按列存储
的。比如下面这个二维数组
:>> a=[1,2,3;4,5,6;7,8,9] a = 1 2 3 4 5 6 7 8 9 >>
它的元素、索引、下标的对应关系如下表所示:
下标 元素 索引 (1, 1) 1 1 (1, 2) 2 4 (1, 3) 3 7 (2, 1) 4 2 (2, 2) 5 5 (2, 3) 6 8 (3, 1) 7 3 (3, 2) 8 6 (3, 3) 9 9 对于三维数组:先列后行然后页
所以通过索引访问数组元素的格式如下:
A(index)
A
是数组名
,它可以是一维数组,也可以是多维数组。index
是索引
,它是一个整数
,取值范围是0~numel(A)
(numel这个函数用来求数组元素的个数)。
下标也可以放在另一个数组(向量)中,这样子得到的元素将以数组的形式返回:
A([i,j,k...])
-
布尔法引用
MATLAB允许使用一个
布尔类型
的矩阵
来指明每个数组元素
的去留
(保留或删除),具体的用法为:A(X)
X
是一个由0和1
组成的布尔类型矩阵
,且size(A) = size(X)
,对应位置为1
则留下
该数据,为0
则去掉
该数据,最后按照A
的存储顺序
,返回一个列向量
。size()
函数用来返回数组的尺寸
,也就是行数
和列数
。对于一维数组来说,数组的行数就是1,列数就是数组元素的个数(可用numel函数计算得出)。
>> a=[1,2,3;4,5,6;7,8,9] a = 1 2 3 4 5 6 7 8 9 >> b=[0 0 1;0 1 0;1 0 0] b = 0 0 1 0 1 0 1 0 0 >> a(b) 数组索引必须为正整数或逻辑值。 >> b=logical(b) % 转换为布尔类型 b = 3×3 logical 数组 0 0 1 0 1 0 1 0 0 >> a(b) ans = 7 5 3 >>
我们还可以直接选择输出符合一些运算条件的元素:
>> a(a>5) ans = 7 8 6 9 >>
它的原理是:
>> x=a>5 % 因为有了比较语句,所以返回的是布尔类型数组,符合条件的元素对应位置为1,否则为0 x = 3×3 logical 数组 0 0 0 0 0 1 1 1 1 >>a(x) ans = 7 8 6 9 >>
3.算数运算
运算规则: 若数组A和B的维数
相同,则可以执行算数运算是相应元素
进行运算
。如果A和B的维数不相同
,则MATLAB将给出错误
信息,提示用户两个数组的维数不匹配。
4.关系运算
MATLAB提供了6种
关系运算符:<(小于lt)、<=(小于或等于le)、>(大于gt)、>=(大于或等于ge)、==(恒等于eq)、~=(不等于ne)。
运算结果是与原数组相同维数
的由0, 1
组成的数组。(布尔类型)
两个原则:
- 当参与比较的量是两个
维数相同的数组
时,比较两数组相同位置
的元素,并给出比较结果。 - 当参与比较的一个是
标量
,而另一个是数组
时,则把标量
与数组的每一个元素
逐个比较。
5.逻辑运算
在MATLAB中,提供了3种逻辑运算符,分别是&(逻辑与)、|(逻辑或)和~(逻辑非)。
在逻辑运算中,如果为非零元素则为逻辑真,用1表示,零元素为逻辑假,用0表示。
6.相关函数
函数 | 作用 |
---|---|
isempty(A) | 检测数组是否为空,如果为空,返回值为1,否则,返回值为0。 |
isscalar(A) | 检测数组是否为单个元素的标量。 |
isvector(A) | 检测数组是否为行向量或列向量。 |
isrow( ) | 检测数组是否为列向量。 |
iscolum( ) | 检测数组是否为行向量。 |
issparse( ) | 检测数组是否为稀疏矩阵。 |
size( ) | 获取数组的行数和列数。 |
length( ) | 获取一维数组的长度,如果是二维数组,则返回行数和列数中的较大者 。 |
ndims( ) | 计算数组的维度。 |
find( ) | 返回关系表达式为真的元素的下标。 |
sort( ) | 默认按照升序排列,返回值为排序后的数组,和原数组维数相同。 |
(二)矩阵及其函数
矩阵就是二维数组,但矩阵内只能是数字。
1.矩阵的创建
-
直接创建
例如: 生成一个
2x3
的矩阵:>> a=[1,2,3;4,5,6] a = 1 2 3 4 5 6
>> b=[2:3:11;4:2:10] b = 2 5 8 11 4 6 8 10
-
函数创建
-
全零矩阵zeros( )
A=zeros(N)
:该函数产生N行N列的全零矩阵。>> a=zeros(3) a = 0 0 0 0 0 0 0 0 0
A=zeros(M, N)
:该函数产生M行N列的全零矩阵。A=zeros(size(B))
:该函数产生和矩阵B维数相同
的全零矩阵。 -
全一矩阵ones( )
该函数的调用格式和函数zeros( )一致。
>> a=ones(3) a = 1 1 1 1 1 1 1 1 1
-
单位矩阵eye( )
A=eye(N)
:该函数产生N行N列的单位矩阵。>> a=eye(3) a = 1 0 0 0 1 0 0 0 1
A=eye(M, N)
:该函数产生M行N列的矩阵,对角线元素为1
,其余元素均为0
。A=eye(size(B))
:该函数产生和矩阵B维数相同
的单位矩阵。 -
0~1间均匀分布的随机矩阵rand( )
A=rand(N)
:产生N行N列的0~1
之间均匀分布的随机矩阵。>> a=rand(3) a = 0.8147 0.9134 0.2785 0.9058 0.6324 0.5469 0.1270 0.0975 0.9575
A=rand(M, N)
:产生M行N列的0~1
之间均匀分布的随机矩阵。A=rand(size(B))
:产生和矩阵B维数相同
的0~1之间均匀分布的随机矩阵。 -
标准正态分布随机矩阵randn( )
采用函数
randn( )
产生均值为0
,方差为1
的标准正态分布
随机矩阵。该函数的调用格式和函数rand( )
基本一致。>> a=randn(3) a = 2.7694 0.7254 -0.2050 -1.3499 -0.0631 -0.1241 3.0349 0.7147 1.4897
-
魔方矩阵magic( )
魔方矩阵中
每行
、每列
及两条对角线
上的元素和
都相等。对于n阶
魔方阵,其元素由1,2,3,…,n2组成,共n2个整数。>> a = magic(3) a = 8 1 6 3 5 7 4 9 2
-
范得蒙矩阵vander(V)
范得蒙矩阵
最后一列全为1
,倒数第二列为一个指定的向量
,其他各列是其后列与倒数第二列
的点乘积
。可以用一个指定向量生成一个范得蒙矩阵。>> a=vander([1,2,3,4,5]) a = 1 1 1 1 1 16 8 4 2 1 81 27 9 3 1 256 64 16 4 1 625 125 25 5 1
-
2.矩阵元素的引用(见二(一)2)
需要注意的是: 对矩阵中的元素进行赋值
,如果行或者列超出矩阵的大小,则MATLAB自动扩充
矩阵的大小,然后再进行赋值,扩充部分用零
填充。
3.矩阵的基本操作
-
矩阵的扩展
可以通过矩阵的扩展,将多个小矩阵转换为大的矩阵。进行矩阵连接的函数有函数
cat( )
、函数vertcat( )
和函数horzcat( )
。C=cat(DIM, A, B)
:该函数在DIM维度
上进行矩阵A和B的连接
,返回值为连接后的矩阵。(DIM=1
:水平
方向连接;DIM=2
:垂直
方向连接。)C=vertcat(A, B)
:该函数在水平方向上连接数组A和B,相当于cat(1, A, B)
。C=horzcat(A, B)
:该函数在垂直方向上连接数组A和B,相当于cat(2, A, B)
。
-
矩阵的块操作
通过函数
repmat( )、函数blkdiag( )和函数kron( )
进行矩阵的块操作
。repmat( ):进行数据块的复制,该函数的调用格式为:
B=repmat(A, m, n)
:该函数产生大的矩阵B,把矩阵A当作单个元素,产生由m行和n列的矩阵A组成的大矩阵B。B=repmat(A, m)
:该函数产生大的矩阵B,把矩阵A当作单个元素,产生m行和m列的矩阵A组成的大矩阵B。
blkdiag( ):将多个矩阵作为对角块,产生新的矩阵。调用格式为:
Y=blkdiag(A, B)
:该函数将矩阵A和B作为对角块,产生新的矩阵Y。Y=blkdiag(A, B, …)
:该函数将多个矩阵作为对角块,产生新的矩阵。
kron( ):将其中一个矩阵中每个元素乘以另一个矩阵。
-
调用格式:
Y=kron(a,b)
-
如果
a
是2行2列
的矩阵,则:Y= a(1,1)*b a(1,2)*b a(2,1)*b a(2,2)*b
-
矩阵元素的删除
利用
空矩阵
删除矩阵的元素,空矩阵为一对方括号[]
。矩阵赋值为空矩阵的语句为
X=[]
。注意:
X=[]
与clear X
不同,clear
是将X
从工作空间
中删除,而空矩阵则存在于工作空间中,只是维数为0
。>> b=[2:3:11;4:2:10] b = 2 5 8 11 4 6 8 10 >> b(:,2)=[] % 删除第二列元素 b = 2 8 11 4 8 10 >>
-
矩阵的转置
最简单的是采用转置操作符
’
,从而实现矩阵A
转置为A’
。如果矩阵中含有复数
,则进行矩阵转置
后,复数转化为共轭复数
。还有一种转置是
A.’
,即使为复数
,也不转换为共轭
。也可以采用函数transpose(A)
来实现,两者完全一致。 -
矩阵的翻转
左右翻转:
fliplr(A)
上下翻转:
flipud(A)
此外,还可以采用函数
flipdim( )
进行矩阵的翻转。该函数的调用格式为
flipdim(A, k)
,该函数在指定的方向k
进行矩阵的翻转。- 当
k=1
时,相当于flipud(A)
。 - 当
k=2
时,相当于fliplr(A)
。
- 当
-
矩阵尺寸的改变
在矩阵总元素保持不变的前提下,用函数reshape()改变矩阵的尺寸。
该函数的调用格式为:
Y=reshape(X, m, n)
,将矩阵转换为m行n列
的二维矩阵。矩阵的总元素数
不变。b = 2 8 11 4 8 10 >> Y=reshape(b,3,2) Y = 2 8 4 11 8 10
4.矩阵的基本数值运算
-
矩阵的加减运算
假定有两个矩阵
A
和B
,则可以由A+B
和A-B
实现矩阵的加减运算,要求矩阵A
和B
的维数
必须相同
。矩阵的
加法
和减法
是矩阵中对应元素加减
。如果运算中有一个为标量
,则将矩阵中的每一个元素
和该标量
进行加减运算
。>> a=[1,3;2,4;5,6];b=[2,3;4,1;7,2]; >> c=a+b c = 3 6 6 5 12 8 >> d=a-b d = -1 0 -2 3 -2 4
>> e=a+1 e = 2 4 3 5 6 7
-
矩阵的乘法运算
A*B: 要求矩阵
A
的列数
和矩阵B
的行数
必须相等
。>> a=[1,2;3,4;5,6];b=[4 5 6;7 8 9]; >> c=a*b c = 18 21 24 40 47 54 62 73 84
A.*B: 表示矩阵
A
和B
中对应元素
相乘,要求矩阵A和B具有相同的维数
,返回结果和原矩阵有相同的维数
。>> a=[1,2; 3,4; 5,6];b=[4 5; 6 7; 8 9]; >> c=a.*b c = 4 10 18 28 40 54
-
矩阵的除法运算
X=A\B: 矩阵A和B的左除,表示方程组A*X=B的解。
X=B/A: 矩阵A和B的右除,表示线性方程组X*A=B的解。
此外,还有矩阵的
点除
,采用“./”
或“.\”
表示,表示两个矩阵中对应元素相除
。 -
矩阵的元素查找
采用函数find( )进行矩阵元素的查找。
函数
find( )
通常和关系运算
和逻辑运算
相结合,能够对矩阵中的元素进行查找。该函数的调用格式为:
-
i=find(A)
:该函数查找矩阵中的非零元素,函数返回这些元素的索引。 -
[i,j]=find(A)
:该函数查找矩阵中的非零元素,函数返回这些元素的下标,i是行,j是列。>> a=[0,1,2;0 0 0] a = 0 1 2 0 0 0 >> [i,j]=find(a) i = 1 1 j = 2 3 % 将i与j综合看,第一行第二列、第一行第三列的元素非零。
-
-
矩阵元素的排序
sort( ):默认按照
升序
排列,返回排序后的矩阵。-
Y=sort(X)
:对矩阵按照升序进行排列,此时就等于Y=sort(X, 1)
。 -
Y=sort(X, DIM)
:该函数返回在给定的维数上的按照由小到大的顺序排序后的结果。当
DIM=1
时,每一列
发生排序。>> a=magic(3) a = 8 1 6 3 5 7 4 9 2 >> Y=sort(a,1) Y = 3 1 2 4 5 6 8 9 7
当
DIM=2
时,每一行
发生排序。>> a=magic(3) a = 8 1 6 3 5 7 4 9 2 >> Y=sort(a,2) Y = 1 6 8 3 5 7 2 4 9
-
Y=sort(X, DIM, ‘MODE’)
:参数MODE默认值为ascend
,即按照升序
进行排列;当MODE为descend
时,对矩阵进行降序
排列。
-
-
矩阵元素的求和
Y=sum(X, DIM):该函数返回在给定的维数DIM上的元素的和。(DIM不写默认为1)
当
DIM=1
时,计算矩阵各列
元素的和。>> e e = 2 4 3 5 6 7 >> b=sum(e) b = 11 16
当
DIM=2
时,得到矩阵各行
元素的和。>> e e = 2 4 3 5 6 7 >> b=sum(e,2) b = 6 8 13
函数cumsum( )的调用格式和函数sum( )类似,不同之处是函数cumsum( )的返回值为矩阵。
>> a=magic(3) a = 8 1 6 3 5 7 4 9 2 >> b=cumsum(a) b = 8 1 6 11 6 13 15 15 15 >> b=cumsum(a,2) b = 8 9 15 3 8 15 4 13 15
-
矩阵元素的求积
Y=prod(X, DIM):该函数返回在给定的维数上的元素的积。(DIM不写默认为1)
当
DIM=1
时,计算矩阵各列
元素的积。当
DIM=2
时,得到矩阵各行
元素的积。>> e e = 2 4 3 5 6 7 >> f=prod(e) f = 36 140 >> f=prod(e,2) f = 8 15 42
函数cumprod( )的调用格式和函数prod( )类似,不同之处是函数cumprod( )的返回值为矩阵。
>> f=cumprod(e) f = 2 4 6 20 36 140