【问题标题】:Matlab: Fit a custom function to xy-data with given x-y errorsMatlab:将自定义函数拟合到具有给定 x-y 错误的 xy 数据
【发布时间】:2017-05-08 17:30:03
【问题描述】:

我一直在寻找可以进行非线性总最小二乘拟合的 Matlab 函数,基本上可以将自定义函数拟合到在所有维度上都有错误的数据。最简单的情况是 x 和 y 数据点在 x 和 y 中具有不同的给定标准偏差,对于每个单点。这是所有自然科学中非常常见的情况,仅仅因为大多数人只知道如何对 y 中的误差进行最小二乘拟合并不意味着它不会非常有用。我知道这个问题比简单的 y 误差要复杂得多,这可能就是为什么大多数人(甚至不是像我这样的物理学家)学会了如何正确处理多维误差的原因。

我希望像 matlab 这样的软件可以做到这一点,但除非我不擅长阅读其他最有用的帮助页面,否则我认为即使是“完整的”Matlab 许可证也无法提供这种合适的功能。例如,Origin、Igor、Scipy 等其他工具使用免费提供的 fortran 包“ODRPACK95”。关于文件交换的总最小二乘或戴明拟合的贡献很少,但它们仅用于线性拟合,这对我来说用处不大。

任何可以帮助我的提示我都会很高兴

亲切的问候

【问题讨论】:

  • 首先,我建议坚持使用 Matlab。那里肯定有算法。
  • 也许this FEX submissionthis accompanying paper 会有所帮助。
  • 嗯...我认为应该在 Matlab 中实现一个算法来考虑 x 和 y 错误,但我没有找到任何东西。我查看了 FileExchange 上可用的内容,但线性拟合只有两种实现。不过,我需要能够拟合非线性模型。

标签: matlab optimization curve-fitting least-squares


【解决方案1】:

首先我应该指出,自从我去年毕业(也是一名物理学家)以来,我并没有过多地练习 MATLAB。话虽如此,我记得使用过

    lsqcurvefit()

在 MATLAB 中执行非线性曲线拟合。现在,这可能有效,也可能无效,具体取决于您所说的 自定义函数 是什么意思?我假设您想拟合一些类似于其中之一的 known 表达式,

    y = A*sin(x)+B
    y = A*e^(B*x) + C

非常很难在不知道形式的情况下进行拟合,例如如上。最终,所有数学函数都可以用多项式来逼近足够小的间隔。这是您可能需要考虑的事情,因为 MATLAB 确实有很多用于执行多项式回归的工具。

最后,我强烈建议您编写自己的拟合函数。网上有很多这样的例子。这个想法是知道上面的真正解决方案的形式,并猜测参数,A,B,C...。创建一个误差(或成本)函数,它会在您的数据和猜测的解决方案之间产生定量误差(偏差)。然后问题被简化为最小化错误,MATLAB 有很多内置功能。

【讨论】:

  • 确定我知道 lsqcurvefit ,是的,我们在这里达成了一致。我知道如何做这一切,Matlab 提供了大量的曲线拟合功能,但是:我的问题是围绕数据拟合演变而来的,其中 y 和 x 变量中的已知错误。
猜你喜欢
  • 2015-01-07
  • 1970-01-01
  • 2017-07-09
  • 2012-07-18
  • 1970-01-01
  • 2018-02-27
  • 2014-06-26
  • 1970-01-01
  • 2019-10-10
相关资源
最近更新 更多