最適化については、問題を解決するためのさまざまな方法があり、その中には大規模な計算が必要になるものもあります。
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
したがって、これらの方法を使用するときは注意して、適切な出発点を選択してください