rank
기호 행렬의 랭크 구하기
구문
설명
예제
행렬의 랭크 구하기
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
를 반환합니다.
랭크 함수는 기호 계산을 단순화하지 않음
다음 행렬이 있다고 가정해 보겠습니다.
1-sin(x)^2
을 cos(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 이전에 개발됨