最適化についての事を解決するためのさまざまな方法があるということですそのうちのいくつかは広範な計算を必要とする可能性がある問題である。
あなたの解は、Bの制約が与えられていれば、fminconを使うことです。非線形制約のファイルを作成して開始します。
function [c,ceq] = nonLinCon(x)
c = 0;
ceq = norm((x'*x - eye (size(x))),'fro'); %this checks to see if B is orthonormal.
ルーチンを呼び出します。
B = fmincon(@(B) norm(X - X*B*B','fro'),B0,[],[],[],[],[],[],@nonLinCon)
B0は答えがどうなるかの良い推測であることに。
また、このアルゴリズムはローカル最小値を見つけようとしますが、これは最終的に求める解決策ではない可能性があります。例えば:
X = randn(1,2)
fmincon(@(B) norm(X - X*B*B','fro'),rand(2),[],[],[],[],[],[],@nonLinCon)
ans =
0.4904 0.8719
0.8708 -0.4909
fmincon(@(B) norm(X - X*B*B','fro'),rand(2),[],[],[],[],[],[],@nonLinCon)
ans =
0.9864 -0.1646
0.1646 0.9864
したがって、これらのメソッドを使用する場合、注意が必要、との良好な出発点
ありがとう@Rasman。私は問題の私の定式化にやや鈍感だった。未知数は行列Bであり、制約B'B = Iであり、最小化される関数はf(B)= || X-X * B * B '||である。したがって、実際には非線形制約を持つ制約付き最適化です。私はそれがMatlabでどのように設定されるのだろうかと思っています。また、最小化ルーチンのドキュメントを見ると、行列の応答については何も触れられませんでした。それについて私が読むのに最適な場所はどこですか?もう一度ありがとう! – user765195
@ user765195 ok、fminconを使用する必要があります。私はそれを反映するために投稿を編集します。 – Rasman