2017-04-27 243 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(); 
}