如何在R中解析x的指数函数?

时间:2017-01-12 12:50:02

标签: r lambda logarithm derivative

我想更详细地分析对数增长曲线。特别是我想知道当斜率变为> 0(这是滞后阶段之后的增长起点)时的时间点。 因此,我使用R的grofit包为我的生长数据拟合了一个对数函数。我得到了三个参数的值(lambda,mu,maximal assymptote)。 现在我想,我可以使用对数增长函数的一阶导数来设置mu = 0(生长期间任何时间点的斜率),这样就可以求解时间(x)的等式。我不确定这是否可行,因为mu = 0在曲线开始时的较长时间范围内是正确的(并且没有唯一的时间点)。但也许我可以通过设mu = 0.01来近似于那一点。这应该更具体。 无论如何,我使用Deriv包来找到对数函数的一阶导数:

  

Deriv(a /(1 + exp(((4 * b)/ a)*(c-x)+2)),“x”)

其中a = assymptote,b =最大斜率,c = lambda。

结果我得到了:

  

{。e2< - exp(2 + 4 *(b *(c - x)/ a))

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

或者在正常的写作中:

F'(X)=(4 * EXP(2 +((4B(CX))/ A))* B)/((EXP(2 +((4B(CX))/ A))+ 1 )^ 2)

现在我想用f'(x)= 0.01解决x的这个函数。任何人都可以告诉我,如何做到最好?

另外,您对我的思维方式或我使用的R函数有什么评论吗?

谢谢。 安

3 个答案:

答案 0 :(得分:1)

使用根求解函数比使用优化函数更合适。 我举两个包的例子。

为一系列值绘制函数也是一个好主意。 像这样:

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

两个软件包给出的解决方案彼此非常接近。

答案 1 :(得分:0)

可能不是最好的方法,但您可以使用optim函数来查找解决方案。检查下面的代码,我基本上试图找到最小化abs(f(x) - 0.01)

的x的值

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

答案 2 :(得分:0)

非常感谢您的努力。不幸的是,上述解决方案都不适合我:-( 我用老式的方式解决问题(铅笔+纸+数学书)。 祝你有美好的一天 安