如何使用两个独立变量将拟合数据曲线拟合到已知公式?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用两个独立变量将拟合数据曲线拟合到已知公式?相关的知识,希望对你有一定的参考价值。

假设我有一个非线性公式,如y =(ax + bx ^ 2 + cx ^ 3)* dx1 ^ 2

其中a,b,c,d是要找到的系数,x和x1是我试图拟合的表格中的数据。

我需要一种优化算法,我可以在代码中编写(例如C或Delphi)来运行迭代以获得合理的系数a,b,c,d。

不想使用Matlab或软件包,因为这必须是一个独立的程序。引用delphi或active X单元很有帮助。如果我可以自由使用它,请不要介意支付软件费用。

答案

你的问题在a,b,c和d中是线性的,即使它在数据中是立方的。因此,我建议将其作为ordinary linear least squares问题制定。允许我将您的x1重命名为z。这个想法是这样的:你有

axi + bxi2 + cxi3 + dzi2 ≈ yi

对于一些i∈{1,2,3 ... n}。您可以将其写为近似矩阵方程:

⎡x₁ x₁² x₁³ z₁²⎤   ⎡a⎤   ⎡y₁⎤
⎢x₂ x₂² x₂³ z₂²⎥   ⎢b⎥   ⎢y₂⎥
⎢x₃ x₃² x₃³ z₃²⎥ ∙ ⎢c⎥ ≈ ⎢y₃⎥
⎢ ⋮ ⋮  ⋮  ⋮ ⎥   ⎣d⎦   ⎢⋮⎥
⎣xₙ xₙ² xₙ³ zₙ²⎦         ⎣yₙ⎦

或者更快

M∙X≈Y

现在你multiply双方与该矩阵M的transpose

MT M M X X = MT Y Y.

请注意,我从≈更改为=,因为最小二乘解决方案将完全满足此修改方程(由于冗长的原因,我不想进入此处)。这是一个简单的4×4线性方程组。使用常用技术(例如Gaussian elimination)求解X =(a,b,c,d)。

如果n很大,你甚至可以动态计算(MT∙M)和(MT∙Y),而无需存储M本身。这样4×4 + 4 = 20个数字将是输入记录之间需要维护的所有内存。实际上(MT∙M)是symmetric所以10个数字足够用于矩阵,总共14个。

以上是关于如何使用两个独立变量将拟合数据曲线拟合到已知公式?的主要内容,如果未能解决你的问题,请参考以下文章

已知所有点,怎么用OpenCV写正弦的拟合曲线?

matlab已知散点图如何拟合

怎么用B样条拟合离散的数据点之后,得到相应的函数公式?请高手解答啊,多谢

求大神指点:公式里含有积分,如何进行曲线的非线性拟合?

请问excel中如何将散点图拟合成公式呀?

r语言中gam模型拟合公式怎么看