Я не вижу ничего плохого в вашем коде как таковом.Но я думаю, что при создании рисунка есть некоторые тонкости, которые недостаточно хорошо объяснены в статье.
1) Ось S масштабируется (на этикетке написано «относительный»).Я считаю, что они масштабировали S на k_s.Я думаю, что вам также нужно масштабировать параметр p (установить p = p * k_s), иначе последний член в уравнении для E будет крошечным, и популяция E не уменьшится в течение требуемых временных масштабов.
2Я думаю, что они должны были установить некоторый нижний предел для E, чтобы избежать деления на 0. Вы можете видеть на рисунке, что сначала E-> 0, но в вашем уравнении для S, если бы это произошло, вы бы делили на 0 ирешатель не сходится.
Собрав их вместе, следующая небольшая модификация вашего кода даст результат, более похожий на тот, который показан в статье:
% System Parameters:
r_b = 1.52;
k_b = 355;
alph = 1.11;
bet = 43200;
r_e = 0.92;
k_e = 1;
p = 0.00195;
r_s = 0.095;
k_s = 25440;
% Scale p with k_s
p = p*k_s;
tspan = [0 50]; % [0 200];
init = [1e-16 0.075*k_s 1]; % [1 1 1];
[t, Y] = ode45(@(t,y) odefcn(t, y, r_b, k_b, alph, bet, r_e, k_e, p, r_s, k_s), tspan, init);
% To scale before plotting, so everything fits on a 0->1 y axis.
maxB = 500;
S_scale = k_s;
figure('Position', [200 200 1000 600]);
hold on;
plot(t,Y(:,1)/maxB,'b');
plot(t,Y(:,2)/(S_scale),'g');
plot(t,Y(:,3),'r');
ylim([0, 1]);
hold off;
box on;
legend({['Budworm Density, B / ', num2str(maxB)], 'Branch Density, S / 0.75', 'Foliage Condition, E'}, ...
'Location', 'eastoutside')
function dydt = odefcn(t, y, r_b, k_b, alph, bet, r_e, k_e, p, r_s, k_s)
% Place lower limit on E
E = max(y(3), 1e-5);
dydt = [ r_b*y(1)*(1 - y(1)/(k_b*y(2))) - bet*(y(1)^2/((alph*y(2))^2 + y(1)^2));
r_s*y(2)*(1 - (y(2)*k_e)/(k_s*E));
r_e*E*(1 - (E/k_e)) - p*y(1)/y(2)
];
end
Существует большая чувствительность к начальным условиям.
Дальнейшая настройка еще ближе приближает вас к исходной фигуре, но я не уверен, что это всего лишь взлом: в первом уравнении замените k_b * y (2) на просто k_b.Без этого плотность Будды становится слишком большой, прежде чем уменьшится.Новый участок ниже.