データ ポイントのセット (data_x、data_y) があります。モデル関数をこのデータに適合させる必要があります。モデルは 5 つのパラメーターの関数であり、次のように定義しました。
function F = model(x,xdata)
fraction1 = x(4);
fraction2 = x(5);
fraction3 = 1-x(4)-x(5);
F=1-(fraction1.*(exp(-(xdata)./x(1)))+(fraction2.*(exp(-(xdata)./x(2))))+(fraction3.*(exp(-(xdata)./x(3)))));
パラメータ x(4) と x(5) は 3 つの分数を定義するために使用されるため、それらの合計は 1 でなければなりません。
%% initial conditions
a0 = [guess1 guess2 guess3 0.3 0.3];
%% bounds
lb = [0 0 0 0 0 ];
ub = [inf inf inf 1 1];
%% Fitting options
curvefitoptions = optimset( 'Display', 'iter' );
%% Fit
a = lsqcurvefit(@model,a0,x,y,lb,ub,curvefitoptions);
問題は、分数の合計を 1 に保つために、制約を追加する方法がわからないことです。lsqcurvefit
これがこの問題の最善の解決策ではないことはわかっていfmincon
ますが、これらのデータを使用してパラメーターを見つける方法がわかりません。助けてくれてどうもありがとう!
編集:メモ、Fの最大値は1になる可能性があります...つまり、すべてを10 ^(1-fraction1-fraction2-fraction3)のようなもので加算または乗算することでチートしようとしましたが、結局ほぼ等しい分数 (0.33) では、まったく意味がないため、他のパラメーターが台無しになります... Origin (同じモデル + 制約) を使用して同じデータをフィッティングしたとき、それは完全に機能します... 固定 Origin を使用したとき出力分数パラメータの適合も素晴らしかったですが...何十もの適合を行う方法ではありません:(