0001 function [ Q,R ] = Gram_Schmidt( A )
0002
0003
0004
0005
0006
0007
0008
0009 [n,m]=size(A);
0010 Q = zeros(n,n);
0011 R = zeros(n,m);
0012
0013 k=0;
0014 for j=1:m
0015 if k==0;
0016 w=A(:,j);
0017 else
0018 w=A(:,j);
0019 for i=1:k;
0020
0021 w=w-(Q(:,i)'*A(:,j))*Q(:,i);
0022 end
0023 end
0024
0025
0026 if abs(w)<1e-12;
0027 if abs(A(:,j))<1e-12;
0028 R(:,j)=0;
0029 else
0030 for i=1:k;
0031 R(i,j)=(Q(:,i)'*A(:,j));
0032 end
0033 for i=k+1:n;
0034 R(i,j)=0;
0035 end
0036 end
0037 else
0038 k=k+1;
0039 Q(:,k)=w/sqrt(w'*w);
0040 for i=1:k-1;
0041 R(i,j)=(Q(:,i)'*A(:,j));
0042 end
0043 R(k,j)=sqrt(w'*w);
0044 for i=k+1:n;
0045 R(i,j)=0;
0046 end
0047 end
0048 end
0049
0050
0051 if k<n;
0052 for i=k+1:n;
0053
0054 S = sum(Q,2);
0055 j=1;
0056 while S(j) >= 1
0057 j=j+1;
0058 end
0059
0060 x=zeros(n,1);
0061 x(j) = 1;
0062 for j=1:i;
0063 x=x-(x'*Q(:,j))*Q(:,j);
0064 end
0065 x=x/sqrt(x'*x);
0066 Q(:,i)=x;
0067 end
0068 end
0069
0070 end
0071
0072
0073
0074
0075
0076
0077