필터 지우기
필터 지우기

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에서 Symbolic Math Toolbox에 대해 자세히 알아보기

태그

제품

Community Treasure Hunt

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

Start Hunting!

Translated by