Main Content

rank

기호 행렬의 랭크 구하기

구문

설명

예제

rank(A)는 기호 행렬 A의 랭크를 반환합니다.

예제

행렬의 랭크 구하기

syms a b c d
A = [a b; c d];
rank(A)
ans =
     2

기호 행렬의 랭크가 정확함

수치 계산은 반올림 오차가 있을 수 있는 반면, 기호 계산은 행렬의 정확한 랭크를 반환합니다. 이러한 정확한 계산은 힐베르트 행렬과 같은 조건이 나쁜 행렬에 유용합니다. 차수가 n인 힐베르트 행렬의 랭크는 n입니다.

차수가 15인 힐베르트 행렬의 랭크를 수치적으로 구합니다. 그런 다음 sym을 사용하여 숫자형 행렬을 기호 행렬로 변환한 후 랭크를 기호적으로 구합니다.

H = hilb(15);
rank(H)
rank(sym(H))
ans =
    12
ans =
    15

기호 계산은 올바른 랭크 15를 반환합니다. 수치 계산은 반올림 오차로 인해 잘못된 랭크 12를 반환합니다.

랭크 함수는 기호 계산을 단순화하지 않음

다음 행렬이 있다고 가정해 보겠습니다.

A=[1sin2(x)cos2(x)11].

1-sin(x)^2cos(x)^2으로 단순화한 후 이 행렬의 랭크는 1이 됩니다. 하지만 rank는 행렬 요소에 나타나는 특수 함수에 의해 충족되는 항등식을 고려하지 않기 때문에 잘못된 랭크 2를 반환합니다. 잘못된 결과가 반환되는 것을 확인해 봅니다.

syms x
A = [1-sin(x) cos(x); cos(x) 1+sin(x)];
rank(A)
ans =
     2

중간 단계의 출력이 단순화되지 않았으므로 rank는 잘못된 결과를 반환합니다. 확실한 우회적 해결 방법은 없지만 수치 대입을 사용하고 vpa를 통해 대입 결과를 평가하는 방법으로 기호 표현식을 단순화할 수 있습니다.

x에 숫자를 대입하고 vpa를 사용하여 결과를 평가하여 올바른 랭크를 구합니다.

rank(vpa(subs(A,x,1)))
ans =
     1

하지만, 수치 대입 후에도 rank가 반올림 오차로 인해 잘못된 결과를 반환할 수 있습니다.

입력 인수

모두 축소

입력값으로, 숫자, 벡터, 행렬, 또는 기호 숫자, 기호 벡터, 기호 행렬로 지정됩니다.

버전 내역

R2006a 이전에 개발됨

참고 항목

| |