1. linspace
用法:linspace(x1,x2,N)
功能:linspace是Matlab中的均分计算指令,用于产生x1,x2之间的N点行线性的矢量。其中x1、x2、N分别为起始值、终止值、元素个数。若默认N,默认点数为100。
linspace
类似于冒号运算符“:
”,但可以直接控制点数并始终包括端点
2. meshgrid
[X,Y] = meshgrid(x,y)
生成采样点的网格,举个例子就明白了x=1:3;y=10:14;[X,Y] = meshgrid(x,y)
X =
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
Y =
10 10 10
11 11 11
12 12 12
13 13 13
14 14 14
meshgrid的函数应该是这样编出来的:x=x1:d1:x2;y=[y1:d2:y2]';X=ones(size(y))*x;Y=y*ones(size(x))
3. (1)行数,(2)列数
size(X,1),返回矩阵X的行数;
size(X,2),返回矩阵X的列数
[r,c,m]=size(A)
输出:r=
3
c=
4
m=
1
也就说它把二维矩阵当作第三维为1的三维矩阵,这也如同我们把n维列向量当作n×1的矩阵一样
4. sum
>> a = ones(3,3)
a =
1 1 1
1 1 1
1 1 1
a=sum(x);%列求和
>> sum(a)
ans =
3 3 3
a=sum(x,2);%行求和
>> sum(a,2)
ans =
3
3
3
a=sum(x(:));%矩阵求和
5. blkdiag
blkdiag函数:生成指定对角线元素的矩阵
A = blkdiag(a,b,c,d,...) 函数产生以a,b,c,d,...为对角线元素的矩阵A
6. find
用于返回所需要元素的所在位置
1. ind = find(X) 找出矩阵X中的所有非零元素
2. ind = find(X, k) 返回第一个非零元素k的索引值
3. ind = find(X, k, 'first') 返回第一个非零元素k的索引值
4. ind = find(X, k, 'last') 返回最后一个非零元素k的索引值。
5. [row,col] = find(X, ...)
6. [row,col,v] = find(X, ...)
例1,
A= magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
[r,c,v]= find(A>10);
r', c', v'
ans =
1 2 4 4 1 3 (按列)
ans =
1 2 2 3 4 4 (按列)
ans =
1 1 1 1 1 1
例2,
对于矩阵
M = magic(3)
M =
8 1 6
3 5 7
4 9 2
find(M > 3, 4)
返回前四个M>3的索引值
ans =
1
3
5
6
例3,
如果X是一个全零向量,find(X)返回一个空矩阵。
例如indices = find([0;0;0])
indices =
Empty matrix: 0-by-1
7. min
b为一维矩阵的话,min是寻找b中的最小值,并返回其坐标和最小值。
>> [x,m]=min(b)
x =0.2311 %x为最小值
m =2 %m为列号,即b(2)为b中的最小值
b为二维矩阵的话,min是按列寻找最小值,并返回其各列的最小值和列号。
>> [x,m]=min(b)
x =0.6154 0.1763 0.4103 %x为各列的最小值
m =1 2 3 %m为每个最小值对应的列号
8.setdiff
matlab判断2个数组中不同元素--setdiff
c = setdiff(A, B) 返回在A中有,而B中没有的值,结果向量将以升序排序返回。在集合论中,c = A - B。A和B也可以是字符串细胞数组。
9.repmat
B = repmat(A,m,n)
将矩阵 A 复制 m×n 块,即把 A 作为 B 的元素,B 由 m×n 个 A 平铺而成。B 的维数是 [size(A,1)*m, size(A,2)*n] 。
>> A = [1,2;3,4]
A =
1 2
3 4
>> B = repmat(A,2,3)
B =
1 2 1 2 1 2
3 4 3 4 3 4
1 2 1 2 1 2
3 4 3 4 3 4
10.sparse
函数sparse()的更常用的用法是用来产生稀疏矩阵,具体语法如下:
S=vsparse(r,c,s,m,n)
其中r和c是我们希望产生的稀疏矩阵的矩阵中非零元素的行和列索引向量。参数s是一个向量,它包含索引对(r,c)对应的数值,m和n是结果矩阵的行维数和列维数。例如:
>> s=sparse( [3 2 3 4 1 ],[ 1 2 2 3 4 ],[1 2 3 4 5],4,4)
s =
(3,1) 1
(2,2) 2
(3,2) 3
(4,3) 4
(1,4) 5
如果要获得完成的矩阵,可以使用full()函数,函数语法:
A=full(s)
例如:
>> a=full(s)
a =
0 0 0 5
0 2 0 0
1 3 0 0
0 0 4 0
11. A(B)
A(B): A B都是矩阵
e.g. A=[1 2 3;4 5 6;7 8 9;], B=[1 2;3 4]
>> A(B)
ans =
1 4
7 2
B=[x,y,z]
A(B,B)=[xx xy xz
yx yy yz
zx zy zz]
12. 矩阵转置:
A' 共轭转置
A.' 转置
>> a=[1,2;3,4];
>> a'
ans =
1 3
2 4
>> a.'
ans =
1 3
2 4
>> b=[1+2i,3-4i;5+6i,7];
>> b'
ans =
1.0000 - 2.0000i 5.0000 - 6.0000i
3.0000 + 4.0000i 7.0000
>> b.'
ans =
1.0000 + 2.0000i 5.0000 + 6.0000i
3.0000 - 4.0000i 7.0000
13. 取整
fix(x),floor(x)和ceil(x)函数都是对x取整,只不过取整方向不同而已。
这里的方向是以x轴作为横坐标来看的,向右就是朝着正轴方向,向左就是朝着负轴方向。
fix(x):向0取整(也可以理解为向中间取整)
floor(x):向左取整
ceil(x):向右取整
举例:
a=3.3 | b=3.7 | c=-3.3 | d=-3.7 | |
fix | 3 | 3 | 3 | -3 |
floor | 3 | 3 | -4 | -4 |
ceil | 4 | 4 | -3 | -3 |
14. ind2sub和sub2ind
ind2sub和sub2ind这对函数,是互逆的一对函数。ind2sub把数组或者矩阵的线性索引转化为相应的下标;sub2ind则正好相反,将下标转化为线性索引。
例如: 一个4*5的矩阵A,第2行第2个元素的index的6(matlab中matrix是按列顺序排列),可以用ind2sub函数来计算这个元素的下标 [I,J] = ind2sub(size(A),6).
15. save
save(filename,variables)
16.intersect
[c, ia, ib] = intersect(A, B);
这个函数是c返回A B的交集,ia,ib返回的是 交集 所在 数组的指标。
例:A=[2 3 4]; B=[3];
[c, ia, ib] = intersect(A, B);
得到 c=[3]
c在数组A的指标为ia=2
c在数组B的指标为ib=1
17 输出到文件
function writeDat(wfile,filename)
fid = fopen(filename, 'wt');
[m, n] = size(wfile);
for i = 1:m
for j = 1:n
if j == n
fprintf(fid, '%g\n', wfile(i, j));
else
fprintf(fid, '%g\t', wfile(i, j));
end
end
end
fclose(fid);
end