估计将集合x映射到集合y的三次多项式

本文关键字:集合 三次 多项式 映射 | 更新日期: 2023-09-27 18:00:09

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

所以我想我需要做的是多项式回归,然后找到它的逆,但我不太确定;我想知道是否有像最小二乘法这样更好的解决方案。

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

估计将集合x映射到集合y的三次多项式

是否检查了Langrange插值?它是关于给定函数的多项式近似。

你可以在独立变量的适当范围内停止多项式的给定次数(比如说3次)的近似。

参考:

  • http://en.wikipedia.org/wiki/Lagrange_polynomial

  • https://math.stackexchange.com/a/108623

看起来只是多项式回归;我只需要输入原始值(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();
    }
}