disp ('обозначения численности: (Например: next_p = p+1.8*p*(1-p/10) )')
next_p=input ('next_p = ','s');
if isempty(next_p) next_p='p+1.8*p*(1-p/10)'; end;
eval( [next_p ';']); % проверяемая формула
%
disp (' ');
disp (' Введите верхний и нижний пределы значения численности в момент времени t,')
disp ('чтобы задать границы изображения на графике:')
limits=input('(По умолчанию [pmin pmax]=[0 20]) [pmin pmax]= ');
if isempty(limits) limits=[0 20]; end;
pinc=(limits(2)-limits(1))/50;
x=limits(1):pinc:limits(2);
%
p=limits(1); y=eval (next_p);
for i=x(2):pinc:limits(2); % цикл для создания вектора значений P
p=i;
p=eval (next_p);
y=[y p];
end;
%
figure % настройка графика
plot(x,y,x,x)
axis([limits(1),limits(2),limits(1),limits(2)]);
xlabel ('P_t');
ylabel ('P_{t+1}');
title (['следующее\_p=',next_p]);
%
continueb=1; % логическое значение продолжения цикла
while continueb % цикл пока кнопку не нажали
[p,q,button]=ginput(1); % получить начальную численность
if button==1
%
plot (x,y,x,x); % построение графика
axis([limits(1),limits(2),limits(1),limits(2)]);
hold on
xlabel ('P_t');
ylabel ('P_{t+1}');
title (['следующее\_p=',next_p]);
%
for i=1:50; % цикл построения секций паутины
w=p;
p=eval (next_p);
plot([w,w],[w,p],'k','EraseMode','none'); % рисуем вертикальный фрагмент
pause(.1);
if p<0; break; end; % фильтрация отрицательных значений P
plot([w,p],[p,p],'k','EraseMode','none'); % рисуем горизонтальный фрагмент
pause(.1);
end;
hold off;
else continueb=0; % конец цикла