Matlab学习笔记 Day4
注:仅供学习使用,部分内容来自学校课程课件或网络,理性探讨。
1.矩阵的拼接
(1)将几个矩阵放在[ ]内,水平连接用空格或逗号隔开,[A B]或[A,B]也可以写成horzcat(A,B);垂直连接用分号或回车键隔开,也可以写成vertcat(A,B)
代码例子:
>> A=[];
>> A=[A;ones(1,3)]
A =
1 1 1
>> A=[A;2*ones(1,3)]
A =
1 1 1
2 2 2
>> A=[A;3*ones(1,3)]
A =
1 1 1
2 2 2
3 3 3
>> A=[A eye(3)]
A =
1 1 1 1 0 0
2 2 2 0 1 0
3 3 3 0 0 1
>> A=[A zeros(3)]
A =
1 1 1 1 0 0 0 0 0
2 2 2 0 1 0 0 0 0
3 3 3 0 0 1 0 0 0
>> B=1:9;A(4,:)=B
A =
1 1 1 1 0 0 0 0 0
2 2 2 0 1 0 0 0 0
3 3 3 0 0 1 0 0 0
1 2 3 4 5 6 7 8 9
>> C=ones(4,2)
C =
1 1
1 1
1 1
1 1
>> A(:,10:11)=C
A =
1 1 1 1 0 0 0 0 0 1 1
2 2 2 0 1 0 0 0 0 1 1
3 3 3 0 0 1 0 0 0 1 1
1 2 3 4 5 6 7 8 9 1 1
(2)通过矩阵重复平铺产生大矩阵
函数:repmat(A,row,col)或repmat(A,[row,col])
功能:将矩阵A沿行和列的方向分别重复row和col次
说明:repmat(A,2,3)和[ A A A ; A A A ]相同
2.矩阵元素重组
函数:B = reshape(A,m,n) 或 reshape(A,[m,n])
功能:返回由矩阵A元素组成的 m x n 的矩阵B,但矩阵A不发生变化。
3.矩阵元素的删除
通过赋值为空( [ ] ),可以实现删除若干行元素、若干列元素和整个数组。
注意区分空矩阵和零矩阵!!空矩阵是0x0的数组,而零矩阵是mxn的数组。
4.三维数组
(1)三维数组全下标赋值:
>> A(2,2,2)=1
A(:,:,1) =
0 0
0 0
A(:,:,2) =
0 0
0 1
(2)对二维矩阵扩充得到三维矩阵
>> b=[1 1; 1 1 ];b(:,:,2)=[2 2 ;2 2]
b(:,:,1) =
1 1
1 1
b(:,:,2) =
2 2
2 2
(3)将若干个同样大小的二维矩阵进行组合得到三维矩阵
elmat函数库专门提供了函数cat
函数:cat(d,A1,A2,…An)
功能:将一系列数组沿第d维连接成一个数组
>> B1=ones(2,3);B2=repmat(2,2,3);B3=repmat(3,2,3);
>> A1=cat(1,B1,B2,B3)
A1 =
1 1 1
1 1 1
2 2 2
2 2 2
3 3 3
3 3 3
注意:以下式子是等价的
cat(1,B1,B2,B3)↔[B1;B2;B3]↔vertcat(B1,B2,B3)
cat(2,B1,B2,B3)↔[B1,B2,B3]↔horzcat(B1,B2,B3)
(4)利用函数zeros,ones,rand,randn等生成函数直接创建
(5)通常,先用zeros定维、初始化,然后再对其元素进行赋值【推荐使用】
5.多维数组信息
rdims(A) 返回矩阵A的维数
size(A) 返回矩阵A各维的大小,其中nk或ns(k)是第k维的大小
nk=size(A,K) 返回矩阵A第k维的大小
numel(A) 返回矩阵A中元素个数
length(V) 主要用于给出向量V的长度,若用于矩阵则length(A)给出行数和列数中的较大者,即max(size(A))
例子:注意,这里面看数组为1行10列的矩阵,矩阵是二维的,且列维数最大值是1,行维数最大值是10
>> x=1:10;ndims(x),size(x),length(x)
ans =
2
ans =
1 10
ans =
10
6.稀疏数组(以稀疏方式存储的数组,零元素较多)
函数库sparfun中提供了一系列以不同方式建立稀疏矩阵的函数。稀疏矩阵建立后与普通的数组使用方法类似。
(1)将完全存储转化为稀疏存储的转换函数:
A=sparse(S),将矩阵S转化为稀疏存储方式,当矩阵S是稀疏存储方式时,则A=S
A=sparse(m,n):生成一个mxn的所有元素均为0的稀疏矩阵
A=sparse(u,v,S):建立一个max(u)行、max(v)列并以S为稀疏元素的系数矩阵,u(i),v(i)分别为S(i)的行和列下标
(2)将稀疏存储转化为完全存储的转换函数:
B=full(A):返回完全存储矩阵
例子(演示sparse和full)
u=1:4,v=3:6,S=0.1:0.1:0.4,spa=sparse(u,v,S),A=full(spa)
u =
1 2 3 4
v =
3 4 5 6
S =
0.1000 0.2000 0.3000 0.4000
spa =
(1,3) 0.1000
(2,4) 0.2000
(3,5) 0.3000
(4,6) 0.4000
A =
0 0 0.1000 0 0 0
0 0 0 0.2000 0 0
0 0 0 0 0.3000 0
0 0 0 0 0 0.4000
(3)生成函数
B=spconvert(A):创建由矩阵A所描述的一个稀疏存储矩阵。
A(i,1):第i个非零元素行下标
A(i,2):第i个非零元素列下标
A(i,3):第i个非零元素实部
A(i,4):第i个非零元素虚部,若矩阵的全部元素都是实数,则无此列
例子:
>> A=[1 2 3;3 4 5;6 7 8]
B=spconvert(A)
A =
1 2 3
3 4 5
6 7 8
B =
(1,2) 3
(3,4) 5
(6,7) 8
>> clear
>> A=[1 2 3 4;3 4 5 6;6 7 8 9]
B=spconvert(A)
A =
1 2 3 4
3 4 5 6
6 7 8 9
B =
(1,2) 3.0000 + 4.0000i
(3,4) 5.0000 + 6.0000i
(6,7) 8.0000 + 9.0000i
(4)A=spdiags(B,d,m,n):产生带状稀疏矩阵
(5)speye(m,n):返回一个mxn的稀疏存储方式单位矩阵
DAY4体会:随着学习时间加长,学习进度明显提高了,MATLAB的学习与函数的学习密不可分,要理解具体函数对应的意思,实在不记得也可以通过help查找函数的用法和具体内容