【问题标题】:MATLAB: multiple function fittingMATLAB:多功能拟合
【发布时间】:2012-01-05 10:00:10
【问题描述】:

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

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

f1 + f2 + f3 = 1

拟合完成了几个时间延迟(称为 t1、t2、t3....)。因此,对于每个时间延迟,都有一组六个参数。

参数 a1、a2 和 a3 以线性方式随时间延迟增加(a1(t1)

我需要的是 a1(t)、a2(t)、a3(t) 和分数的斜率。 问题是,当我为每个时滞拟合函数时,我经常遇到 a1 和 a2 很好地上升(完美的线性拟合)但 a3 下降的情况。 我也有分数的问题 - 我不能取每个分数的平均值,因为当我添加 f1(t) + f2(t) + f3(t) 时,它永远不会等于 1。

是否有任何(简单的)方法可以“一次”安装所有内容?怎么做? 谢谢!

【问题讨论】:

  • 你用什么来拟合参数?函数fmincon 允许您指定等式和不等式约束,您可以使用它们来确保a1 > a2 > a3f1 + f2 + f3 = 1 始终。

标签: matlab curve-fitting data-fitting model-fitting


【解决方案1】:

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

  • 将 f3 替换为 1-f1-f2
  • 如果 ai(t) 始终是线性的,则替换为 ai(t) = ai0 + bi*t。使用 bi>0,您可以确保 ai(t) 增加。

这为每个 ai(t) 提供了两个参数,加上每个时间点的 f1 和 f2,所以总共有 6 + 2 * (# of timepoints) 参数。根据 Chris Taylor 的建议,根据时间点的数量,可能适合 fmincon 的那些。

使用fmincon,您可以以非常灵活的方式添加参数约束。您可能希望将约束 0

【讨论】:

    猜你喜欢
    • 2017-03-02
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多