Как инвертировать матрицу переменных в cvxpy? - PullRequest
1 голос
/ 31 марта 2019

Как инвертировать матрицу переменных в cvxpy?

У меня есть матрица проблемных переменных, определенная следующим образом:

import cvxpy as cp
A = cp.Variable(2,2)

и я хочу решить программу с целевой функцией, включающей инверсию этой матрицы. Я перепробовал почти все методы, которые мог придумать (включая ручное определение обратной матрицы), но, похоже, ничего не работает.

Полный код моей проблемы:

A = cp.Variable((2,2)) # matrix A is 2X2
c = cp.Variable(2) # center of 2d ellipsoid

constraints = [A >> 0]
constraints += [cp.pnorm(cp.matmul(A, v[i] - cp.matmul(A,c)), p=2) <= np.array([1,1]) for i in range(10)]

# this is where I'm stuck. Using np.linalg.inv doesn't work.
# I also can't seem to calculate this inverse manually 
obj_fn = cp.log_det(np.linalg.inv(A))

prob = cp.Problem(cp.Minimize(obj_fn), constraints)
prob.solve(solver='CVXOPT')

1 Ответ

1 голос
/ 31 марта 2019

Я не знаю, как инвертировать матрицу в cvxpy, но для конкретного кода вы можете использовать тот факт, что:

log det A ^ {- 1} = - log det A

...