function [ALPHA,FALPHA]=MFDFAAlphaFTAUSpline(Q,TAUq,percFunction)
% Мультифрактальний DFA (MF-DFA) за статтею
% "Multifractal detrended fluctuation analysis of nonstationary time series"
% Визначення alpha та F(alpha)
% Аргументи:
%   Q          - вектор-рядок значень q
%   TAUq       - вектор-рядок значень tau(q)
% Результати:
%   ALPHA      - значення аргументів ALPHA
%   FALPHA     - значення функції F(alpha)
% Обмеження:
%

% визначимо кількість значень Q
[m,n]=size(Q);
% якщо Q має більше одного рядка - транспонуємо
if (m>1) Q=Q'; [m,n]=size(Q); end
% визначимо кількість значень TAUq
[m,n]=size(TAUq);
% якщо Q має більше одного рядка - транспонуємо
if (m>1) TAUq=TAUq'; [m,n]=size(TAUq); end
    
% виділяємо пам"ять для ALPHA та FALPHA
ALPHA=zeros(1,n-2);
FALPHA=zeros(1,n-2);
% знаходимо alpha
PP=spline(Q,TAUq);

% шукаємо похідні у кожній точці
for i=2:n-1
    % шукаємо значення двох точок біля даної за допомогою сплайнів
    X1=Q(1,i)-0.001;
    X2=Q(1,i)+0.001;
    Y1=ppval(PP,X1);
    Y2=ppval(PP,X2);
    % шукаємо коефіцієнт нахилу прямої
    ALPHA(1,i-1)=(Y2-Y1)*1000/2;
    FALPHA(1,i-1)=Q(1,i)*ALPHA(1,i-1)-TAUq(1,i);
end

% відбираємо лише необхідні значення
percFunction=abs(str2num(percFunction));
if (percFunction~=0)
    maxFALPHA=percFunction/100*max(FALPHA);
    [m,n]=size(FALPHA);
    FALPHA2=FALPHA; ALPHA2=ALPHA;
    FALPHA=[];      ALPHA=[];
    index=1;
    for i=1:n
        if (FALPHA2(1,i)>=maxFALPHA)
            FALPHA(1,index)=FALPHA2(1,i);
            ALPHA(1,index)=ALPHA2(1,i);
            index=index+1;
        end
    end
end

% очищуємо локальні змінні
clear m n X1 X2 Y1 Y2 PP i maxFALPHA FALPHA2 ALPHA2 index;