Skip to content

Commit

Permalink
added gram-schmidt
Browse files Browse the repository at this point in the history
  • Loading branch information
sth4nth committed Jan 31, 2016
1 parent 6839bd6 commit a0a6a2c
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 15 deletions.
13 changes: 13 additions & 0 deletions common/gsog.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
function [Q, R] = gsog(X)
% Gram-Schmidt orthogonalization
[d,n] = size(X);
m = min(d,n);
R = eye(m,n);
Q = zeros(d,m);
D = zeros(1,m);
for i = 1:m
R(1:i-1,i) = bsxfun(@times,Q(:,1:i-1),1./D(1:i-1))'*X(:,i);
Q(:,i) = X(:,i)-Q(:,1:i-1)*R(1:i-1,i);
D(i) = dot(Q(:,i),Q(:,i));
end
R(:,m+1:n) = bsxfun(@times,Q,1./D)'*X(:,m+1:n);
13 changes: 13 additions & 0 deletions common/gson.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
function [Q, R] = gson(X)
% Gram-Schmidt orthonormalization which produces the same result as [Q,R]=qr(X,0)
[d,n] = size(X);
m = min(d,n);
R = zeros(m,n);
Q = zeros(d,m);
for i = 1:m
R(1:i-1,i) = Q(:,1:i-1)'*X(:,i);
v = X(:,i)-Q(:,1:i-1)*R(1:i-1,i);
R(i,i) = norm(v);
Q(:,i) = v/R(i,i);
end
R(:,m+1:n) = Q'*X(:,m+1:n);
14 changes: 0 additions & 14 deletions common/mgs.m

This file was deleted.

17 changes: 17 additions & 0 deletions common/mgsog.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
function [Q, R] = mgsog(X)
% Modified Gram-Schmidt orthogonalization
[d,n] = size(X);
m = min(d,n);
R = eye(m,n);
Q = zeros(d,m);
D = zeros(1,m);
for i = 1:m
v = X(:,i);
for j = 1:i-1
R(j,i) = Q(:,j)'*v/D(j);
v = v-R(j,i)*Q(:,j);
end
Q(:,i) = v;
D(i) = dot(Q(:,i),Q(:,i));
end
R(:,m+1:n) = bsxfun(@times,Q,1./D)'*X(:,m+1:n);
17 changes: 17 additions & 0 deletions common/mgson.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
function [Q, R] = mgson(X)
% Modified Gram-Schmidt orthonormalization (numerical stable version of Gram-Schmidt algorithm)
% which produces the same result as [Q,R]=qr(X,0)
[d,n] = size(X);
m = min(d,n);
R = zeros(m,n);
Q = zeros(d,m);
for i = 1:m
v = X(:,i);
for j = 1:i-1
R(j,i) = Q(:,j)'*v;
v = v-R(j,i)*Q(:,j);
end
R(i,i) = norm(v);
Q(:,i) = v/R(i,i);
end
R(:,m+1:n) = Q'*X(:,m+1:n);
2 changes: 1 addition & 1 deletion common/unitize.m
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@
dim = find(size(X)~=1,1);
if isempty(dim), dim = 1; end
end
s = sqrt(sum(X.^2,dim));
s = sqrt(dot(X,X,dim));
Y = bsxfun(@times,X,1./s);

0 comments on commit a0a6a2c

Please sign in to comment.