0
我有以下問題。QR分解在MatLab
我的任務是擬合一個多項式的數據。我想使用Gram-Schimdt正交化過程來實現QR算法。它是建立在這樣的功能:
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函數實現時獲得。唯一的區別是符號。如果我用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矩陣。但是,在你的情況下,「大小(A)」給出了「100x15」。 – Schorsch
MatLab計算線性方程組的系統更「困難」。但我仍然不知道爲什麼MatLabs Q,R矩陣給出了正確的解決方案,而我的矩陣Q,R(儘管它們或多或少與先前的矩陣相同)給出損壞的係數。這只是我不清楚。 – chip