与えられた3x3行列が正の半定量かどうかを調べたいと思います。そうするために、私はこのプログラムは私にエラー「が見つかりデュアル実行不可能な、原初改善方向」を与えるYALMIPYALMIPは簡単で実現可能なSDPのために "Infeasible"を出力します
v=0.2;
a=sdpvar(1);
b=sdpvar(1);
M=[1 a -v/4 ; b 1 0 ; -v/4 0 0.25];
x=sdpvar(1);
optimize([M+x*eye(3)>=0],x,sdpsettings('solver','sedumi'))
で、次のSDPを記述します。これは、区間(0,1]におけるVの任意の値のために起こります。
この問題は扱いやすいことを考えると、私は直接3つの固有値は次の多項式
16*t^3 - 36*t^2 + (24 - 16*a*b - v^2)*t + (-4 + 4*a*b + v^2)
の3つの根であることを取得行列を対角化
3つの根の値を数値的に計算すると、それらの3つはsign(a)= sign(b)(aの近傍の小さな領域を除く、b = + - 1)したがって、SDPは問題なく動作し、xの負の値をさらに複雑にすることなく出力する必要があります。
NG、私は次の行列
M=[1 a v/4 ; b 1 0 ; v/4 0 0.25];
この行列は前回と同じ固有値を持っていると同じコードを実行し、この場合、プログラムは行列が実際に正半正定値であることを確認し、問題なく動作します。
私はこの問題の性質について本当に興味があります。どんな助けでも本当に感謝しています。
EDIT:SDPT3ソルバーも試しましたが、結果は非常に似ています。実際には、プログラムは、+ Vの場合のためにスムーズに動作しますが、私は、私は次のエラー
さらに'Unknown problem in solver (Turn on 'debug' in sdpsettings) (Error using & …'
を取得し、マイナス記号を入れたときに、私は変数、すなわちにいくつかの制限を追加するときに、私は次のことを実行しますコマンド
optimize([total+w*eye(3)>=0,-1<=a<=1,-1<=b<=1],w,sdpsettings('solver','sdpt3'))
エラーが「実行不可能な問題」エラーに変わります。
あなたのコードや問題を分析することなく、利用可能な他のソルバー[list](http://users.isy.liu.se/johanl/yalmip/pmwiki.php?n=Solvers.Solvers)を試しましたか? SDPT3は簡単にインストールできます。あまりにも多くのSDPソルバーの経験がなければ、これは古典的な線形または二次のコーンソルバーよりもあまり安定性が低いことがわかります。 – sascha
私はSDPT3を試してみましたが、同様の結果が得られました(+ vの場合は問題なく動作し、-vの場合は「Unknown problem in solver」)。私はこの情報を含むように質問を更新しています。 – Alex