EigenVe2(M) = Eigenvectors of square matrix M by SVD:
Ve = EigenVe2(M) // V = eigenvectors of M by SVD
{
P = CharPoly(M) // P = Characteristic polynomial of square matrix M
R = PolRoots(P) // R = All of the roots of polynomial P
f = 1
for (i = M.n − 1; i >= 1; i−−) // Delete roots that are
duplicates
if (r[i] == r[i + 1)
Delete root i from r
for (i = 1; i <= r.m; i++)
{
U = M
for (j = 1; j <= M.n; j++) // Subtract i-th root from
u[j, j] = u[j, j] − r[i] // all diagonal elements of U
(U, W, V) = SVD(U) // Decompose U to (U, W, V)
for (j = M.n; j >= 1; j−−) // Delete columns of V for W = 0
{
if (w[j] != 0)
Delete column j from matrix V
}
for (ci = 1; ci <= V.n; ci++)// Concat Columns of V to Ve
{
for (ri = 1; ri <= M.n; ri++)
{
Ve[ri, f] = v[ri, ci]
}
f++
}
}
for (ci = 1; ci <= M.n; ci++) // For all columns of Ve
{
di = 0
for (ri = n; ri >= 1; ri−−) // Find last non-zero element
if (Ve[ri, ci] != 0) // in this column
{
di = Ve[ri, ci]
break
}
if (di == MultiCD.cZero) // if column is all zeros
{
Delete column ci from matrix Ve
}
else
{
for (ri = 1; ri <= M.n; ri++) // Make last non-zero element
Ve[ri, ci] = Ve[ri, ci] / di // equal to one
}
}
} // EigenVe2
Return to Matrix and Polynomial Computations
Return to Harry's Home Page
times since
September 18, 2006.