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