function Y=logistic_map(X,r,length,trans)
% LOGISTIC_MAP Logistic map (дискретна система першого порядку):
%
%    x(k+1) = a*x(k) - b*x(k)^2
%    x(k+1) = r*x(k)*(1-x(k))
%
%    Використано друге рівняння.
%
%    Y=logistic_map(X,r,length,trans)
%    Вхідні дані:
%       X      - початкове значення змінної (0 < X < 1)
%       r      - параметр (default r=2)
%       length - кількість значень, що необхідно згенерувати (default 1000)
%       trans  - кількість значень, що необхідно пропустити (default 0)
%    Вихідні дані:
%       Y      - вектор-стовпчик значень
%
% (c) Сердюк О., 19.11.2006

% обробка параметрів
if (nargin==0)                          % обидва параметри не задано
    disp('  Не вистачає параметрів!');
    help logistic_map
    return
elseif (nargin==1)                      % задано лише початкове значення
    r=2; length=1000; trans=0;
elseif (nargin==2)
    length=1000; trans=0;
elseif (nargin==3)
    trans=0;
end

% перевірка початкового значення
% беремо лише перше число, якщо передано вектор
if (X(1)==0) x=0.1;
elseif (abs(X(1))>=1) x=0.9;
else x=X(1);
end

% пропускаємо перші trans значень
for i=1:trans x=r*x*(1-x); end

% обраховуємо значення
Y=zeros(length,1);
Y(1)=x;
for i=2:length
    Y(i)=r*Y(i-1)*(1-Y(i-1));
end
