2013-02-18 69 views
0

我有一组(未采样的)未校准值(x)来自一个设备和一组它们应该是(y)的。我正在寻找/估计映射任何xy的三次多项式y=ax^3 + bx^2 + cx + d。所以我想我需要做的是多项式回归第一,然后找到它的逆,但我不太确定;我想知道是否有更好的解决方案,如最小二乘。估算三次多项式,将set x映射到集合y

我将不胜感激正确的方向和/或任何连接到数学图书馆将是有用的。

+0

我想我糊涂起来过于复杂的它;我想我只需要用给定的[x,y]集合来进行多项式回归。 – 2013-02-18 15:48:05

+0

与许多参考文献相似的[问题](http://stackoverflow.com/questions/382186/fitting-polynomials-to-data)。 – Ante 2013-03-05 08:38:30

回答

0

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