%
%  Schreiben Sie die Funktion checkParabel für eine Kurvendiskussion 
%    der Parabel y = a x 2 + b x + c, im x-Intervall [x1,x2], 
%    mit 100 Stützstellen.
%
%  Die Funktion berechnet die Nullstellen und Extrema der Funktion, 
%  mit Angabe des Typs (Minima / Maxima) und dem Check auf deren Existenz 
%  auf der reellen Achse (Funktion isreal).
%  Zeichnen Sie anschließend die Funktion und markieren Sie 
%  die berechneten Punkte.
%
%  >> checkParabel( 1,  0,  0, -2, 2 )
%  >> checkParabel( 1, -1, -1, -2, 2 )
%  >> checkParabel( 1,  0,  1, -2, 2 )
%
function checkParabel( a, b, c, x1, x2 )

    % Koeffizienten des Polynoms
    pol = [ a, b, c ]; 
    
    % Nullstellen
    nullst = roots( pol );
    % Ableitung und Extremum 
    d1 = polyder( pol );  
    extr = roots( d1 );  
    
    % y-Werte 
    x = linspace( x1, x2, 100 );
    y = polyval( pol, x );
    % Funktion zeichnen
    hold on 
    plot( x, y, 'b-' );
    
    % reelle Nullstellen ? 
    if( isreal( nullst(1) ) )
      if( nullst(1) >= x1 && nullst(1) <= x2 )
         % Einzeichnen 
         plot( nullst(1), 0, 'gs' );  
         fprintf( 'Nullstelle bei x = %.1f \n', nullst(1) );  
      else
         fprintf( 'Nullstelle bei x = %.1f, außerhalb \n', nullst(1) );  
      end 
    end
    if( isreal( nullst(2) ) )
      if( nullst(2) >= x1 && nullst(2) <= x2 )
         % Einzeichnen 
         plot( nullst(2), 0, 'gs' );  
         fprintf( 'Nullstelle bei x = %.1f \n', nullst(2) );  
      else
         fprintf( 'Nullstelle bei x = %.1f, außerhalb \n', nullst(2) );  
      end 
    end
    
    % Extremum, falls a nicht 0 ist 
    if( isreal( extr ) )
      d2 = polyder( d1 ); 
      kr = polyval( d2, extr ); 
      ye = polyval( pol, extr );
      
      if( kr < 0 ) 
         fprintf( 'Maximum bei x = %.1f \n', extr ); 
      else
         fprintf( 'Minimum bei x = %.1f \n', extr );           
      end

      % Einzeichnen 
      if( extr >= x1 && extr <= x2 )
         plot( extr, ye, 'rx' );
      end
    end
       
    hold off 
