2013-02-18 59 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(); 
    } 
}