다음과 같은 문제가 있습니다.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
계산 오류로 인해 큰 실수가 발생할 수 있다고 생각하십니까? 나는 두 개의 동일한 선형 시스템 방정식을 가지고 있고 솔루션이 서로 다르기 때문에 필사적이다.
분해가 사각형이 아닌 행렬로 인해 어려움을 겪을 수 있습니까? 위키 피디 어 항목의 예제 (http://en.wikipedia.org/wiki/QR_decomposition)에서 코드를 실행하면 올바른 결과를 얻을 수 있습니다. 그것은'3x3' 행렬입니다. 그러나,'size (A)'는'100x15 '를줍니다. – Schorsch
MatLab이 선형 시스템 방정식 시스템을 계산하는 것이 "어렵습니다". 하지만 여전히 MatLabs Q, R 행렬이 올바른 솔루션을 제공하고 행렬 Q, R을 제공한다는 단서가 없습니다. (이전 행렬과 거의 같지만) 부패한 계수를 제공합니다. 그것은 나에게 분명하지 않다. – chip