function ex06()
% Lösung von Aufgabe 6

%% b.
c  = 20;
m = 1;
l = 0.3;
g = 9.81;

f = @(x) 2*(c/m)*x.*(1 - l./sqrt(x.^2 + l^2)) - g;

% Plot für grobes Anfangsintervall
x = 0:0.01:1;
plot(x, f(x), x, 0*f(x))
x0 = 0;
x1 = 1;

format long
xBisektion = bisektion(f, x0, x1)
xSekante = sekante(f, x0, x1)
xMatlab = fzero(f, [x0 x1])

%% c.
c2  = 40;
m2 = 6;
l2 = 0.9;
g2 = 9.81;

alpha_b = m*g/(2*c*l)
alpha_c = m2*g2/(2*c2*l2)
y = xMatlab/l
x2 = y*l2

%% --------------------------------------------------------------------
function x = bisektion(f, x0, x1)
% berechnet eine Nullstelle der Funktion f im Intervall [x0, x1] mit
% Hilfe des Bisektionsverfahrens
% Voraussetzung: f nimmt an x0 und x1 verschiedene Vorzeichen an!

a = x0;
b = x1;
sa = sign(f(a));

while b - a > eps*abs(a)
  xm = (a + b)/2;
  sm = sign(f(xm)); 
  if sm == sa
    a = xm;
  else
    b = xm; 
  end
end

x = (a + b)/2;

%% --------------------------------------------------------------------
function x = sekante(f, x0, x1)
% berechnet eine Nullstelle der Funktion f im Intervall [x0, x1] mit
% Hilfe des Sekantenverfahrens
% Voraussetzung: x0 und x1 liegen hinreichend dicht an der Nullstelle...

xl = x0;
xll = x1;

while abs(xl - xll) > eps*abs(xl)
  m = (f(xll) - f(xl))/(xll - xl);
  x = xl - f(xl)/m;  
  xll = xl;
  xl = x;
end
