2014-04-27 2 views
0

0이 아닌 요소를 최소 순에서 최대 순으로 정렬하는 대각선 행렬이 있다고 가정하여 왼쪽 상단 요소가 가장 큰 대각선이고 왼쪽 하단 요소가 가장 작다. 어떤 연산 결과에 해당하는 순열 행렬을 찾는 효율적인 방법이 있습니까?MATLAB : 정렬 작업에 해당하는 순열 행렬을 찾습니다.

이것은 열 벡터의 행을 크기에 따라 정렬하는 순열 행렬을 찾아 냄으로써 더 단순화 될 수 있지만 여전히 좋은 해결책을 알지 못합니다. sort

+0

결과로 정렬 된 대각선을 가진 행렬을 원합니까, 아니면 결과로 정렬 된 열 벡터를 원합니까? 행렬을 원하면 "왼쪽 위 요소가 가장 큰 대각선이고 오른쪽 아래 ** 오른쪽 요소가 가장 작다"는 것을 의미한다고 가정합니다. –

+0

예, 실수였습니다. 오른쪽 하단은 가장 작은 대각선이어야합니다. – Scott

답변

1

는 대각 엔트리를 추출 그 분류에 대응하는 인덱스를 찾아 순열 행렬에 단위 행렬을 재정렬 이러한 인덱스를 사용한다.

%matrix size 
N = 5; 

%random diagonal matrix 
d=rand(N,1); 
D = diag(d); 

%extract the diagonal entries of D and sort them 
[~,I]=sort(diag(D)); 

%generate the permutation matrix 
P = eye(size(D)); 
P = P(I,:) 

%Verify answer P*D gives the sorted matrix 
P*D 
1

사용하여 두 개의 출력 :

>> A = diag([8 3 4]) 
A = 
    8  0  0 
    0  3  0 
    0  0  4 

>> [sorted, sorting] = sort(diag(A)) 
sorted = 
    3 
    4 
    8 

sorting = 
    2 
    3 
    1 
관련 문제