how can i define an orthogonal matrix variable in cvx?
any help is greatly appreciated
How do you intend to use it?
variable X(n,n)
X'*X == eye(n)
is non-convex and not allowed by CVX. Actually, X'*X i
s not even allowed by CVX.
Did you carefully read and study the CVX FAQ link https://www.google.com/search?client=firefox-b-1-d&q=cvx+faq I posted in my reply on your previous thread Quadratic nonconvex inequality constraint ? The first thing you need to do before using CVX for a problem is to determine that it is (other than possible binary or integer constraints) a convex optimization problem.
if you have a problem with orthogonality constraints, then either
- You need a clever reformulation
- Use a non-convex nonlinear optimizer
- Perform Riemannian Optimization using, for example, the Stiieffel, Grassmann, or related manifold. You could consider using MANOPT https://www.manopt.org/tutorial.html . If your math background is strong enough, you can read “Optimization Algorithms on Matrix Manifolds” by P.-A. Absil, R. Mahony & R. Sepulchre https://press.princeton.edu/absil ans subsequent papers by them and their students and others.
1 Like