一、diag函数
diag函数功能:矩阵对角元素的提取和创建对角阵
设以下X为方阵,v为向量
1、X = diag(v,k)
当v是一个含有n个元素的向量时,返回一个n+abs(k)阶方阵X,向量v在矩阵X中的第k个对角线上
k=0表示主对角线;k>0表示在主对角线上方;k<0表示在主对角线下方。
例1:
v=[1 2 3];
diag(v, 3)
ans =
0 0 0 1 0 0
0 0 0 0 2 0
0 0 0 0 0 3
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
注:从主对角矩阵上方的第三个位置开始按对角线方向产生数据的
例2:
v=[1 2 3];
diag(v, -1)
ans =
0 0 0 0
1 0 0 0
0 2 0 0
0 0 3 0
注:从主对角矩阵下方的第一个位置开始按对角线方向产生数据的
2、X = diag(v)
向量v在方阵X的主对角线上,类似于diag(v,k),k=0的情况。
例3:
v=[1 2 3];
diag(v)
ans =
1 0 0
0 2 0
0 0 3
注:写成了对角矩阵的形式
3、v = diag(X,k) 第一个变量是矩阵的情况下
返回列向量v,v由矩阵X的第k个对角线上的元素形成
例4:
v=[1 0 3;2 3 1;4 5 3];
diag(v,1)
ans =
0
1
注:把主对角线上方的第一个数据作为起始数据,按对角线顺序取出写成列向量形式
4、v = diag(X)返回矩阵X的主对角线上的元素,类似于diag(X,k),k=0的情况例5:
v=[1 0 0;0 3 0;0 0 3];
diag(v)
ans =
1
3
3
或改为:
v=[1 0 3;2 3 1;4 5 3];
diag(v)
ans =
1
3
3
注:把主对角线的数据取出写成列向量形式
5、diag(diag(X))
取出X矩阵的对角元,然后构建一个以X对角元为对角的对角矩阵。
例6:
X=[1 2;3 4]
diag(diag(X))
X =
1 2
3 4
ans =
1 0
0 4
二、eye(M,N)
eye()函数常用的两种调用方式:
eye(N) 生成一个N行N列的单位矩阵。
例1:
>> eye(3)
ans =
1 0 0
0 1 0
0 0 1
eye(M,N) 生成一个M行N列的"单位"矩阵,主对角线元素为1,其余元素为0。
例2:
>> eye(3,2)
ans =
1 0
0 1
0 0
三、 @ 创建句柄
其中使用@ 来创建函数的句柄:
一般的定义方式为 function_handle = @function_name ,则创建一个函数句柄,句柄可以视为函数的别名,如 func = @sin,则 sin(x) 也可通过 func( x )实现;
举例:
f_func = @ukf_ins_f;
h_func = @uwb_h;
四、nargin / nargout
nargin为“number of input arguments”的缩写。 在matlab中定义一个函数时, 在函数体内部, nargin是用来判断输入参数变量个数的函数。在matlab命令窗口中输入help nargin或者doc nargin即可获得该函数的帮助信息。
例1.函数文件 examp.m
function fout=examp(a,b,c)
if nargin==1
fout=a;
else if nargin==2
fout=a+b;
else if nargin==3
fout=(a*b*c)/2;
end
end
end
nargout: 在matlab中定义一个函数时, 在函数体内部, nargout是用来判断输出参数变量个数的函数
五、length 函数
1、size
获取数组的行数和列数
2、length
数组长度,即行数和列数中的较大值,相当于max(size(a))
3、numel
返回元素总数
六、矩阵的转置
A.'是一般转置,A'是共轭转置,顾名思义是对矩阵先做共轭运算,再进行转置,在A是实数矩阵时,两者没有区别,但是当A是复矩阵时,就有区别了,示例如下:
A=[1 2 3;4 5 6]
A =
1 2 3
4 5 6
>> A.'
ans =
1 4
2 5
3 6
>> A'
ans =
1 4
2 5
3 6
>> a=[1+i 2+2i 3+3i;4+4i 5+5i 6+6i]
a =
1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i
4.0000 + 4.0000i 5.0000 + 5.0000i 6.0000 + 6.0000i
>> a.'
ans =
1.0000 + 1.0000i 4.0000 + 4.0000i
2.0000 + 2.0000i 5.0000 + 5.0000i
3.0000 + 3.0000i 6.0000 + 6.0000i
>> a'
ans =
1.0000 - 1.0000i 4.0000 - 4.0000i
2.0000 - 2.0000i 5.0000 - 5.0000i
3.0000 - 3.0000i 6.0000 - 6.0000i
另外补充一个conj(a)是求a的共轭矩阵,示例如下:
conj(a)
ans =
1.0000 - 1.0000i 2.0000 - 2.0000i 3.0000 - 3.0000i
4.0000 - 4.0000i 5.0000 - 5.0000i 6.0000 - 6.0000i
七、MATLAB实现频数直方图——hist的使用
"hist" is short for "Histogram(直方图、柱状图)"。
1.N = hist(Y)
bins the elements of Y into 10 equally spaced containers and returns the number of elements in each container. If Y is a matrix, hist works down the columns.
(将向量Y的元素平均分到十个等间隔的容器中,并且返回每个容器的元素个数。如果Y是一个矩阵,hist指令逐列元素操作。Y为向量的情形见例1和2,为矩阵的情形见例3.)
例1.执行指令
>> Y = [1:10];
>> hist(Y)
得到
10个蓝色方条,每个方条对应一个容器,其长度代表容器中数据的多少。由图知,容器中的数据量均为1。这个例子不够典型,见例2.
例2.执行指令
>> Y = [1, 2, 2, 5, 6, 6, 8, 11];
>> hist(Y)
得到
Y最大为11,最小为1,故而将区间[1,11]均分为10分,分别为[1, 2], (2,3], (3,4], (4,5], (5,6], (6,7], (7,8], (8,9], (9,10], (10,11].
例3.当Y是矩阵时的情况。
执行指令:
>> Y = [1,2.5,2.1;3,3.5,6];
>> hist(Y)
注意,Y为矩阵:
1.0000 2.5000 2.1000
3.0000 3.5000 6.0000
Y有三列元素,逐列元素产生对应的直方图。得到
观察此图和矩阵Y,由于Y的元素最大为1,最小为6,故而将区间[1,6]以0.5的间隔划分为10个等长的子区间作为10个容器去容纳数据。图中有三种颜色的方条:蓝色,绿色和红色,分别对应Y中的第1,2,3列元素。如第一列元素为1和3,故而区间[1,1.5]和(2.5,3]中有蓝色方条。
2.N = hist(Y,M)
where M is a scalar, uses M bins.(M是一个标量,表明使用M个箱子)
例1.执行指令
>> Y = [1, 1, 1.3, 2.6, 3, 3.4, 5, 5.9, 6, 6,1, 7, 7,2];
>> hist(Y, 6)
得到
3.N = hist(Y,X)
where X is a vector, returns the distribution of Y among bins with centers specified by X.(X是向量,以X中的元素为区间中心可获得一系列区间,执行命令可获得Y在这些区间中的分布情况。) The first bin includes data between -inf and the first center and the last bin includes data between the last bin and inf. Note: Use HISTC if it is more natural to specify bin edges instead.
八、逆(inv)与伪逆(pinv)
对于方阵A,如果为非奇异方阵,则存在逆矩阵inv(A)
对于奇异矩阵或者非方阵,并不存在逆矩阵,但可以使用pinv(A)求其伪逆
先搞清楚什么是伪逆。
对于方阵A,若有方阵B,使得:A·B=B·A=I,则称B为A的逆矩阵。
如果矩阵A不是一个方阵,或者A是一个非满秩的方阵时,矩阵A没有逆矩阵,但可以找到一个与A的转置矩阵A'同型的矩阵B,使得:
A·B·A=A
B·A·B=B
此时称矩阵B为矩阵A的伪逆,也称为广义逆矩阵。因此伪逆阵与原阵相乘不一定是单位阵。
当A可逆时,B就是A的逆矩阵,否则就是广义逆。
满足上面关系的A,B矩阵,有很多和逆矩阵相似的性质。
如果A为非奇异矩阵的话,虽然计算结果相同,但是pinv会消耗大量的计算时间。
在其他情况下,pinv具有inv的部分特性,但是不完全相同。
九、sort排序
sort(A)若A是向量不管是列还是行向量,默认都是对A进行升序排列。sort(A)是默认的升序,而sort(A,'descend')是降序排序。
sort(A)若A是矩阵,默认对A的各列进行升序排列
sort(A,dim)
dim=1时等效sort(A)
dim=2时表示对A中的各行元素升序排列
'descend'即降序,'ascend'即升序
看下面的例子
>> A=magic(3)
A =
8 1 6
3 5 7
4 9 2
>> sort(A)
ans =
3 1 2
4 5 6
8 9 7
>> sort(A,1)
ans =
3 1 2
4 5 6
8 9 7
>> sort(A,2)
ans =
1 6 8
3 5 7
2 4 9
>> sort(A,1,'descend')
% 1 表示按照列排序;2表示按照 行 进行排序; 'descend'即降序,'ascend'即升序
ans = 8 9 7 4 5 6 3 1 2