2016-07-18 11 views
0

与えられた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')) 

エラーが「実行不可能な問題」エラーに変わります。

+0

あなたのコードや問題を分析することなく、利用可能な他のソルバー[list](http://users.isy.liu.se/johanl/yalmip/pmwiki.php?n=Solvers.Solvers)を試しましたか? SDPT3は簡単にインストールできます。あまりにも多くのSDPソルバーの経験がなければ、これは古典的な線形または二次のコーンソルバーよりもあまり安定性が低いことがわかります。 – sascha

+0

私はSDPT3を試してみましたが、同様の結果が得られました(+ vの場合は問題なく動作し、-vの場合は「Unknown problem in solver」)。私はこの情報を含むように質問を更新しています。 – Alex

答えて

1

遅い回答ですが、とにかくです。指定した行列は対称ではありません。半正定値プログラミングは、対称正の半定理行列の集合に対する最適化に関するものです。

YALMIPでこの非対称行列制約を定義すると、それは単純に9つの線形要素拘束のセットとして解釈され、その線形プログラムの場合、最適なxは無制限になります。

+0

ありがとうございました。確かに、私はYALMIPが行列に対称制約を課すと仮定しましたが、それはしませんでした。これらの制約が手作業で課せられる場合(または使用される行列が対称である場合)、プログラムは問題なく実行されます。 – Alex

関連する問題