2017-01-12 16 views
-2

Я хочу более подробно проанализировать логарифмическую кривую роста. Особенно мне хотелось бы указать временную точку, когда наклон становится> 0 (что является отправной точкой роста после фазы запаздывания). Поэтому я привязал логарифмическую функцию к моим данным роста с помощью пакета grofit R. Я получил значения для трех параметров (лямбда, mu, максимальная асимптота). Теперь я подумал, что я мог бы использовать первую производную от логарифмической функции роста, чтобы положить mu = 0 (наклон любой точки времени при росте) и таким образом решить уравнение для времени (x). Я не уверен, что это возможно, так как mu = 0 будет правильным для более длительного периода времени в начале кривой (и не будет уникальной временной точки). Но, возможно, я мог бы приблизиться к этой точке, положив mu = 0,01. Это должно быть более конкретным. Во всяком случае, я использовал пакет DERIV найти первую производную от моей логарифмической функции:Как я могу разрешить экспоненциальную функцию для x в R?

DERIV (а/(1 + ехр (((4 * б)/а) * (сх) +2)), «x»)

где a = асимптота, b = максимальный наклон, c = лямбда.

В результате я получил:

{.e2 < - ехр (2 + 4 * (B * (с - х)/а))

4 * (.e2 * b/(.e2 + 1)^2)} 

Или нормальная запись:

f '(x) = (4 * exp (2 + ((4b (cx))/a)) * b)/((exp (2 + ((4b (cx))/a)) + 1)^2)

Теперь я бы l ike для решения этой функции для x с f '(x) = 0,01. Может ли кто-нибудь сказать мне, как лучше всего это сделать?

Кроме того, есть ли у вас комментарии относительно моего образа мышления или функций R, которые я использовал?

спасибо. Anne

+0

вы имеете в виду вы хотите найти ' , b, c' ??? – Mateusz1981

+0

Извините, потому что я не знаю. Я знаю a, b и c для различных обработок, которые я использовал. Они являются константами, но изменяются для каждого репликации. Я хотел бы знать x, основываясь на разных a, b, c. – Anne

ответ

0

Большое спасибо за ваши усилия. К сожалению, ни один из вышеупомянутых решений не работал для меня :-( я понял проблему вне старинке (карандаш + бумага + математика книга). Иметь хороший день Anne

0

Возможно, не лучший подход, но вы можете использовать функцию optim, чтобы найти решение. Проверьте код ниже, я в основном пытаюсь найти значение x, которое сводит к минимуму abs(f(x) - 0.01)

Начальное значение начального значения для x может быть важным, функция optim может не сходиться для некоторых семян.

fn <- function(x){ 
    a <- 1 
    b<- 1 
    c <- 1 

return(abs((4*exp(2+((4*b*(c-x))/a))*b)/ ((exp(2+((4*b*(c-x))/a))+1)^2) - 0.01)) 
} 

x <- optim(10,fn) 
x$par 
0

Использование функции релаксации более целесообразно, чем использование функции оптимизации. Я приведу пример с двумя пакетами.

Было бы также полезно построить функцию для диапазона значений. Как это:

curve(fn,-.1,.1) 

Вы можете видеть, что с помощью функции базового R uniroot будет представлять проблемы, поскольку она нуждается в значения функции на концах интервала, чтобы быть противоположным знаком.

Использование пакета nleqslv как этот

library(nleqslv) 
nleqslv(1,fn) 

дает

$x 
[1] 0.003388598 

$fvec 
[1] 8.293101e-10 

$termcd 
[1] 1 

$message 
[1] "Function criterion near zero" 

<more info> ...... 

Использование функции fsolve из пакета pracma

library(pracma) 
fsolve(fn,1) 

дает

$x 
[1] 0.003388585 

$fval 
[1] 3.136539e-10 

Решения, предоставляемые обоими пакетами, очень близки друг к другу.