ユーザーのグラフでバイナリ最小カットを使用してコミュニティを検出しようとしています。この目的のために、この論文に示されているように、フィードラー法の変形を使用しようとしています。これは彼らがそれを形式化した方法です:
現在、matlab の CVX パッケージを使用してこれを実行しようとしています。これが私のコードです:
tou = ((beta/ (e' * pi1 * e)) * tou1) + (((1 - beta) / (e' * pi2 * e)) * tou2);
n = 6;
cvx_begin
variable y(n)
minimize( y' * tou * y )
subject to
y' * pi1 * y == e' * pi1 * e
y' * pi2 * y == e' * pi2 * e
y' * pi1 * e == 0
y' * pi2 * e == 0
cvx_end
しかし、次のエラーが表示されます。
Disciplined convex programming error:
Invalid constraint: {convex} == {real constant}
Error in ==> cvx.eq at 12
b = newcnstr( evalin( 'caller', 'cvx_problem', '[]' ), x, y, '==' );
Error in ==> fiedler at 16
y' * pi1 * y == e' * pi1 * e
ここで、A1 は次のように定義された行列です。
A1 = [0 3 2 0 0 0; 3 0 3 1 0 0; 2 3 0 0 0 0; 0 1 0 0 4 2; 0 0 0 4 0 3; 0 0 0 2 3 0];
同様に、A2 = A1 です。
そして pi1 は行列であり、値がその特定の行の A1 のすべての値の合計に等しい対角行列です。そうすることで私は得ます
pi1 = [5 0 0 0 0 0; 0 7 0 0 0 0; 0 0 5 0 0 0; 0 0 0 7 0 0; 0 0 0 0 7 0; 0 0 0 0 0 5];
同様に、pi1 = pi2 です。
また、tou1 = pi1 - A1、tou2 = pi2 - A2 です。
誰かが私が間違っていることを正確に指摘できますか。それは大いに役立つでしょう。前もって感謝します !