dora.bk.tsukuba.ac.jp
Matlabでの実装
clear; close all; a1 = [1 1 0]'; a2 = [0 -1 1]'; a3 = [1 1 1]'; e1 = a1/norm(a1) e2 = a2 - dot(a2,e1)*e1; e2 = e2/norm(e2) e3 = a3 - dot(a3,e1)*e1 - dot(a3,e2)*e2; e3 = e3/norm(e3) % dot(e1,e2) % dot(e1,e3) % dot(e2,e3) es = gram_schmidt([a1 a2 a3]); es function es = gram_schmidt(vectors) a1 = vectors(:,1); dim = size(vectors); m = dim(1); n = dim(2); as = zeros(m,n); es = zeros(m,n); e1 = a1/norm(a1); as(:,1) = a1; es(:,1) = e1; for idx=2:length(vectors) ai = vectors(:,idx); as(:,idx) = ai; ei = ai; for jdx = 1:idx ei = ei - dot(as(:,idx),es(:,jdx))*es(:,jdx); end ei = ei/norm(ei); es(:,idx) = ei; end end
実行結果
e1 = 0.7071 0.7071 0 e2 = 0.4082 -0.4082 0.8165 e3 = -0.5774 0.5774 0.5774 es = 0.7071 0.4082 -0.5774 0.7071 -0.4082 0.5774 0 0.8165 0.5774