def canonicalize(self): """Variable must be semidefinite and symmetric. """ upper_tri = lu.create_var((self.size[0], 1), self.id) fill_coeff = upper_tri_to_full(self.n) fill_coeff = lu.create_const(fill_coeff, (self.n*self.n, self.size[0]), sparse=True) full_mat = lu.mul_expr(fill_coeff, upper_tri, (self.n*self.n, 1)) full_mat = lu.reshape(full_mat, (self.n, self.n)) return (upper_tri, [SDP(full_mat, enforce_sym=False)])
def Semidef(n, name=None): """An expression representing a positive semidefinite matrix. """ var = SemidefUpperTri(n, name) fill_mat = Constant(upper_tri_to_full(n)) return cvxtypes.reshape()(fill_mat * var, n, n)
def Semidef(n, name=None): """An expression representing a positive semidefinite matrix. """ var = SemidefUpperTri(n, name) fill_mat = Constant(upper_tri_to_full(n)) return types.reshape()(fill_mat*var, n, n)