一、矩阵构造
简单矩阵的构造:采用方括号[],同行元素用逗号“,”隔开,行与行之间用“;”隔开
特殊矩阵的构造函数:
ones(n)构建n*n的矩阵,矩阵元素全为1;
ones(m,n) 构建m*n的矩阵,矩阵元素全为1;
ones(size(A))构建与A矩阵同样大小的矩阵,元素全为1;
zeros(n)构建0矩阵;
zeros(m,n)
zeros(size(A))
-----------------------------------------------------------------------------------------------------
eye(n)单位矩阵
eye(m,n)
eye(size(A))
----------------------------------------------------------------------------------------------------
magic(n) 构建一个n*n的矩阵,其每一行每一列的元素之和都相等
rand(n)构建n*n的矩阵,其元素为0-1之间均匀分布的随机数
rand(m,n)构建m*n的矩阵,其元素为0-1之间均匀分布的随机数
向量:即行向量与列向量
标量:m=n=1,建立的矩阵为标量,任意的1*1的矩阵形式可以表示的单个实数、复数都是标量;
空矩阵:当m=n=0或者m=0,n=0,创建的矩阵成为空矩阵,空矩阵不是0矩阵。
-----------------------------------------------------------------------------------------------------
矩阵旋转与改变维度的函数
fliplr(A):矩阵的每一行均进行逆序排序
flipud(A):矩阵的每一列均进行逆序排序
rot90(A):生产一个由矩阵A逆时针旋转90度而得到的新矩阵
rot90(A,K):生产一个由矩阵A逆时针旋转k*90度而得到的新矩阵
reshape(A,m,n):生成一个m*n的矩阵,其元素以线性索引的顺序从矩阵A中取得,A中的元素必须为m*n个
reshape(A,[m n ...p]):创建一个与矩阵A有相同元素的m*n...*p多维矩阵
>> reshape(a,[2 2 2])
Error using reshape
To RESHAPE the number of elements must not change.
>> reshape(a,[1 2 3])
ans(:,:,1) =
1 4
ans(:,:,2) =
2 5
ans(:,:,3) =
3 6
-----------------------------------------------------------------------------------------------------------------------------------
shift(A,n)矩阵的列移动n步,n为正数,矩阵向左移动,n为负数,向右移动
squeeze(A) 返回没有空维的矩阵A
cat(dim,A,B)将矩阵组合A和B组合成一个dim维多维矩阵
permute(A,order)根据向量order来改变矩阵中A中的维数顺序
ipermute(A,order)根据permute的逆变换
sort(A)对一维矩阵或二维矩阵进行升序排序,并返回升序之后的矩阵,当A是二维矩阵时,对矩阵的每一列分别进行排序
sort(A,dim)dim=1时,对列进行排序,当dim=2时,对进行排序
sort(A,dim,mode)mode为ascend时,升序排列,mode为descend时为降序排序
[B,ix]=SORT(A...) ix为排序后备元素在元矩阵中的行位置或列位置的索引
----------------------------------------------------------------------------------------------------
矩阵的合并
C=[A,B]在水平方向,合并矩阵A和B
C=[A;B]在竖直方向上合并A和B
具有相同高度的两个矩阵可以在水平方向上合并为新矩阵,否则不能。
矩阵行列的删除
要删除矩阵的某行或某列,只要把该行或者列赋予一个穷矩阵[]就可以;
>> A=rand(4)
A =
0.8147 0.6324 0.9575 0.9572
0.9058 0.0975 0.9649 0.4854
0.1270 0.2785 0.1576 0.8003
0.9134 0.5469 0.9706 0.1419
>> A(2,:)
ans =
0.9058 0.0975 0.9649 0.4854
>> A(2,:)=[]%:代表所有的行
A =
0.8147 0.6324 0.9575 0.9572
0.1270 0.2785 0.1576 0.8003
0.9134 0.5469 0.9706 0.1419
冒号“:”代表所有行或者所有列
重构矩阵
转置矩阵:a的转置是a'
>> A'
ans =
0.8147 0.1270 0.9134
0.6324 0.2785 0.5469
0.9575 0.1576 0.9706
0.9572 0.8003 0.1419
共轭矩阵
a的共轭矩阵为conj(a)
====================================================================
二、矩阵的下标
矩阵的下标索引有两种:双下标索引和单下标索引两种;单下标索引是按照列元素优先,按列进行重排,组成一个一维数组
>> A=magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> A(10)
ans =
10
矩阵索引表达式
A(:) 将二维矩阵A重组为一维数组,返回数组中第一个元素;
A(j:k)返回上述A(:)的第j到第k个元素
A(:,j):表示返回矩阵的第j列列向量
A(i,:):第i行的行向量
A(:,i:j):表示返回第i列到第j列的列向量
A(i:j,:):
A(:,[1,3]):返回第一列和第三列
A(i:j,k:l)返回第i行到第j行与第k列和第l列列向量交集的子矩阵
>> A(1:3,2:4)
ans =
2 3 13
11 10 8
7 6 12
end关键字
表示该维中最后一个元素
>> A(1,end)
ans =
13
>> A(4,end)
ans =
1
--------------------------------------------
单下标和双下标索引值的转换
sub2ind(size,i,j):将双下标索引转换为单下标索引值,其中size是包含两个元素的数组,一般用size(A)表示,i和j是双下标的行列值,
[i,j]=ind2sub(size,ind):其功能是将单下标转换为双下标
>> sub2ind(size(A),3,4)
ans =
15
>> ind2sub(size(A),10)
ans =
10
>> [i,j]=ind2sub(size(A),10)
i =
2
j =
3
矩阵运算
>> a=rand(4)
a =
0.4218 0.6557 0.6787 0.6555
0.9157 0.0357 0.7577 0.1712
0.7922 0.8491 0.7431 0.7060
0.9595 0.9340 0.3922 0.0318
>> b=rand(4)
b =
0.2769 0.6948 0.4387 0.1869
0.0462 0.3171 0.3816 0.4898
0.0971 0.9502 0.7655 0.4456
0.8235 0.0344 0.7952 0.6463
>> a-b
ans =
0.1448 -0.0391 0.2400 0.4686
0.8696 -0.2814 0.3762 -0.3186
0.6951 -0.1011 -0.0224 0.2605
0.1360 0.8995 -0.4030 -0.6145
>> a*b
ans =
0.7528 1.1685 1.4761 1.1261
0.4698 1.3735 1.1316 0.6369
0.9122 1.5502 1.8019 1.3514
0.3731 1.3367 1.1029 0.8321
>> a+1
ans =
1.4218 1.6557 1.6787 1.6555
1.9157 1.0357 1.7577 1.1712
1.7922 1.8491 1.7431 1.7060
1.9595 1.9340 1.3922 1.0318
>> a*b'
ans =
0.9927 0.8074 1.4757 1.3333
0.6428 0.4266 0.7792 1.4685
1.2674 0.9352 1.7673 1.7289
1.0927 0.5057 1.2951 1.1547
>> b'
ans =
0.2769 0.0462 0.0971 0.8235
0.6948 0.3171 0.9502 0.0344
0.4387 0.3816 0.7655 0.7952
0.1869 0.4898 0.4456 0.6463
矩阵的除法
分为:/ 右除和左除\,如果矩阵A和B是标量,则左右除法等价;一般的二维矩阵A、B,当进行A\B运算时,要求A的行数与B的列数相同,当A/B时,要求A列数与B的列数相等。
矩阵的幂次运算
只有当矩阵为方阵时,才可以 "^"
===================================================================
矩阵元素的查找
find() 通常结合关系函数和逻辑函数
ind=find(x):该矩阵查找矩阵X中的非零元素,函数返回这些元素的单下标
[row,col]=find(x):该函数查找矩阵X中的非零元素,函数返回这些元素的双下标
矩阵元素的求和
sum(A)对矩阵A的元素求和,返回由矩阵各列元素的和组成的向量
sum(A,dim)该函数返回在给定的维数dim上元素的和,dim=1时,计算矩阵A各列元素的和,dim=2时,计算矩阵各行元素的和。
矩阵元素的差分
diff(x) 计算矩阵个列元素的查分
diff(x,n)计算矩阵各列元素的n阶差分
diff(x,n,dim)当dim=1时,计算矩阵各列元素的差分,当dim=2时,计算矩阵各行元素的差分
==================================================================================
矩阵结构:矩阵子元素的排列方式
isempty(A)判断矩阵是否为空
isscalar(A)检测矩阵是否是单元素的标量矩阵
isvector(A)检测矩阵是否是只具有一行或者一列元素的一维向量
issparse(A)检测数组是否是系数矩阵
以上函数返回值是1或者0;
矩阵的大小
n=ndims(x) 获取矩阵维数
[m,n]=size(x) 获取矩阵在各维上的长度
n=length(x) 获取矩阵在最长维上的长度
n=nume(x)获取矩阵元素的个数
矩阵的数据类型
isnumeric 检测矩阵元素是否为数值型变量
isreal 实数数值型
isfloat 浮点数值型
isinterger 整型变量
ischar 字符型
islogical 逻辑型
isstruct 结构体型
返回值是逻辑型数据
矩阵占用的内存
whos