Základy algoritmizace a programování

Petr Sváček, Luděk Beneš, Olga Majlingová
Ústav technické matematiky

Cviceni č. 8


Zde obsah cvičení jen v provizorní textové podobě, podrobněji viz MOODLE.
Numerické metodu řešení rovnice f(x) = 0.

Uvažujme spojitou funkci 𝑓(𝑥) na intervalu [a,b] a tato funkce má v daném intervalu nejméně jedno řešení rovnice 𝑓(𝑥)=0 nebo obecněji 𝑓(𝑥)=𝑎,𝑎∈ℝ. Uvažujme například funkci 𝑓(𝑥)=𝑥3−4𝑥2+8𝑥−4.

Zobrazte její graf pomocí příkazu plot, do stejného grafu zobrazte přímku 𝑦=𝑎

Z grafu odhadněte interval v kterém se nachází řešení uvažované rovnice 𝑓(𝑥)=𝑎

Pomocí metody půlení intervalů určete řešení rovnice se zadanou přesností např. epsilon = 10−6. Postup řešení graficky znázorněte.
Realizujte totéž pomocí metody sečen a metody regula falsi. Postup řešení graficky znázorněte.
Vyzkoušejte různé způsoby výpočtu numerické derivace. Jak se mění chyba které se dopustíte při použití různé volby h? Je chyba ovlivněna zaokrouhlovací chybou? Co je zaokrouhlovací jednotka?
Realizujte řešení rovnice 𝑓(𝑥)=0 pomocí Newtonovy metody. Postup řešení graficky znázorněte. Pro derivaci užijte přesný předpis. Vyzkoušejte jak se výsledky změní při použití numerické derivace.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
f = inline('x.^3 - 4 * x.^2 + 8 * x - 4'); 
x = -4:0.01:4; y = f(x);
a = 0;
l = plot(x,y,'k-', x, 0 * x + a, 'g'); 
set(l(1), 'LineWidth', 1);
set(l(2), 'LineWidth', 2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
epsilon = 1e-5;
a = -3; b = 4; fa = f(a); fb = f(b);
if (fa * fb > 0)
  disp('Chybne zadani! Predpoklad metody neni splnen!')
end
while (b - a) > epsilon,
     x  = ( a + b ) / 2;
     fx = f(x);
     if (fx <= 0)
        if (fa <= 0)
           a = x;
        else
           b = x;
        end
     else
       %% DOPLNTE!
     end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
h = 1 / 2^5;
h = 1e-6;
x = 5;
fx = (f(x + h) - f(x) ) / h
fx = (f(x) - f(x - h) ) / h
fx = (f(x + h) - f(x - h) ) / (2 * h)
fx = 0.8 * (f(x + h) - f(x - h) ) / (2 * h) + 0.2 * (f(x + 2 * h) - f(x - 2 * h) ) / (4 * h)
fx = 0.9 * (f(x + h) - f(x - h) ) / (2 * h) + 0.1 * (f(x + 2 * h) - f(x - 2 * h) ) / (4 * h)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%