QR分解相对于GS分解更简单,在MATLAB中更容易实现;
我们使用一组数据进行测试,代码如下:
clc;
clearvars;%% 方法A:GS求解,construct new orthonormal basis by gram-schmidt
y0=1:12;
znorm=zeros(3,1);
n1=3;
znorm(1)=0.0;
for j=1:n1 znorm(1)=znorm(1)+y0(n1*j+1)^2; end;% znorm
znorm(1)=sqrt(znorm(1));
% znorm
for j=1:n1 y0(n1*j+1)=y0(n1*j+1)/znorm(1); end;
% y0gsc=zeros(3,1);for j=2:n1for k=1:(j-1)gsc(k)=0.0;for l=1:n1 gsc(k)=gsc(k)+y0(n1*l+j)*y0(n1*l+k); end;end;for k=1:n1for l=1:(j-1)y0(n1*k+j)=y0(n1*k+j)-gsc(l)*y0(n1*k+l);end;end;znorm(j)=0.0;for k=1:n1 znorm(j)=znorm(j)+y0(n1*k+j)^2; end;znorm(j)=sqrt(znorm(j));for k=1:n1 y0(n1*k+j)=y0(n1*k+j)/znorm(j); end;
en