0

私は関数を持っています.3つの指数の合計です:

F = f1*exp1 + f2*exp2 + f3*exp3

まさに:

F=1-((1-f(2)-f(3)).*(exp(-abs(data)./a(1)))+((1-f(1)-f(3)).*(exp(-abs(data)./a(2))))+((1-f(1)-f(2)).*(exp(-abs(data)./a(3)))));

ここで、f1、f2、f3 は分数で、各 exp には 1 つのパラメーターがあり、a1、a2、a3 と呼びます。

したがって、この関数を実験データに当てはめると、6 つのパラメーター (f1、f2、f3、a1、a2、a3) が得られます。

ご了承ください

a1 > a2 > a3

f1 + f2 + f3 = 1

フィッティングは、いくつかのタイムラグ (t1、t2、t3 と呼ぶ) に対して行われます。したがって、タイムラグごとに、6 つのパラメーターのセットが 1 つあります。

パラメータ a1、a2、および a3 はタイムラグとともに直線的に増加します (a1(t1) < a1(t2) < a1(t3)... など)。分数は各タイムラグで同じです。

私が必要とするのは、a1(t)、a2(t)、a3(t)、および分数の勾配です。問題は、タイムラグごとに関数をフィッティングしているときに、a1 と a2 が順調に上昇している (完全な線形適合) が、a3 が下降しているという状況がよくあることです。また、分数にも問題があります。f1(t) + f2(t) + f3(t) を加算すると 1 に等しくならないため、各分数の平均を取ることができません。

「一度に」すべてを合わせる(簡単な)方法はありますか?どうやってするか?ありがとう!

4

1 に答える 1

0

まず、パラメーターの数を減らすことをお勧めします。

  • f3 を 1-f1-f2 に置き換えます
  • ai(t) が常に線形である場合は、ai(t) = ai0 + bi*t に置き換えます。bi>0 の場合、ai(t) が増加していることを確認できます。

これにより、各 ai(t) に対して 2 つのパラメーターが得られ、さらに各時点に対して f1 と f2 が得られるため、合計で 6 + 2 * (時点の数) パラメーターになります。fminconクリス・テイラーが提案したように、タイムポイントの数によっては、それらを に合わせることができる場合があります。

を使用fminconすると、非常に柔軟な方法でパラメーターの制約を追加できます。おそらく、制約 0<=f1<=1 (および f2 についても同じ) を既に持っている制約に追加する必要があります。

于 2011-11-25T11:01:02.583 に答える