public static Vector Orthonormalize(Vector A, Vector OrthonormalVector) { Vector B = new Vector(); B = A - OrthonormalVector * A * OrthonormalVector; B = B.Normalize(); return B; }
//Orthonormalize all eigenvectors based on the first one public static MMatrix Orthonormalize(MMatrix Eigenvectors) { MMatrix A = new MMatrix(Eigenvectors); Vector v1 = new Vector(Eigenvectors.row); Vector v = new Vector(Eigenvectors.row); for (int i = 0; i < v1.Elements.Length; ++i) v1[i] = A[i, 0]; v1 = v1.Normalize(); for (int i = 0; i < v1.Elements.Length; ++i) A[i, 0] = v1[i]; for (int i = 1; i < Eigenvectors.col; ++i) { for (int j = 0; j < Eigenvectors.row; ++j) v[j] = Eigenvectors[j,i]; v = v.Orthonormalize(v1); for (int j = 0; j < v.Elements.Length; ++j) A[j, i] = v[j]; } return A; }