public void TestOrthogonalization() { List<IVector> Acols = MatrixUtils.GetColumnVectors(A); List<IVector> vstarlist = Orthogonalization.Orthogonalize(Acols); for (int i = 0; i < vstarlist.Count-1; ++i) { for (int j = i + 1; j < vstarlist.Count; ++j) { Assert.True(vstarlist[i].Multiply(vstarlist[j]) < 1e-10); } } }
public void TestOrthoNormal() { List<IVector> Rcols; List<IVector> Acols = MatrixUtils.GetColumnVectors(A); List<IVector> vstarlist = Orthogonalization.Orthogonalize(Acols, out Rcols); for (int i = 0; i < Rcols.Count; ++i) { int count = 0; for (int j = 0; j < Rcols[i].Dimension; ++j) { count += (System.Math.Abs(Rcols[i][j]) > 1e-10) ? 1 : 0; } Assert.Equal(i + 1, count); } for (int i = 0; i < Acols.Count; ++i) { IVector pi = new SparseVector(Acols[i].Dimension); for (int j = 0; j < vstarlist.Count; ++j) { pi = pi.Add(vstarlist[j].Multiply(Rcols[i][j])); } for (int d = 0; d < Acols[i].Dimension; ++d) { Assert.Equal(Acols[i][d], pi[d]); } Assert.True(Acols[i].Equals(pi)); } List<double> norms; List<IVector> qlist = VectorUtils.Normalize(vstarlist, out norms); for (int i = 0; i < qlist.Count - 1; ++i) { for (int j = i + 1; j < vstarlist.Count; ++j) { Assert.True(qlist[i].Multiply(qlist[j]) < 1e-10); } Assert.True(qlist[i].Norm(2) - 1 < 1e-10); } for (int i = 0; i < vstarlist.Count; ++i) { Assert.Equal(norms[i], vstarlist[i].Norm(2)); } IMatrix R = MatrixUtils.GetMatrix(Rcols); foreach (int r in R.RowKeys) { R[r] = R[r].Multiply(norms[r]); } for (int i = 0; i < A.RowCount; ++i) { for (int j = 0; j < A.ColCount; ++j) { Assert.Equal(R[i][j], Rcols[j][i] * norms[i]); } } }