How to obtain the derivative analytically of a complicated function and evaluate it at 0
1 次查看(过去 30 天)
显示 更早的评论
Hi all,
I am new to the symbolic math toolbox. I am trying to differentiate a function and evaluate it at 0 (stable equilibrium). I got some sort of derivative from diff function, but if I try to evaluate at 0,I get NaN. I wish to do stability analysis around the equilibrium at 0. It is a discrete time model of a population. What I think I should do is to take the derivative with respect to F (the state variable, population density) and evaluate it at F = 0. And see if this derivative evaluated at 0 is less than 1, which indicates that the equilibrium is stable. I wish to derive an expression for the threshold value of D beyond which the extinction equilibrium is stable.
F(t) = (1-s0)*a*(1-exp(-r*F(t-1)/N))*N*(1-D)*(1-D/(D+s0*(a*(1-exp(-r*F(t-1)/N))*N/F(t-1))))
a = 0.62, r = 26, s0 = 0.5, N = 1.
This is what I did in Matlab
syms s0 a r F N D b
fun = @(s0,D,a,r,F,N) (1-s0)*a*(1-exp(-r*F/N))*N*(1-D)*(1-D/(D+s0*(a*(1-exp(-r*F/N))*N/F)))
diff(fun,F)
ans = - a*r*exp(-(F*r)/N)*(D - 1)*(D/(D - (N*a*s0*(exp(-(F*r)/N) - 1))/F) - 1)*(s0 - 1) - (D*N*a*((a*r*s0*exp(-(F*r)/N))/F + (N*a*s0*(exp(-(F*r)/N) - 1))/F^2)*(exp(-(F*r)/N) - 1)*(D - 1)*(s0 - 1))/(D - (N*a*s0*(exp(-(F*r)/N) - 1))/F)^2
myfun =@(s0,D,a,r,F,N) - a*r*exp(-(F*r)/N)*(D - 1)*(D/(D - (N*a*s0*(exp(-(F*r)/N) - 1))/F) - 1)*(s0 - 1) - (D*N*a*((a*r*s0*exp(-(F*r)/N))/F + (N*a*s0*(exp(-(F*r)/N) - 1))/F^2)*(exp(-(F*r)/N) - 1)*(D - 1)*(s0 - 1))/(D - (N*a*s0*(exp(-(F*r)/N) - 1))/F)^2 - 1
F_ = 0; N_ = 1; s0_ = 0.5; a_ = 0.62; r_ = 26;
myfun2 = @(D) myfun(s0_,D,a_,r_,F_,N_)
D = fzero(myfun2,0.8)
Then I got
Error using fzero (line 307)
Function value at starting guess must be finite and real.
Thank you very much for your help in advance!!
Etsuko
0 个评论
回答(1 个)
Mahesh Pai
2017-3-29
It is my understanding that you are receiving an error when you are trying to execute the above script. You are receiving the error because you are substituting "F" as "0" in "myfun", and "myfun" has expressions that are divided by "F" which leads to an infinite value upon evaluation. Upon changing "F" to a very small value (close to zero) you will not receive this error.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Symbolic Math Toolbox 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!