% CVICENI - 4

%-------------------------------------------------------------------------%
% WHILE a FOR CYKLY

% ODKOMENTUJ A VYZKOUSEJ-------
% while-cyklus, co je spatne ???
% cislo = input('zadej číslo ')
% soucet = cislo;
% while cislo ~= 0
%    soucet = soucet + cislo;
% end
% ODKOMENTUJ A VYZKOUSEJ-------


% Newtonova metoda, f(x) = 0
% Tayloruv rozvoj z x0: f(x0) + f'(x0)*(x-x0) = 0

% Dostaneme: x = x0 - f(x0)/f'(x0)
% Postup: zvolime odhad x0, spocitame x, polozime x=x0 a opakujeme,
% dokud neni rozdil |x-x0| dostatecne maly

% Co musi byt splneno ???

% realizace:
x0 = 5;         % zvolime pocatecni odhad
error = 1e10;   % nastavime chybu na velke cislo
tol = 1e-05;    % nastavime toleranci, s jakou chceme spocitat reseni

while error > tol        % dokud je chyba > tolerance opakuj...
 x = x0 - f(x0)/df(x0);  % spocitame nove x
 error = abs(x-x0);      % spocitame chybu
 x0 = x;                 % nakonec nastavime novou hodnotu x0 <- x
end

disp(x);
% overeni spravnosti y = f(x) = 0:
y = x^3 + 5*x^2 + 5 % primo
f(x)                % pomoci jiz deklarovane funkce f


% Vizualizace reseni
A = -10;    % leva hranice intervalu
B =  10;    % prava hranice intervalu
d =  1000;  % pocet deleni intervalu

X = linspace(A,B,d); % rozdeleny interval

x0 = 3;
error = 1e10; 
tol = 1e-05;
fig = figure(1);

while error > tol

 hold on;                   % tisk do jednoho grafu bez prepisu
 grid on;
 ylim([-50,100]);           % omezeni rozsahu hodnot
 plot(X,f(X),'b')           % funkce f(x)
 plot([A,B],[0,0],'r')      % osa x
 y = df(x0)*(X-x0) + f(x0); % primka
 x00 = x0-f(x0)/df(x0)      % bod kde primka protne osu x
 plot(x0,f(x0),"r*")        % zobraz bod [x0,f(x0)], (cervena = r, * = symbol)
 plot(x00,0,'*')            % zobraz bod [x00,0]
 plot(X,y)                  % zobraz primku (v intervalu X)
 hold off;                  % zastavi tisk do jednoho grafu bez prepisu

 pause(2);
 clf(fig);

 % samotny vypocet
 x = x0 - f(x0)/df(x0);  
 error = abs(x-x0);     
 x0 = x;              
end

%Eratosthenovo sito - prvocisla
%-------------------------------------%
N = input('Enter your number: ');

primes = 1:N;
p=2;

while (p <= N)
    for i = 2*p:p:N
        primes(i) = 0;
    end;
    p = p + 1;
end

%primes = primes(primes > 0)

% or better
primes_01 = primes(2:end)
primes_01 = primes_01(primes_01 > 0)
%-------------------------------------%




%%%%%%% FUNKCE %%%%%% (Na konci skriptu !!)
function y = f(x)
    y = x.^3 + 5*x.^2 + 5;
end

function y = df(x)
    y = x.*(3*x + 10);
end

%%% Priklad fce se 2 parametry:
% A = F(4,5,6)
% 
% function F = F(x,y,z)
%     F = x*y*z;
% end

