我使用Fit.LinearMultiDim
方法将4参数函数拟合到多维数据集(2-dim)。更具体:我符合函数
(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 :(得分:0)
在查看Math.Net代码后,我找到了一个将多维拟合与加权数据点相结合的解决方案。希望如果遇到同样的问题,这对某人有帮助。
在我运行的源代码中:
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();
}