1

タイトルで説明されているこの問題を解決する必要があります。アイデアは、2 つの非線形不等式制約と共に、4 つの変数に 2 つの非線形方程式があるということです。この状況で必要なすべてを設定できるため、関数fminconがおそらく最良のアプローチであることがわかりました(そうでない場合はお知らせください)。ただし、実装段階で疑問があります。以下に完全なケースを公開します。実際の形にするのに十分単純だと思います。

私が最初にしたことは、別のファイルで目的関数を定義することでした。

function fcns=eqns(x,phi_b,theta_b,l_1,l_2)

fcns=[sin(theta_b)*(x(1)*x(4)-x(2)*x(3))+x(4)*sqrt(x(1)^2+x(2)^2-l_2^2)-x(2)*sqrt(x(3)^2+x(4)^2-l_1^2);
      cos(theta_b)*sin(phi_b)*(x(1)*x(4)-x(2)*x(3))+x(3)*sqrt(x(1)^2+x(2)^2-l_2^2)-x(1)*sqrt(x(3)^2+x(4)^2-l_1^2)];

次に、不等式制約も別のファイルにあります。

function [c,ceq]=nlinconst(x,phi_b,theta_b,l_1,l_2)

c=[-x(1)^2-x(2)^2+l_2^2; -x(3)^2-x(4)^2+l_1^2];
ceq=[];

次のステップは、スクリプトで実際に実行することでした。以下では、目的関数には追加の変数が必要なので、無名関数を定義しましたf。次の行では、制約 (無名関数) に対して同じことを行いました。その後、それはかなり自明です。

f=@(x)norm(eqns(x,phi_b,theta_b,l_1,l_2));
f_c=@(x)nlinconst(x,phi_b,theta_b,l_1,l_2);

x_0=[15 14 16 18],
LB=0.5*[l_2 l_2 l_1 l_1];
UB=1.5*[l_2 l_2 l_1 l_1];

[res,fval]=fmincon(f,x_0,[],[],[],[],LB,UB,f_c),

最初に気付くのは、元の目的関数を を使用して変換する必要があったことです。normそうしないと、"User supplied objective function must return a scalar value."エラー メッセージが表示されます。それで、これは最善のアプローチですか、それともこれを回避するためのより良い方法はありますか?

これは実際には機能しますが、私の調査によると (実際には stackoverflow からの 1 つの質問です!)、目的関数から等式制約を定義すると、最適化手順を導くことができます。これは理にかなっています。制約ファイルで次のコードを使用してそれを行いました。

ceq=eqns(x,phi_b,theta_b,l_1,l_2);

dealその後、関数を使用して、スクリプト内で制約を定義できることがわかりました。

c=@(x)[-x(1)^2-x(2)^2+l_2^2; -x(3)^2-x(4)^2+l_1^2];
f_c=@(x)deal(c(x),f(x));

それで、それを行うための最良の方法はどれですか?制約ファイルを介して、またはこの機能を使用して?

さらに、MATLAB のドキュメントで、これらの場合に設定することが提案されていることがわかりました。

f=@(x)0;

元の目的関数は既に等式制約にあるためです。ただし、最適化は明らかに最初の推測を超えません (コスト値はすべてのソリューションで既に 0 です) 。 mathworks.com/help/optim/ug/nonlinear-systems-with-constraints.html )。

長い文章で申し訳ありませんが、まだ理解していない場合は詳しく説明したいと思います... ありがとうございます!

4

1 に答える 1

1

fminconあなたの問題に適していると思います。当然のことながら、ほとんどの最小化問題と同様に、目的関数は多変量スカラー関数です。あなたはベクトル関数を扱っているので、それfminconについて不平を言いました。

規範を使用することは「最良の」アプローチですか? 簡単に言えば、場合によります。これが MATLAB にあると私が言う理由normは、既定でユークリッド (または L2) ノルムであり、ほとんどの問題に対して最も自然な選択です。ただし、場合によっては、L1 またはより厳密な無限基準を使用する方が問題を解決する (または物理的に意味のある) 方が簡単な場合があります。規範の徹底的な議論は、次の素晴らしいブログ投稿に委ねます。

Mathworks の例がそのように定式化されている理由については、関数を最小化するのではなく、非線形方程式系を解いているためです。最初は を使用した標準的なアプローチを使用しますfsolveが、その後、同じ問題を解決する別の方法を提案します。

そのような方法の 1 つは、非線形方程式の解法を等式制約付きの最小化問題として再定式化することです。f=@(x)0withを使用することによりfmincon、目的関数fは当然既に最小化されており、この場合に満たす必要があるのは等式制約だけです。これは、非線形方程式系の解になります。確かに賢い。

于 2015-03-12T00:28:58.180 に答える