2014-12-10 7 views
1

Matlab에 [Q,R] = qr(A,0) 함수가 있습니다.이 함수는 설명서에 따라 qr 분해의 "경제"버전을 반환합니다. norm(A-Q*R)은 내 데이터 집합에 ~ 1e-12를 반환합니다. 또한 Q'*Q은 이론적으로 I를 반환해야합니다. 실제로는 1보다 약간 큰 대각선 요소 (대각선 1e-6 정도)와 대각선 (1e-6 정도)의 위와 아래에 작은 0이 아닌 요소가 있습니다 그래서). 누구든지 qr(.,0)의 정밀도 또는 결과 Q의 품질 (직교성)을 엡실론을 지정하거나 반복 횟수를 제어하는 ​​방법을 알고 있습니까? 데이터 세트의 크기는 qr (A)에 메모리가 부족하여 qr (A, 0)을 사용해야합니다.Matlab, 경제 QR 분해, 제어 정밀도?

+2

"나는"경제 "란 어떤 종류의 근사를 의미한다고 가정합니다." 추측 할 필요가 없습니다. 설명서에는 정확히 무엇이 수행되는지 나와 있습니다. "일반"qr과 관련된 근사값은 없습니다. 이는 단순히 'Q'의 첫 번째 n 열과 'R'의 n 행만 계산된다는 것을 의미합니다. 값은 동일해야합니다. – horchler

+0

@horchler, 귀하의 의견은 (수락 된) 답변이어야합니다. –

+2

매우 관련성이 있지만 실제로 질문에 대답하지 않습니다. 그래서 나는 (upvoted) 코멘트가 그것을위한 적당한 장소라고 생각한다. –

답변

2

비 경제적 설정을 시도 할 때 실제로 A-Q * R과 비슷한 결과가 나타납니다. 나는 '경제'를 생각하지 않는다 이와 같이

A = magic(20); 
[Q, R] = qr(A); %Result does not change when using qr(A,0) 
norm(A-Q*R) 

코멘트에서 @horchler에 의해 확인 된 문제 ,하지만 당신은 단지 실행 한 것을 : 심지어 작은 숫자를 포함하는 작은 매트릭스에 대해 다음과 같이 'double'유형의 데이터로 얼마나 정확한 계산을 수행 할 수 있는지에 대한 제한이 있습니다.

정확도를 어떻게 든 변경하더라도 항상 근사값을 처리하므로 가장 먼저 고려해야 할 사항은 이미 가지고있는 것보다 더 큰 정확도가 필요한지 여부입니다. 정확성이 더 필요하다면 언제나 방법이있을 수 있지만, 그것이 직설적인지는 의문입니다.

+1

재미있는 것은 [[Q, R, E] = qr (X)' 'norm (XQ * R * E ')'는 몇 자리수 더 작습니다. 불행히도, 요구 사항 중 하나는 X의 첫 번째 열이 고정 된 위치에 있어야하므로 순열 벡터 또는 행렬을 직접 사용할 수 없다는 것입니다. – AlexK

+0

[Q, R, E] 버전은 내 데이터 세트의 정밀도를 향상 시키지만,'magic' 매트릭스는 향상시키지 않습니다. – AlexK

+0

+ 1은 호 클러를 언급합니다. ;-) –