【问题标题】:MATLAB I would like to minimize the difference fittingMATLAB我想最小化差异拟合
【发布时间】:2016-11-02 05:13:17
【问题描述】:

我有一条看起来像指数函数的曲线,我想用这个方程拟合这条曲线:

我们的目标是找到ATd 的值,这将使我的初始曲线最小化V

我做了一个能够做到但需要 10 秒才能运行的函数。 3 个循环测试我想要的所有值,在 3 个循环结束时,我计算 2 条曲线之间的 RMSD(均方根偏差),并将结果放入向量 min_RMSN,最后我检查min_RMSD 的最小值,就完成了……

但这肯定不是最好的方法。

感谢您的帮助,想法:)

【问题讨论】:

  • 你试过 Matlab 的曲线拟合工具箱吗?
  • 发布你的功能。

标签: matlab optimization


【解决方案1】:

Matlab 有一个内置的fminsearch 函数,它几乎完全符合您的要求。您定义一个函数句柄,它采用数据的 RMSE 与函数拟合,传入您对 ATd 的初始猜测,然后得到一个结果:

x0 = [A0, T0, d0]
fn = @(x) sum((x(1) * (1 - exp(-x[2] / (t - x[3]))) - y).^2)
V = fminsearch(@fn, x0)

这里t 是您拥有的曲线的 x 数据,y 是相应的 y 值,A0T0d0 是您参数的初始猜测值。 fn 计算理想曲线和 y 之间的 RMSE 的平方。不需要取平方根,因为最小化平方也会最小化 RMSE 本身,计算平方根需要时间。

【讨论】:

  • 不客气。如果您喜欢这个答案,也请随意投票。
  • 单击您用于选择的复选标记上方的向上箭头。与您喜欢的其他问题和答案相同。
  • 完美。完毕。谢谢!
  • 嗨,@MadPhysicist。我的函数工作正常,突然出现此错误:退出:已超出函数评估的最大数量 - 增加 MaxFunEvals 选项。当前函数值:NaN。我试图将 MaxFunEvals 更改为 1000000 但它仍然不起作用...
  • @YLM。最可能的原因是您的初始猜测错误,因为某些参数已更改。 NaN 可能会发生,例如,它偏离了不正确的局部最小值,导致 d 大于 t。我建议提出一些程序来获得一个合理的一阶近似值作为初始猜测。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
相关资源
最近更新 更多