-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSingleSp_PtoODEfcn.m
More file actions
80 lines (56 loc) · 2.85 KB
/
SingleSp_PtoODEfcn.m
File metadata and controls
80 lines (56 loc) · 2.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
function xsol = SingleSp_PtoODEfcn(p,time,dt,x0,fcnname)
% p = set of parameters (open)
% time = time points
% x0 = initial value
% abx = abx values
% fcnname = functional form to use (string = 'logistic', 'logpoly','poly2', 'poly3')
t0 = time(1,1);
tf = time(end,1);
if strcmp(fcnname,'logistic')
dx = @(x) p(1).*x.*(1 - x./p(2));
elseif strcmp(fcnname,'logstatic')
dx = @(x) (p(1) - (p(2).*(p(3).^p(4)))./(p(5).^p(4) + p(3).^p(4))).*x.*(1 - x./p(6));
elseif strcmp(fcnname,'logpoly')
dx = @(x) p(1).*x + p(2).*x.^2;
elseif strcmp(fcnname,'poly2')
dx = @(x) p(1) + p(2).*x + p(3).*x.^2;
elseif strcmp(fcnname,'poly3')
dx = @(x) p(1) + p(2).*x + p(3).*x.^2 + p(4).*x.^3;
elseif strcmp(fcnname,'allee1')
dx = @(x) p(1).*x.*(1 - x./p(2)).*(x - p(3))./p(2);
elseif strcmp(fcnname,'allee2')
dx = @(x) p(1).*x.*(1 - x./p(2)).*(x./p(3) - 1);
elseif strcmp(fcnname,'allee3')
dx = @(x) p(1).*x.*(1 - x./p(2)).*(1 - (p(3) + p(4))./(x + p(4)));
elseif strcmp(fcnname,'random')
%dx = @(x) -p(1).*x + (p(1)/p(2)).*x + p(1).*x.^2 - (p(1)/p(2)^2).*x.^3;
dx = @(x) (-p(1)/p(2)).*x + (p(3)/p(2)).*x + (p(1)/p(2)).*x.^2 - (p(3)/p(2)^2).*x.^3;
elseif strcmp(fcnname,'logextraloss')
dx = @(x) p(1).*x.*(1 - x./p(2)) - p(3).*x;
elseif strcmp(fcnname,'logextralosscoop')
dx = @(x) p(1).*x.*(1 - x./p(2)) + p(4).*x.^2 - p(3).*x;
elseif strcmp(fcnname,'logextralosscoopabx')
dx = @(x) p(1).*x.*(1 - x./p(2)) + p(7).*x.^2 - (p(3).*(p(4).^p(5))./(p(6).^p(5) + p(4).^p(5))).*x;
elseif strcmp(fcnname,'logextralossabx')
dx = @(x) p(1).*x.*(1 - x./p(2)) - (p(3).*(p(4).^p(5))./(p(6).^p(5) + p(4).^p(5))).*x;
elseif strcmp(fcnname,'logextralossabxindep')
dx = @(x,a) p(1).*x.*(1 - x./p(2)) - (p(3).*(a.^p(4))./(p(5).^p(4) + a.^p(4))).*x;
elseif strcmp(fcnname,'logextralossAeff')
dx = @(x) p(1).*x.*(1 - x./p(2)) - (p(3).*((p(4)./x).^p(5))./(p(6).^p(5) + (p(4)./x).^p(5))).*x;
elseif strcmp(fcnname,'logextralossinoc')
dx = @(x) p(1).*x.*(1 - x./p(2)) - p(3).*x.^2;
elseif strcmp(fcnname,'logextralossallee')
dx = @(x) p(1).*x.*(1 - x./p(2)).*(x - p(3))./p(2) - p(4).*x;
%dx = @(x) (p(1).*x.*(1 - x./p(2)) - (p(3).*((p(4)./x).^p(5))./(p(6).^p(5) + (p(4)./x).^p(5))).*x).*(x - p(7))./p(2);
elseif strcmp(fcnname,'logextralossalleeabx')
dx = @(x) (p(1).*x.*(1 - x./p(2)) - p(4).*x).*(x - p(3))./p(2);
elseif strcmp(fcnname,'full')
dx = @(x) p(1).*x.*(1 - x./p(2)) - ((p(1)-p(3)).*(p(4)./p(5)).^(log(-p(1)./p(3))./log(p(5)./p(6))))./((p(4)./p(5)).^(log(-p(1)./p(3))./log(p(5)./p(6))) - (p(3)./p(1))).*x;
elseif strcmp(fcnname,'logextralossdelayabx')
% p = [r,k,l,A,h,A50,a,b]
%dx = @(x,a) (p(1).*x.^p(7)).*(1-x./p(2)).^p(8) - (p(3).*(p(4).^p(5))./(p(6).^p(5) + p(4).^p(5))).*x;
dx = @(x,a) (p(1).*x.^p(7)).*(1-x./p(2)) - (p(3).*(p(4).^p(5))./(p(6).^p(5) + p(4).^p(5))).*x;
end
[t,x] = odesolver(dt,t0,tf,x0,dx);
xsol = x';
end