2017-04-27 245 views
0

我正在使用Fit.LinearMultiDim方法將4參數函數擬合到多維數據集(2-dim)。更具體:我適合的功能使用Math.net數值的加權multidim擬合

(X1,X2)=> P1 + P2 * X1 + P3 * X1 * X1 + P4 * X2

FitParameters = Fit.LinearMultiDim(xy, z, 
    d => 1.0,   // p0*1.0 
    d => d[0],  // p1*x1 
    d => d[0] * d[0], // p2*x1^2 
    d => d[1]);  // p3*x2 

現在我有,我也想問題使用xy數據點的權重。我知道我可以使用Fit.MultiDimWeighted,但在這種情況下,我只有一個線性平面,不能實現用於參數2的平方依賴關係。

您知道如何將兩者結合起來嗎?

謝謝你的幫助。

回答

0

在研究Math.Net代碼後,我找到了一個將multidim與加權數據點組合在一起的解決方案。希望這可以幫助某人,如果他遇到同樣的問題。

在源代碼中,我跑:

FitParametersModel1 = MyFitFunctionModel1(xy, z, w, 
    d => 1.0,   // p0*1.0 
    d => d[0],   // p1*x1 
    d => d[0] * d[0], // p2*x1^2 
    d => d[1]);   // p3*x2 

而且功能MyFitFunctionModel1看起來是這樣的:

public double[] MyFitFunctionModel1(double[][] x, double[] y, double[] w, params Func<double[], double>[] functions) 
{ 
    var design = MathNet.Numerics.LinearAlgebra.Matrix<double>.Build.Dense(x.Length, functions.Length, (i, j) => functions[j](x[i])); 
    return MathNet.Numerics.LinearRegression.WeightedRegression.Weighted(design, MathNet.Numerics.LinearAlgebra.Vector<double>.Build.Dense(y), MathNet.Numerics.LinearAlgebra.Matrix<double>.Build.Diagonal(w)).ToArray(); 
}