2013-10-14 32 views
0

다음과 같은 문제가 있습니다.MatLab의 QR 분해

내 작업은 다항식을 데이터에 맞추는 것입니다. 나는 Gram-Schimdt 직교 화 과정을 사용하여 QR 알고리즘을 implenet하고 싶다. 기능이 내장되어

function [ Q,R ] = QRDec(A) 
n = length(A(1,:)); 
for i=1:n 
    Q(:,i) = A(:,i); 
    for j=1:i-1 
     R(j,i) = (Q(:,j)')*Q(:,i); 
     Q(:,i) = Q(:,i)-R(j,i)*Q(:,j); 
    end 
    R(i,i) = norm(Q(:,i),2); 
    if R(i,i) == 0 
     break; 
    end 
    Q(:,i)=Q(:,i)/R(i,i); 
end 
end 

행렬 Q, R은 거의 매트랩 기능 구현에서 얻은 이러한 Q, R과 동일하다. 유일한 차이점은 징후입니다. MatLab 함수를 사용하여 R * x = Q * y 방정식 시스템을 풀면 정확한 해결책을 얻을 수 있습니다. 하지만 내 자신의 행렬 Q와 R을 사용하면 잘못된 결과가 발생합니다. 아무도 내 방법의 문제가 어디 있는지 말해 줄 수 있습니까? 또한 스크립트의 코드를 묶습니다.

% clear variables 
clear; clc; 
N = 100; 
p = ones(1,15); 
d = 14; 
x = linspace(0,1,N)'; 
y = polyval(p,x); 
A = zeros(N,d+1); 
for i = 1 : d+1 
    A(:,i) = x.^(i-1); 
end 
[Qm,Rm] = QRDec(A); 
[Q,R] = qr(A,0); 
a_qrm = Rm\(Qm'*y); 
a_qr = R\(Q'*y); 
end 

계산 오류로 인해 큰 실수가 발생할 수 있다고 생각하십니까? 나는 두 개의 동일한 선형 시스템 방정식을 가지고 있고 솔루션이 서로 다르기 때문에 필사적이다.

+0

분해가 사각형이 아닌 행렬로 인해 어려움을 겪을 수 있습니까? 위키 피디 어 항목의 예제 (http://en.wikipedia.org/wiki/QR_decomposition)에서 코드를 실행하면 올바른 결과를 얻을 수 있습니다. 그것은'3x3' 행렬입니다. 그러나,'size (A)'는'100x15 '를줍니다. – Schorsch

+0

MatLab이 선형 시스템 방정식 시스템을 계산하는 것이 "어렵습니다". 하지만 여전히 MatLabs Q, R 행렬이 올바른 솔루션을 제공하고 행렬 Q, R을 제공한다는 단서가 없습니다. (이전 행렬과 거의 같지만) 부패한 계수를 제공합니다. 그것은 나에게 분명하지 않다. – chip

답변

0

구현 한 형태의 그램 - 슈미트 프로세스는 numerically unstable입니다. 실제로, Matlab에 의해 계산 된 Q와 Qm은 같지 않습니다. 또한 매트릭스의 상태가 좋지 않습니다. 조건 수는 10^10입니다.

이렇게하면 작은 오류가 확대되어보고있는 효과를 설명 할 수 있습니다.