2015-05-26 2 views
1

Учитывая следующий набор хз и ув:Как найти подходящий закон о силе?

хз = [8294400, 2073600, 921600, 409920]

YS = [124, 433, 853, +1449]

Место это с силой закон в Excel дает хорошее приближение:

enter image description here

Excel нашел функцию вида a(x^b). Как определить a и b в C#? Я пробовал использовать Math.Net число, но я не вижу никакого метода, который работал бы для функции этой формы. Все функции в Linear Regression module просто находят линейные коэффициенты для функций различных форм, но ни один из них не может определить показатель степени.

+0

Это происходит потому, что вид регрессии вы хотите нелинейна. –

+0

Вам может понадобиться http://metanumerics.codeplex.com/ и документация http://metanumerics.codeplex.com/wikipage?title=Tests&referringTitle=Documentation – gtzinos

+0

Этот случай на самом деле описан на связанной странице: http: // число .mathdotnet.com/Regression.html # Линеаризация-нелинейные модели путем преобразования –

ответ

4

Уравнение вы хотите выглядеть следующим образом:

y = a*x^b 

Возьмите натуральный логарифм обеих сторон:

ln(y) = ln(a*x^b) = ln(a) + b*ln(x) 

Теперь вы можете использовать линейную регрессию на новых преобразованных переменных (ln(x), ln(y)) и вычислить два параметры, которые вы хотите: ln(a) и b.

1

В экспоненциальной системе лучший способ сделать регрессию - это, вероятно, сделать линейную регрессию на шкале журнала. Для уточнения, даже если ваша функция не является линейной, взяв натуральный логарифм от обеих частей уравнения приведет к более линейной системы

нелинейную функцию: y = a x^b

Это становится ln(y) = ln(a x^b) = ln(a) b ln(x)

в Math.NET ЦИФРЫ, хороший способ закодировать это может быть:

var y = y.Select(r => Math.Log(r)).ToArray(); // transform y = ln(z) 
double[] w = Fit.LinearCombination(xy, z_hat, 
    d => 1.0, 
    d => Math.Log(d[0]), 
    d => Math.Log(d[1])) 

Или, если вы хотите, чтобы он возвращает функцию, которую вы могли бы использовать LinearCombinationFunc()

Источники: http://numerics.mathdotnet.com/Regression.html и http://numerics.mathdotnet.com/api/MathNet.Numerics/Fit.htm

+0

Это неверно; вы отказались от термина ln (a). То, что я написал, правильно. – duffymo

+0

RIght. Это опечатка. –

Смежные вопросы