Экспоненциальная кривая-Fit, с помощью Math.Net
Я очень новичок в Math.Net библиотека и у меня возникли проблемы с попыткой сделать подгонку кривой на основе экспоненциальной функции. Более конкретно я намерен использовать эту функцию:
f(x) = a*exp(b*x) + c*exp(d*x)
используя MATLAB, я получаю довольно хорошие результаты, как показано на следующем рисунке:
MATLAB вычисляет следующие параметры:
f(x) = a*exp(b*x) + c*exp(d*x)
Coefficients (with 95% confidence bounds):
a = 29.6 ( 29.49 , 29.71)
b = 0.000408 ( 0.0003838, 0.0004322)
c = -6.634 ( -6.747 , -6.521)
d = -0.03818 ( -0.03968 , -0.03667)
возможно ли достичь этих результатов, используя Math.Net?
3 ответов
нет похоже, что в настоящее время нет экспоненциальной поддержки. Однако есть обсуждение Math.NET форумы, где сопровождающий предлагает обходной путь:
https://discuss.mathdotnet.com/t/exponential-fit/131
содержание дублируется в случае разрыва ссылки:
вы можете, преобразуя его, подобно линеаризации нелинейных моделей путем преобразования. Что-то вроде следующего должно работа:
double[] Exponential(double[] x, double[] y,
DirectRegressionMethod method = DirectRegressionMethod.QR)
{
double[] y_hat = Generate.Map(y, Math.Log);
double[] p_hat = Fit.LinearCombination(x, y_hat, method, t => 1.0, t => t);
return new[] {Math.Exp(p_hat[0]), p_hat[1]};
}
пример использования:
double[] x = new[] { 1.0, 2.0, 3.0 };
double[] y = new[] { 2.0, 4.1, 7.9 };
double[] p = Exponential(x,y); // a=1.017, r=0.687
double[] yh = Generate.Map(x,k => p[0]*Math.Exp(p[1]*k)) // 2.02, 4.02, 7.98
глядя на Math.net кажется, что Math.net делает различные типы регрессии, тогда как ваша функция требует некоторого типа итерационного метода. Например, метод Гаусса-Ньютона, где вы будете использовать линейную регрессию на каждой итерации решать систему (переопределенной) системы линейных уравнений, но это все же требует "ручной" работы с написанием метода.
ответ: пока нет, я полагаю. В принципе, есть вклад целого csmpfit
пакет, но он еще не интегрирован в Math.Net - ... Вы можете использовать его как отдельную библиотеку, а затем после полной интеграции перейти к Math.Net - ... Ссылка http://csmpfit.codeplex.com