function betaRes=findMinBeta(X,Y,alpha,beta,q);

% локалізуємо інтервал
addition=10;

% знаходимо значення Y при заданих параметрах
betaLeft=beta;
YLeft=qGaussian(X,q,betaLeft,alpha);

% шукаємо суму нев'язок
devLeft=getTailDeviation(Y,YLeft);

% збільшуємо beta і повторюємо
betaRight=betaLeft*addition;
YRight=qGaussian(X,q,betaRight,alpha);

% шукаємо суму нев'язок
devRight=getTailDeviation(Y,YRight);
devOld=devRight+1;

while (devRight<devLeft) && (abs(devRight-devOld)>0.001)
    betaRight=betaRight*addition;
    YRight=qGaussian(X,q,betaRight,alpha);
    devOld=devRight;
    devRight=getTailDeviation(Y,YRight);
end

% застосовуємо пошук на інтервалі (betaLeft,betaRight)
% методом ділення пополам до точності
epsylon=0.01;
while betaRight-betaLeft>epsylon
    beta1=betaLeft+(betaRight-betaLeft)/3;
    Y1=qGaussian(X,q,beta1,alpha);
    dev1=Y-Y1;
    dev1=sum(dev1.*dev1);
        
    beta2=betaRight-(betaRight-betaLeft)/3;
    Y2=qGaussian(X,q,beta2,alpha);
    dev2=Y-Y2;
    dev2=sum(dev2.*dev2);
        
    if dev1>dev2
        betaLeft=beta1;
    else
        betaRight=beta2;
    end
end

betaRes=(betaRight+betaLeft)/2;
