Math 如何将数据曲线拟合到具有两个独立变量的已知公式?

Math 如何将数据曲线拟合到具有两个独立变量的已知公式?,math,curve-fitting,Math,Curve Fitting,假设我有一个非线性公式,比如y=(ax+bx^2+cx^3)*dx1^2 其中a、b、c、d是要找到的系数,x和x1是我试图拟合的表中的数据 我需要一个优化算法,我可以写在代码(如C或德尔菲)通过迭代运行,以获得合理的系数a,b,C,d 不想使用Matlab或软件包,因为这必须是一个独立的程序。参考delphi或active X装置会有所帮助。如果我可以免费使用,请不要介意为软件付费。您的问题在a、b、c和d中是线性的,即使数据是立方的。因此,我建议将此列为一个问题。请允许我将您的x1重命名为z

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

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

我需要一个优化算法,我可以写在代码(如C或德尔菲)通过迭代运行,以获得合理的系数a,b,C,d


不想使用Matlab或软件包,因为这必须是一个独立的程序。参考delphi或active X装置会有所帮助。如果我可以免费使用,请不要介意为软件付费。

您的问题在a、b、c和d中是线性的,即使数据是立方的。因此,我建议将此列为一个问题。请允许我将您的x1重命名为z。这个想法是:你有

axi+bxi2+cxi3+dzi2≈ 彝族

对某些人来说,我∈{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

现在你们用矩阵M的两边:

MT∙ M∙ X=MT∙ Y

注意,我从≈ to=因为最小二乘解将完全满足这个修改后的方程(出于冗长的原因,我不想在这里讨论)。这是一个简单的4×4线性方程组。使用常用技术(例如)求解X=(a,b,c,d)


如果n很大,您甚至可以计算(MT∙ M) 及∙ Y) 在飞行中没有储存自己。这样,4×4+4=20个数字将是您在输入记录之间需要维护的全部内存。实际(MT)∙ M) 所以10个数字足够矩阵,总共14个。

那么,您的数据表包含多个三元组
(x,dx1,y)
,您想找到系数
a,b,c
?这是完全线性的(在未知数中)。请注意,如果最后一个操作符确实是一个产品,您不需要
d
,它已经在
a
b
c
中了,那么我建议用所选的编程语言研究“多元线性回归”,然后可以格式化x、x^2和(x^3*x1^2)并对其进行线性回归,得到a、b和c。对于格式1.0(偏移乘以1),偏移参数通常很有用在code.uhhh中,这个版本有点过于简单。@mikuszefski:在什么方面过于简单了?我遗漏了所有关于为什么这样做的理由,或者关于这实际上优化了什么的讨论。但是对于手头的问题“我如何获得合理的系数”我觉得这很管用。但我很有兴趣阅读你对这一点的看法,所以请随意写一个独立的或补充的答案。好吧,经过十多年的教学,我只能说正确的结果并不意味着答案是正确的。最小二乘法意味着你有一个向量
E
,使得
mk=Y+E
其中
k
是系数向量。在最小化
E\T E
关于
k
之后,你会得到
M\T M k\u opt=M\T Y
。从这个意义上说,你的答案是正确的,但原因是……嗯……过于简单化了……尽管,我想你知道这一点。@mikuszefski:我甚至不是想说有一个解释。只是说明,配方风格。在解释方面,我更喜欢几何视图,即从Y到M的空间的正交投影,但这需要更多的工作来阐述,也不是每个人的正确思维方式……同意……我只是对你现在用它的转置乘两边的说法感到恼火矩阵M,你可以以相等为目标,因为这意味着这是这样做的原因/正确方式;没关系。