一、基础阶段
(一)数据类型
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
|