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

回答(1 个)

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

类别

Help CenterFile Exchange 中查找有关 Assumptions 的更多信息

标签

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by