すべて 5 ~ 8 個のパラメーターを持つ 5 つのノンパラメトリック モデルがあります。このモデルは、t を時間として経時データ y(t) を適合させるために使用されます。すべてのデータファイルは、比較のために 5 つのモデルすべてに適合しています。モデル自体を変更することはできません。
フィッティングには開始値が使用され、これらはレーベンバーグ・マルカート アルゴリズムを使用して lsqcurvefit モデルにフィッティングされます。そこで、いくつかのモデル用のスクリプトと、カーブ フィッティング用の 1 つの関数を作成しました。
カーブ フィッティングを実行すると、多くの開始値が極端な値に変化します。これらのパラメーターは開始値の近くにとどまる必要があり、明確に定義された範囲内でのみ変化するか、標準偏差内に収まる曲線のみが含まれるようにする必要があるため、これは避けたいことです。カーブ フィッティング (反復数値化手法) 中に適用する必要があり、後で適用する必要はありません。
モデルを高さに合わせるために私が書いた関数:
% Fit a specific model for all valid persons
try
opts = optimoptions(@lsqcurvefit, 'Algorithm', 'levenberg-marquardt');
[personalParams,personalRes,personalResidual] = lsqcurvefit(heightModel,initialValues,personalData(:,1),personalData(:,2),[],[],opts);
catch
x=1;
end
モデルの 1 つに対して作成した関数
elseif strcmpi(model,'jpss')
% y = h_1(1-(1/(1+((t+0.75)^c_1/d_1)+((t+0.75)^c_2/d_2)+((t+0.75)^c_3/d_3)))
% heightModel = @(params,ages) params(1).*(1-1./(1+((ages+0.75).^params(2))./params(3) + ((ages+0.75).^params(4))./params(5) + ((ages+0.75).^params(6))./params(7)));
heightModel = @(params,ages) params(1).*(1-1./(1+(((ages+0.75)./params(3)).^params(2)) + (((ages+0.75)./params(5)).^params(4)) + ((ages+0.75)./params(7)).^params(6))); % Adapted 25/07
modelStrings = {'h1','c1','d1','c2','d2','c3','d3'};
% Define initial values
if strcmpi('male',gender)
initialValues = [174.8 0.6109 2.9743 3.614 9.88 22.393 13.59];
else
initialValues = [162.7 0.6546 2.43 4.011 8.579 18.394 11.846];
end
私がしたいこと:
すべての開始値 @initial 値に制限を課すことは可能ですか? lsqcurvefit に制限を設けることは良い考えではないと思います。異なる開始値と許可されている範囲を持つ異なるモデルがあるからです。
私は2つのことを頭に入れていました.1.範囲を使用して、これを初期値の間に配置します。範囲 a2=[0.3,0.8] など
- Heightmodel='name model' initial value* 1.2 および lb = initial value* 0.8 の場合、lsqcurvefit の間のすべての初期値に lb と ub の制限を別々に配置します。
私はそれを機能させることができないので、誰かが私にいくつかのヒントや指針を与えることができます.
前もって感謝します
ルーシー
誰か助けてくれませんか