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

How can I resolve an exponential function for x in R?

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

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

其中 a=渐近线,b=最大斜率,c=lambda。

结果我得到了:

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

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

或者正常写法:

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

现在我想用 f'(x)=0.01 求解 x 的这个函数。谁能告诉我怎么做最好?

另外,你对我的思路或者我使用的R函数有什么意见吗?

谢谢。 安妮

可能不是最好的方法,但您可以使用 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

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

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

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> ......

使用包 pracma

中的函数 fsolve
library(pracma)
fsolve(fn,1)

给予

$x
[1] 0.003388585

$fval
[1] 3.136539e-10

两个包给出的解非常接近。

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