Go to the documentation of this file.00001
00002 #include "mbl_mod_gram_schmidt.h"
00003
00004
00005
00006
00007
00008 #include <vcl_vector.h>
00009 #include <vnl/vnl_vector.h>
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 void mbl_mod_gram_schmidt(const vnl_matrix<double>& v,
00025 vnl_matrix<double>& e)
00026 {
00027 unsigned N=v.cols();
00028
00029
00030
00031 vcl_vector<vnl_vector<double > > vbasis(N);
00032 vcl_vector<vnl_vector<double > > evecs(N);
00033
00034
00035
00036 for (unsigned jcol=0;jcol<N;++jcol)
00037 {
00038 evecs[jcol] = vbasis[jcol] = v.get_column(jcol);
00039 }
00040 evecs[0].normalize();
00041
00042 for (unsigned j=1;j<N;++j)
00043 {
00044
00045
00046
00047 unsigned n2 = j-1;
00048 for (unsigned k=0;k<=n2;++k)
00049 {
00050 evecs[j] -= dot_product(evecs[j],evecs[k]) * evecs[k];
00051 }
00052 evecs[j].normalize();
00053 }
00054
00055
00056 e.set_size(v.rows(),N);
00057 for (unsigned jcol=0;jcol<N;++jcol)
00058 {
00059 e.set_column(jcol,evecs[jcol]);
00060 }
00061 }