Preben Alsholm

MaplePrimes Activity


These are replies submitted by Preben Alsholm

I think the problem may be related to the fact that the right hand side of the equation for rho is not differentiable w.r.t. rho at rho=0.
Consider this simple example, where there is nonuniqueness when rho hits 0.

restart;
#Digits:=20: # Has no effect
ode:=diff(x(t),t)=-x(t)^(2/3);
res:=dsolve({ode,x(0)=1},numeric,events=[[x(t)-1e-14,halt]]);
plots:-odeplot(res,0..5); #Event triggered
res:=dsolve({ode,x(0)=1},numeric,events=[[x(t)-1e-15,halt]]);
plots:-odeplot(res,0..5); #Event not triggered, but singularity encountered.

@aureux Since I am showing both graphs in the same plot the wolf graph would be dwarfed by rhe elk graph. That was the only reason for multiplying by 100. You can obviously just remove that 100 or replace it with another number.
As an alternative you could make two graphs: One for elks and one for wolves.

@aureux
If your Maple version is not 18 then just remove the option size=[...] to odeplot. This option is new to Maple 18.
After that the plot should be fine.
You can stretch the plot with the mouse. This can be done by the size option in Maple 18.

Since the rest of your lines (starting with the assignment to eqs) refer to the nondimensionalized system and since you haven't defined that after the restart, they don't make any sense.

Notice that in my reply above I wrote:

"
################## Continuing with the dimensionless version ###########
However, if you would like to see how to get the same result from SYS in the previous exchange then continue from there with
   "

where the bold face is in the original, i.e. I meant that it was important and should be noticed.

@THAPELO The replacement of N(t) with infinity in order to find the limits of X= <S,I1,I2,I3,I4> at infinity can be justified by noticing first that the resulting system for X is linear and autonomous.
It can be written

X'(t) = M.X+B  (*)

where M is a lower triangular matrix with negative numbers in the diagonal: Those are the eigenvalues of M.
B is a constant vector.

The actual system (keeping N(t)) can then be written as

X'(t) = M.X+B + F(t)  (**)

where F(t) -> zero vector as t->infinity.

This is enough for us to prove that the solutions of (**) tend to the equilibrium points of (*), which are simply found by
-M^(-1).B;
eval(%,params); #For the actual parameters.

The proof is basically the same as in the scalar case:

ode:=diff(x(t),t)=-a*x(t)+b+f(t), where a >0 and f(t)->0 as t->infinity

If need be I shall provide the proof for this scalar case, but it is rather straightforward.




@THAPELO As pointed out above there is no equilbrium with nonnegative coordinates for the system. Recall that an equilibrium solution is the same as a constant solution.
There is none even if we reformulate using AE.

Another question is: Does the solution [I1(t),I2(t),I3(t),I4(t),S(t),AE(t)] have a (finite) limit as t->infinity ?

The answer to that question I'm convinced is yes. The limit has I1,I2,I3,I4,S independent of initial conditions while the limiting value of AE depends on the initial conditions:

dsolve({Sys6E,AE(0)=AE0},{AE(t)});

The result has the form

Int(f(s)*exp(-a*s),s=0..t) +AE0;

where a=mu+nu and f = rho*(I1+I2+I3+I4).
The integral has a limit as t-> infinity, since f is bounded and a > 0.

@aureux Since I don't know your project and to what depth you are dipping into the questions of sustainability (a much overused term) I may have made the mistake of making this whole thing look more difficult than it is.

If you only want to see what actually happens for the parameters given and for the initial condition given then you need only do the following.

(I take for granted that when you wrote t=40 you meant t=0. The system is autonomous so the starting value for t may as well be 0. Anything else is just confusing.)

restart;
sys:=D(x)(t)=a*x(t)-a*x(t)^2/k-b*x(t)*y(t), D(y)(t) = -beta*y(t)+c*x(t)*y(t);
params:=[a = .71780, beta = .3067, b = 0.2072e-1, c = 0.9e-4, k = 17000];
sol:=dsolve({eval(sys,params),x(0)=6000,y(0)=40},numeric);
plots:-odeplot(sol,[[t,x(t)],[t,100*y(t)]],0..100,size=[1000,300]); #Notice 100*y
sol(100);

################## Continuing with the dimensionless version ###########
However, if you would like to see how to get the same result from SYS in the previous exchange then continue from there with

eqs:={X=k/(a*T),T=1/beta,Y=beta/b,k=(a/c)*A,a=B*beta};
params:=solve(eqs,{T,X,Y,A,B});

paramsConc:=[a = .71780, beta = .3067, b = 0.2072e-1, c = 0.9e-4, k = 17000];
ABTXY:=eval(params,paramsConc);
#Here I include initial values for u and v as parameters:
res:=dsolve({SYS,u(0)=u0,v(0)=v0},numeric,parameters=[u0,v0,A,B]);
#The parameters in the present concrete case:
L:=subs(ABTXY,[6000/X,40/Y,A,B]); #x(0)=6000, y(0)=40.
#Setting the parameters:
res(parameters=L);
#Readying input for odeplot so that it actually plots x and y although as functions of tau:
input:=subs(ABTXY,[ [[tau,X*u(tau)],[tau,100*Y*v(tau)]],tau=0..100/T]); #Notice 100*y
plots:-odeplot(res,op(input),size=[1000,300]);
###########Appearing as functions of t ######
##You can change the tickmarks and the labels to make the graphs look like graphs of x(t) and 100*y(t) like this:
input:=subs(ABTXY,[ [[tau,X*u(tau)],[tau,100*Y*v(tau)]],tau=0..100/T,
          tickmarks=[[seq(i*10/T=i*10,i=0..10)],default]]);
plots:-odeplot(res,op(input),labels=["t","x,100*y"],size=[1000,300]);






@THAPELO Noticing the exponential behavior of A and wanting to compute the values that I1,I2,I3,I4,S approach at infinity, I tried replacing A(t) by AE(t) = exp(-(mu+mu)*t)*A(t) for convenience.

Because of the long exchange, for the sake of clarity I paste the full code:

restart;
Digits:=15:
Sys1:=diff(S(t),t)=(1-h0)*Lambda1-(b*(I1(t)+phi1*I2(t)+phi2*I3(t))/N(t)+mu)*S(t);
Sys2:=diff(I1(t),t)=h1*Lambda1-(b*(I1(t)+phi1*I2(t)+phi2*I3(t))/N(t))*S(t)-(mu+rho+delta)*I1(t);
Sys3:=diff(I2(t),t)=h2* Lambda1+f*delta*I1(t)-(mu+theta+delta)*I2(t);
Sys4:=diff(I3(t),t)=h3*Lambda1+(1-f)*delta*I1(t)-(mu+theta+delta)*I3(t);
Sys5:=diff(I4(t),t)=h4*Lambda1+theta*(I2(t)+I3(t))-(mu+rho)*I4(t); ########* after theta
Sys6:=diff(A(t),t)=rho*(I1(t)+I2(t)+I3(t)+I4(t))+(mu+nu)*A(t); #minus? at the last term?
PDEtools:-dchange({A(t)=exp((mu+nu)*t)*AE(t)},Sys6,[AE]);
Sys6E:=combine(isolate(%,diff(AE(t),t)));
## Notice that the system ({Sys1,Sys2,Sys3,Sys4,Sys5,Sys6E} is no longer autonomous.
# Parameters
params:={Lambda1=0.029,b=0.5,phi1=0.25,phi2=1.01,mu=0.02,rho=0.1,delta=0.1,
  f=0.85,theta=0.2,nu=0.33,h0=0.4,h1=0.08,h2=0.02,h3=0.06,h4=0.4};
paramsE:=params union {subs(params,N(t)=S(t)+I1(t)+I2(t)+I3(t)+I4(t)+AE(t)*exp((mu+nu)*t))};
SYSE:=eval({Sys1,Sys2,Sys3,Sys4,Sys5,Sys6E},paramsE);
##Notice that AE(0)=A(0), so AE(0)=15.
Soln:=dsolve(SYSE union {S(0)=65,I1(0)=25,I2(0)=20,I3(0)=30,I4(0)=35,AE(0)=15},numeric);
vars:=[AE, I1, I2, I3, I4, S];
plots:-odeplot(Soln,[seq([t,v(t)],v=vars)],t=0..100,legend=vars,size=[1000,300],thickness=3);
#### We now try to find the values that AE, I1, I2, I3, I4, S seem to approach by other means than through Soln
#Since N(t)-> infinity as t -> infinity we do:
eval([Sys1,Sys2,Sys3,Sys4,Sys5],N(t)=infinity);
evalindets(%,function,s->op(0,s));
solve(%,vars[2..6]);
eval(%,params);
subs(Soln(500),vars[2..6]=~vars[2..6](t));
## Notice the perfect agreement except for S which is close though.
## The reason is that S(t) decreases rather slowly towards its value at infinity, as exp(-mu*):
#We look at that
eval(Sys1,N(t)=infinity);
dsolve(%);
eval(%,params);
plots:-odeplot(Soln,[t,ln(S(t)-0.87)],t=100..200);
#The slope ought to be -mu = -1/50 which appears correct.

@THAPELO Please notice that I edited the reply above.

@THAPELO Substituting parameters first helps make the two solutions look much less complicated:

Although not necessary for solve I use the opportunity to replace A(t) by A, I1(t) by I1, etc. by the use of evalindets:

eqs:=evalindets( eval(rhs~({Sys1,Sys2,Sys3,Sys4,Sys5,Sys6}),params),function,x->op(0,x));
solve(eqs,{A,S,I1,I2,I3,I4});

pts:=map(subs,[%],[A,S,I1,I2,I3,I4]); #lower case m in map.

You got 2 equilibrium points none of which consists entirely of nonnegative values. Irrelevant?

However, notice that A(t) grows exponentially with t as exp((mu+nu)*t) in fact.

But the other functions appear to approach positive values as t -> infinity. Try plotting those only (i.e. don't include A(t)).





 

@aureux A and B are given by params as found above (now with g=0) . Thus if the original parameters a,b,c, ... are given, then A and B are determined. But during an investigation of the properties of the system (with a,b,c,.. not given) you can give them any value consistent with the assumptions made in the change of variables: a,b,k,beta all positive. The assumption c>=0 has nothing to do with that, but the wolves are sure going to die out if they don't profit from eating elk.
That implies A>=0 and B>0.


@aureux That looks good to me.

The advantage of making this change of variables from x,y,t to u,v,tau is that examining a system with only 2 parameters is easier than examining one with (now) 5 parameters.
The point being that the behaviors of sys and SYS are the same. Thus if you find that SYS has 3 equilibrium points, so does sys, and you can find the ones from the others.
The stability properties of those equilibrium points are the same: If the equilibrium point in the open first quadrant for SYS is asymptotically stable and a spiral point, so is the corresponding point for sys, etc.
After all (I guess) the question is: is the grey wolf - elk 'situation' in Yellowstone Park going to end in both species dying out, one of the two dying out, or can they coexist (not peacefully of course)?

@aureux Often people introduce dimensionless variables mostly because this usually will reduce the number of parameter (constants).
There is no unique way of doing this. I indicate a method below that uses dchange from the PDEtools package.
I replaced alpha with a, but otherwise didn't change names of constant in sys below.

The idea is make the substitutions x(t)= X*u(tau),y(t)=Y*v(tau), t=T*tau  thereby introducing also a new time tau. The 3 constants X,Y,T should be chosen so as to reduce the number of parameters. After all you have a,b,c,k,g,beta, i.e. 6 constants.
You can reduce that number to 2.
Suppose all your 6 parameters are nonnegative by assumption and suppose further that a>0, b>0, k>0, beta+g > 0, then the changes actually made below make sense. By that I mean that you don't want X,Y, or T to be zero (or negative even).

sys:=D(x)(t)=a*x(t)-a*x(t)^2/k-b*x(t)*y(t)-g*x(t), D(y)(t) = -beta*y(t)+c*x(t)*y(t)-g*y(t);

PDEtools:-dchange({x(t)=X*u(tau),y(t)=Y*v(tau),t=T*tau},{sys},[tau,u,v]);

solve(%,{diff(u(tau),tau),diff(v(tau),tau)});
SYS1:=collect(%,[u,v],distributed,factor);
## Now you can choose the constants X,Y,T the way you wish
## I did as follows
eval(SYS1,X=k/(a*T)); #Here you use that a>0 and k>0
eval(%,T=1/(beta+g)); #Here you use that beta+g>0
eval(%,Y=(beta+g)/b); #Here you use that b>0 and beta+g>0
eval(%,k=(a/c)*A); #Actually just introducing a simplifying parameter A
SYS:=op(eval(%,a-g=B*(beta+g))); # Introducing a simplifying parameter B
#The replacements made:
eqs:={X=k/(a*T),T=1/(beta+g),Y=(beta+g)/b,k=(a/c)*A,a-g=B*(beta+g)};
## To be able to get back and forth between sys and SYS we need these:
params:=solve(eqs,{T,X,Y,A,B});

From our assumptions it follows that A>=0, but B is just real.

@Yiannis Galidakis What do you want to happen here?

plot3d(x^2+y^2,x=-1..1,y=-1..1); p1:=%:
plot3d(x^2+y^2,x=-2..2,y=-2..2); p2:=%:
plots:-display(p1,p2,insequence);

########

Something like this?

f:=(x,y)->x^2+y^2;
plot3d(f,-1..1,-1..1); p1:=%:
plot3d((x,y)->f(x*2,y*2),-1..1,-1..1); p2:=%:
plots:-display(p1,p2,insequence);

@THAPELO There are a few misspellings and one syntax error:

(1) phi1 is spelled as ph1 in params.

(2) Sys1, Sys2 etc. are spelled sys1,sy2 in dsolve.

(4) a multiplication sign is missing in Sys5 right after theta.

Besides that you obviously have to include the information abut the meaning of N(t). This can be done simply by including it in params:

params:={Lambda1=0.029,b=0.5,phi1=0.25,phi2=1.01,mu=0.02,rho=0.1,delta=0.1,
f=0.85,theta=0.2,nu=0.33,h0=0.4,h1=0.08,h2=0.02,h3=0.06,h4=0.4,
  N(t)=S(t)+I1(t)+I2(t)+I3(t)+I4(t)+A(t)};

After that it works for me.


@Carl Love I believe you are wrong, see the example below. I remember reading about the change from rk4 to rkf45 some years ago and then thought the same as you are expressing.
However, I soon discovered that it does matter:

restart;
p1:=DEtools[DEplot](diff(x(t),t)=sin(x(t))+sin(t),x(t),t=0..100,[x(0)=0],linecolor=blue,arrows=none):
plots:-display(p1,size=[1000,200]);
p2:=DEtools[DEplot](diff(x(t),t)=sin(x(t))+sin(t),x(t),t=0..100,[x(0)=0],linecolor=blue,arrows=none,stepsize=0.1):
plots:-display(p2,size=[1000,200]);

Since the help page for DEplot doesn't mention the effect of stepsize even in the default case (rkf45) I shall suggest (via an SCR) that the help page be updated.

First 125 126 127 128 129 130 131 Last Page 127 of 231