У меня есть 3 набора данных. 2 для самого полинома (назовем их x и y) и 1 для значения функции (это будет z).
Полином выглядит примерно так (при условии, что мощность обоих измерений равна 3):
z = a00 + a01*x + a02*x^2 + a03*x^3 + a10*y + a11*y*x + a12*y*x^2 ... etc
Мне нужно иметь возможность устанавливать мощность каждого измерения при подготовке к приближению значений «а».
Я не совсем понимаю, как функции CurveFitting работают с Math.NET Numerics, но я пробовал Fit.LinearMultiDim и MultipleRegression.QR. У меня проблемы с инициализацией делегата Func
var zs = new double[]
{
//values here
};
var x = new double[]
{
//values here
};
var y = new double[]
{
//values here. But the amounts are equal
};
var design = Matrix<double>.Build.DenseOfRowArrays(Generate.Map2(x, y,(t, w) =>
{
var list = new List<double>(); //Can i get this working?
for (int i = 0; i <= 3; i++)
{
for (int j = 0; j <= 3; j++)
{
list.Add(Math.Pow(t, j)*Math.Pow(w, i));
}
}
return list.ToArray();
}));
double[] p = MultipleRegression.QR(design, Vector<double>.Build.Dense(zs)).ToArray();
Так что в идеале мне нужно иметь возможность составить функцию с каким-то циклом, который учитывает максимальную мощность обеих переменных.
UPD: функция всегда выше нуля на любой оси