【问题标题】:Estimate cubic polynomial that maps set x to set y估计将集合 x 映射到集合 y 的三次多项式
【发布时间】:2013-02-03 01:28:14
【问题描述】:

我有一组(采样的)来自设备的未校准值 (x) 和一组它们应该是的值 (y)。我正在寻找/估计将任何x 映射到y 的三次多项式y=ax^3 + bx^2 + cx + d

所以我认为我需要做的是首先进行多项式回归,然后找到它的逆,但我不太确定;我想知道是否有更好的解决方案,比如最小二乘法。

如果您能向正确的方向轻推和/或任何指向有用的数学库的链接,我将不胜感激。

【问题讨论】:

  • 我想我搞混了,把它弄得太复杂了;我想我只需要给定一组 [x, y] 的多项式回归。
  • 类似question 有很多参考资料。

标签: c# math polynomial-math


【解决方案1】:

你检查过朗朗日插值吗? 它是关于给定函数的多项式逼近。

您可以在独立变量的适当范围内停止对多项式的给定次数(假设是 3 次)的逼近。

参考:

【讨论】:

    【解决方案2】:

    看起来它只是多项式回归;我只需要输入原始 (x) 值和预期值 (y)。

    来自Rosetta Code 的代码,使用Math.Net Numerics

    using MathNet.Numerics.LinearAlgebra.Double;
    using MathNet.Numerics.LinearAlgebra.Double.Factorization;
    public static class PolyRegression
    {
        public static double[] Polyfit(double[] x, double[] y, int degree)
        {
            // Vandermonde matrix
            var v = new DenseMatrix(x.Length, degree + 1);
            for (int i = 0; i < v.RowCount; i++)
                for (int j = 0; j <= degree; j++) v[i, j] = Math.Pow(x[i], j);
            var yv = new DenseVector(y).ToColumnMatrix();
            QR qr = v.QR();
            // Math.Net doesn't have an "economy" QR, so:
            // cut R short to square upper triangle, then recompute Q
            var r = qr.R.SubMatrix(0, degree + 1, 0, degree + 1);
            var q = v.Multiply(r.Inverse());
            var p = r.Inverse().Multiply(q.TransposeThisAndMultiply(yv));
            return p.Column(0).ToArray();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      相关资源
      最近更新 更多