MATLAB学习笔记(1)——sort函数

【语法说明】

  • 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

猜你喜欢

转载自blog.csdn.net/weixin_42467801/article/details/104704129