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