2017-12-01 19 views
1

matlab 함수를 R로 변환하는 것에 대한 질문이 있습니다. 누군가 도움을 줄 수 있었으면합니다.R 및 matlab에서 qr 함수

matlab과 R에서 사용되는 표준 QR 분해를 qr()이라고합니다. 나의 이해하려면, 두 언어의 QR 분해를 수행하는 표준 방법은 다음과 같습니다

matlab에 : [Q,R] = qr(A)는 QR은

R = 만족 :

z <- qr(A) 
Q <- qr.Q(z) 
R <- qr.R(z) 

가 모두있는 날 제공을 같은 결과가 불행히도, 내가 필요로하는 것이 아닙니다.

matlab에 : 제가 필요하면이있다 [Q, R, E]는 QR을 = (A, 0) E는 전치 벡터 인 경제 사이즈 분해 생성가되도록 A (:, E) = Q * R이다.

R : 단서

[Q, R, E]가 QR은 (A)

z <- qr(A); 
Q <- qr.Q(z); 
R <- qr.R(z); 
E <- diag(ncol(A))[z$pivot] 

함께 = 결과가 변수 Q 및 E에 대해 동일한 것 I는 (비교 시도했지만 R과 다른 경우). 따라서 정의 된 입력/출력에 따라 다른 결과가 나타납니다 (이는 의미가 있습니다).

그래서 내 질문은 : 이 모방 할 수 R의 방법 [Q, R 전자,] 거기에 QR (A, 0) 매트랩을 =?

나는 matlab 함수를 파고 들려고했지만 끝이없는 함수 정의의 길고 고통스러운 길로 인도하고 더 나은 해결책을 기대하고 있었다.

어떤 도움을 주시면 감사하겠습니다. 뭔가 분명히 놓친 경우 사과드립니다.

답변

0

차이점은 계산의 기본이되는 수치 라이브러리에 있다고 생각합니다. 기본적으로, R의 qr 기능은 (아주 오래된) LINPACK 루틴을 사용하지만, 내가

z <- qr(X,LAPACK=T) 

할 경우 다음 R은 LAPACK를 사용하고 결과는 (아마도 아래 LAPACK을 사용하고 있습니다) MATLAB의 일치 것으로 보인다. 어느 쪽이든 우리는 예상되는 관계를 X과 알 수 있습니다.

z <- qr(X,LAPACK=F) 
all.equal(X[,z$pivot], qr.Q(z)%*%qr.R(z), check.attributes=FALSE) 
# [1] TRUE 

z <- qr(X,LAPACK=T) 
all.equal(X[,z$pivot], qr.Q(z)%*%qr.R(z), check.attributes=FALSE) 
# [1] TRUE