Reputation: 577
I have a 3x3 matrix, E, and I'm trying to solve this optimization problem:
|| E * t || = minimum
where t is the solution I'm looking for and it MUST be a unit vector (represented as a 3x1 matrix). || x || denotes the euclidean distance of x.
Is there a library that can help me solve this problem? I've found a couple of solve functions in various libraries, but I can't seem to find one that'll let me put on the additional constraint that t must be a unit vector. Can I solve this programmatically without a library then?
Upvotes: 1
Views: 704
Reputation: 26107
Looks like an eigenvector-type problem to me -- your minimum
should be the smallest absolute value among the eigenvalues of E
.
Do a singular value decomposition (SVD) of the matrix E (this operation should be available as part of any good linear algebra library). This will give you a factorization of E as:
E = U diag V*
where diag
is a diagonal matrix with nonnegative diagonal values, and U
and V
are orthonormal.
Find the smallest diagonal element of diag
; the corresponding row of V*
(or column of V
) is your solution for t
.
This value for t
will be a unit vector because V
is orthonormal, and the resulting vector E t
will be smallest because U
and V
preserve vector length.
Upvotes: 5