在Java中查找二次回归曲线的最佳方法

ash*_*lal 2 java math

我有三组数据,例如:

x   y
4   0
6   60
8   0
Run Code Online (Sandbox Code Playgroud)

有谁知道任何(有效的)Java代码可以回馈a,b和c(系数)的值?

Mar*_*ers 6

我假设你想要这种形式的公式:

y = a * x^2 + b*x + c
Run Code Online (Sandbox Code Playgroud)

如果您只有三个点,则可以使用以下公式描述通过所有三个点的二次曲线:

y = ((x-x2) * (x-x3)) / ((x1-x2) * (x1-x3)) * y1 +
    ((x-x1) * (x-x3)) / ((x2-x1) * (x2-x3)) * y2 +
    ((x-x1) * (x-x2)) / ((x3-x1) * (x3-x2)) * y3
Run Code Online (Sandbox Code Playgroud)

在你的例子中:

x1 = 4, y1 = 0, x2 = 6, y2 = 60, x3 = 8, y3 = 0
Run Code Online (Sandbox Code Playgroud)

要根据x1,x2,x3,y1,y2和y3得到系数a,b,c,您只需要将公式相乘,然后收集项.这并不难,而且运行速度非常快,但输入的代码相当多.最好找一个已经为你做的包,但是如果你想自己做,这个你是怎么做到的.

在您的示例中,y个项中的两个为零的事实使得公式更简单,并且您可能能够利用它.但如果这只是巧合而不是一般规则,那么你需要完整的公式.

  • +1:这被称为拉格朗日插值多项式(http://en.wikipedia.org/wiki/Lagrange_polynomial) (4认同)