2017-04-27 5 views
0

Ich verwende die Fit.LinearMultiDim Methode, um eine 4-Parameter-Funktion zu einem mehrdimensionalen Datensatz (2-Dim) anzupassen. Speziellere: Ich passen die FunktionGewichtete Multidim-Fit mit Math.net Numerik

(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 

Jetzt habe ich das Problem, dass ich möchte auch Verwende Gewichte für die xy Datenpunkte. Ich weiß, ich kann Fit.MultiDimWeighted verwenden, aber in diesem Fall habe ich nur eine lineare Ebene und kann die für Parameter 2 verwendete Quadratabhängigkeit nicht implementieren.

Haben Sie eine Idee, wie ich die beiden kombinieren kann?

Vielen Dank für Ihre Hilfe.

Antwort

0

Nachdem ich in den Math.Net-Code geschaut habe, habe ich eine Lösung gefunden, um sowohl eine Multidim-Anpassung mit gewichteten Datenpunkten zu kombinieren. Hoffe, das hilft jemandem, wenn er auf die gleiche Frage stößt.

Im Quellcode Ich betreibe:

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 

Und die Funktion MyFitFunctionModel1 wie folgt aussieht:

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(); 
}