MATLAB:多函数拟合

MATLAB:多函数拟合,matlab,curve-fitting,data-fitting,model-fitting,Matlab,Curve Fitting,Data Fitting,Model Fitting,我有一个函数,三个指数之和: 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都有一个参数,称之为a1、a2和a3 因此,将此函数与实验数据拟合得到六个参数(f1、f2、

我有一个函数,三个指数之和:

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都有一个参数,称之为a1、a2和a3

因此,将此函数与实验数据拟合得到六个参数(f1、f2、f3、a1、a2、a3)

请注意

a1 > a2 > a3

该装配在几个时间段内完成(称为t1、t2、t3……)。因此,对于每个timelag,有一组六个参数

参数a1、a2和a3随着时间的推移呈线性增加(a1(t1) 我需要的是a1(t),a2(t),a3(t)和分数的斜率。 问题是,当我为每个时间段拟合函数时,我经常会遇到这样的情况:a1和a2很好地向上(完美线性拟合),而a3则向下。 此外,我对分数也有一个问题——我不能取每个分数的平均值,因为当我加上f1(t)+f2(t)+f3(t)时,它永远不等于1

有什么(简单的)方法可以“一次”完成所有的工作吗?怎么做?
谢谢

首先,我建议减少参数的数量:

  • 用1-f1-f2替换f3
  • 如果ai(t)始终是线性的,则替换为ai(t)=ai0+bi*t。bi>0时,可以确保ai(t)增加
这为每个ai(t)提供了两个参数,加上每个时间点的f1和f2,因此总共有6+2*(#个时间点)参数。根据时间点的数量,可以按照Chris Taylor的建议,使用
fmincon
来拟合这些时间点


使用
fmincon
,您可以以非常灵活的方式添加参数约束。您可能要添加约束0您使用什么来拟合参数?函数
fmincon
允许您指定相等和不相等约束,您可以使用这些约束来确保
a1>a2>a3
f1+f2+f3始终为1
f1 + f2 + f3 = 1