function [ xn, historie, i ] = DR( F, x0, gama, lambda, maxIter, zacDir, konDir, tolerance )
%Douglas-Rachfordův algortmus 
xn = x0;
historie =zeros(maxIter,1); %vektor pro ukládání hodnot objektivní funkce
i=1;
while 1
    yn = proxf2( F, xn, x0, zacDir, konDir);
    historie(i) = norm(yn,1); %výpočet hodnoty objektivní funkce pro danou iteraci
    xn = xn + lambda*(proxf1( yn, xn, gama ) - yn);
    if i>1 && (abs(historie(i-1)-historie(i)))/historie(i-1)<tolerance
        break %ukončení iterací pokud je rozdíl posledních dvou hodnot objektivní funkce vzhledem k poslední hodnotě menší než daná tolerance
    end
    if i==maxIter %ukončení algoritmu pokud je dosaženo maximálního počtu iterací
        break
    end
    i=i+1;        
end

end