This is my first time to use cvxopt. I have defined my function and constraint as below(I also used some other package). The example in the user's guide gives the exact matrix of c,but here I am using a function. How to use solvers.sdp to solve this problem?
def F(x):
T=array([x[0],0,0,0,x[1]+1j*x[2],x[3],0,0,x[4]+1j*x[5],x[6]+1j*x[7],x[8],0,x[9]+1j*x[10],x[11]+1j*x[12],x[13]+1j*x[14],x[15]])
T.shape=4,4
T=Qobj(T)
ka=((T.dag()*T))/((T.dag()*T)).tr()
s1=0
for a,b in product(range(0,4),range(0,4)):
s3=0
for m,n in product(range(0,4),range(0,4)):
s3=s3+((psi[b].dag())*sigma[m]*psi[a])*((psi[a].dag())*sigma[n]*psi[b])*ka[m,n]
s1=s1+(N[a,b]-N0*s3)**2/N0
return s1
def con(x):
T=array([x[0],0,0,0,x[1]+1j*x[2],x[3],0,0,x[4]+1j*x[5],x[6]+1j*x[7],x[8],0,x[9]+1j*x[10],x[11]+1j*x[12],x[13]+1j*x[14],x[15]])
T.shape=4,4
T=Qobj(T)
ka=((T.dag()*T))/((T.dag()*T)).tr()
s2=0
for i,j,k in product(range(0,4),range(0,4),range(0,4)):
if k==0:
s2=s2+ka[i,j]*((sigma[j]*sigma[k]*sigma[i]).tr())-1
else:
s2=s2+ka[i,j]*((sigma[j]*sigma[k]*sigma[i]).tr())
return s2