最適化ツールボックスを使用して最初の最適化問題を設定するためのガイダンスが必要です。
長いシャツの袖を表す3D表面モデルがあります。表面を通過する切断面を定義しました。平面の初期方向はPCAによって取得されました。表面モデルの頂点の第1主成分は、平面の法線ベクトルを定義します。私の最適化は、平面と表面モデルの交点の断面積を最小化するために、平面ベクトルu、v(最初は2番目と3番目のPrin。Comps)を中心に平面を方向付けることです。解空間を狭めるために、2つの軸のそれぞれを中心にX回転以内に方向を制限したいと思います。
私の質問は次のとおりです。
この場合、特定のソルバーをお勧めできますか?両方の回転角(約uとv)を同時に解くことができますか?
代わりに、法線ベクトルの3つの成分を解く必要がありますか?(必要な制約を適用しながら)
表面モデルデータ、初期平面方向などを渡すために、入れ子関数を使用して目的関数を設定する必要がありますか?
私の場合と同様の例をオンラインで見つけるのに苦労しています。
私はどんな提案にも感謝し、私のナイーブを前もってお詫びします。
私はあなたの特定の例に精通していませんが、ほとんどの最小化はかなり類似しており、オプティマイザーを機能させるにはフレームワークを少し従う必要があります。
これは、私がここに置くために微調整したが、過去に使用したいくつかの関数最小化コードです。fminconは優れた一般関数最小化子であり、パラメーターにさまざまな制約(境界、等式制約、不等式制約)を設定できます。すべての場合に最も効率的であるとは限りませんが、良いスタートを切ることができます。
基本的には、最初の推測を作成し、境界を設定してから、fitfun関数への参照を使用してfminconを呼び出します。
function [t2, pd, offset] = t2fit(te, mm)
% Intial guess
x0 = [(-1/p(1))/fact, max(mm) 0]; % t2 pd
% Other constratints
A = []; B = []; Aeq = []; Beq = [];
% Bounds
LB=[ 1/fact 0 -1 ]; UB = [ 1000/fact 1 1 ];
% Matlab options to the optimizer
opts = optimset('fmincon');
opts = optimset(opts, 'display', 'none');
% Call the minimization routine
x = fmincon(@fitfun, x0, A, B, Aeq, Beq, LB, UB, [], opts, te, mm);
% Get the output variables
t2 = x(1);
pd = x(2);
offset=x(3);
%%===================================================================
function dd = fitfun(x, te, mm)
% The current value of the three input parameters
t2 = x(1);
pd = x(2);
offset = x(3);
% Calculate the model curve
yy = pd .* exp( -te ./ t2 ) + offset;
% Compute the error between the model curve the
% the measured curve -- dd is returned
dd = sqrt(sum( (yy-mm).^2 ));
あなたの問題を考えると、あなたはlsqcurvefitまたはそのようなものを使いたいかもしれません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加