グラム行列Q := W.T * W
の北東エントリに厳密な不等式制約があります。これは対称で正の半正定値です。したがって、代わりにグラム行列Q
を使用して、厳密な不等式制約Q[0,2] > 1
を導入してください。北東のエントリが1.76709537e+00 > 1
であることを
>>> from cvxpy import *
>>> Q = Semidef(3)
>>> objective = Minimize(0)
>>> constraints = [ Q[0,2] > 1 ]
>>> prob = Problem(objective,constraints)
>>> prob.solve()
0.0
>>> Q.value
matrix([[ 2.33101529e+00, 2.57980002e-30, 1.76709537e+00],
[ 2.57980002e-30, 2.57740598e-15, -2.00304682e-30],
[ 1.76709537e+00, -2.00304682e-30, 2.33101529e+00]])
注:
は例えば、ここに半正定値プログラムゼロを目的とした(SDP)です。次のようにグラム行列Q
からマトリックスW
を回復するために、コレスキー分解を使用して、4×3行列を得るためにゼロの行を追加します。
>>> import numpy as np
>>> L = np.linalg.cholesky(Q.value)
>>> W = (np.insert(L, 3, np.array([0,0,0]), axis=1)).T
>>> W
matrix([[ 1.52676628e+00, 1.68971508e-30, 1.15741053e+00],
[ 0.00000000e+00, 5.07681591e-08, -7.79768444e-23],
[ 0.00000000e+00, 0.00000000e+00, 9.95698832e-01],
[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00]])
我々は確認してみましょう:
>>> W.T * W - Q.value
matrix([[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00],
[ 0.00000000e+00, 0.00000000e+00, 7.00649232e-46],
[ 0.00000000e+00, 7.00649232e-46, 0.00000000e+00]])