【语法说明】
- B = sort(A); 沿着输入参量A的不同维的方向,从小到大重新排列A中的元素。A可以是字符串的、实数的、复数的单元数组。若A为复数的,则按元素幅值从大到小排列,若有幅值相同的复数元素,则再将其按幅角[-π,π]从大到小排列。若A为字符串的,则按ASCII字典顺序排序。对于向量A,sort(A)将A的元素按升序排序;对于矩阵A,sort(A)按升序对A的每一列排序。
- Y = sort(X,DIM,MODE); 有两个可选参数。DIM表示选择排序的维度:1表示列维,2表示行维。MODE表示选择排序的方向:'ascend’表示升序,'descend’表示降序。
- [Y,I] = sort(X,DIM,MODE) ;返回一个索引矩阵I。若A为向量,则Y = X(I)。若A为m×n矩阵(DIM=1;),则I中的每一列是与A中列向量的元素相对应的置换向量,并有 for j = 1:n, Y(:,j) = X(I(:,j),j); end。
【实例说明】
- 例1:对矩阵a进行列维升序排序,并思考索引矩阵的作用。(索引矩阵揭示了重新排列后元素在原向量中的位置)
a=magic(3)
a =
8 1 6
3 5 7
4 9 2
[y,i]=sort(a)
y =
3 1 2
4 5 6
8 9 7
i =
2 1 3
3 2 1
1 3 2
for j = 1:3, b(:,j) = a(i(:,j),j); end
b
b =
3 1 2
4 5 6
8 9 7
- 例2:对矩阵A进行特征值分解,将其特征值升序排列,并相应地调整特征对角阵和特征向量的排列顺序。(下例可以更好地说明索引矩阵的作用)
A=magic(3)
A =
8 1 6
3 5 7
4 9 2
[V,D]=eig(A)
V =
-0.5774 -0.8131 -0.3416
-0.5774 0.4714 -0.4714
-0.5774 0.3416 0.8131
D =
15.0000 0 0
0 4.8990 0
0 0 -4.8990
[d,i]=sort(diag(D))
d =
-4.8990
4.8990
15.0000
i =
3
2
1
D=D(i,i)
D =
-4.8990 0 0
0 4.8990 0
0 0 15.0000
V=V(:,i) %V的列向量按D的调整顺序进行调整
V =
-0.3416 -0.8131 -0.5774
-0.4714 0.4714 -0.5774
0.8131 0.3416 -0.5774