假设我有一个功能,我发现这样的二阶导数:
xyr <- D(expression(14252/(1+exp((-1/274.5315)*(x-893)))), 'x')
D2 <- D(xyr, 'x')
它让我回归,类型'语言':
-(14252 * (exp((-1/274.5315) * (x - 893)) * (-1/274.5315) * (-1/274.5315))/(1 +
exp((-1/274.5315) * (x - 893)))^2 - 14252 * (exp((-1/274.5315) *
(x - 893)) * (-1/274.5315)) * (2 * (exp((-1/274.5315) * (x -
893)) * (-1/274.5315) * (1 + exp((-1/274.5315) * (x - 893)))))/((1 +
exp((-1/274.5315) * (x - 893)))^2)^2)
如何找到等于0的位置?
答案 0 :(得分:6)
使用图形/解算器有点笨拙,因为你的初始函数形式如下:
f(x) = c / ( 1 + exp(ax+b) )
您派生两次并求解f''(x) = 0
:
f''(x) = c * a^2 * exp(ax+b) * (1+exp(ax+b)) * [-1 + exp(ax+b)] / ((1+exp(ax+b))^3)
这相当于分子等于0
- 因为a
,c
,exp()
和1+exp()
总是正数,唯一可以相等的术语零是:
exp(ax+b) - 1 = 0
所以:
x = -b/a
此处a =-1/274.5315
,b=a*(-893)
。所以x=893
。
只是数学;)
++:
答案 1 :(得分:3)
您可以在使用衍生表达式创建函数后使用uniroot
:
f = function(x) eval(D2)
uniroot(f,c(0,1000)) # The second argument is the interval over which you want to search roots.
#Result:
#$root
#[1] 893
#$f.root
#[1] -2.203307e-13
#$iter
#[1] 7
#$init.it
#[1] NA
#$estim.prec
#[1] 6.103516e-05