clc
format bank
disp('   ');
disp('                             >>>>>>>>>>>>>>>Darstellung gebrochenrationaler Funktionen<<<<<<<<<<<<<<<')
disp('   ');disp('   ');
disp('     Gegeben sei die Funktion:')
disp('   ');
disp('                               f(x)=   (x³+a1x²+a2x+a3)/(b1x²+b2x+b3)')
disp('   ');
%Eingabe der Koeffizienten
									a=input('Geben Sie die Werte der Koeffizienten im Zähler ein! Hinweis: [a1 a2 a3] ');
									b=input('Geben Sie die Werte der Koeffizienten im Nenner ein! Hinweis: [b1 b2 b3] ');
									x=-5:0.1:5;
									zaehler=(x.^3+a(1)*x.^2+a(2)*x+a(3));
									nenner=(b(1)*x.^2+b(2)*x+b(3));
                           y=(zaehler./nenner);
                           
                           Zcoeff=[1 a(1) a(2) a(3)];
      							null=roots(Zcoeff);
                           null=null(imag(null)==0);
                           Ncoeff=[b(1) b(2) b(3)];
      							pol=roots(Ncoeff);
                           %pol=pol(imag(pol)==0);
                           
                           luecke=roots(Ncoeff);
     								DL=(pol.^3+a(1)*pol.^2+a(2)*pol+a(3));
                           
disp(' ')
disp('(1) Wertetabelle');disp(' ')
disp('(2) Nullstellen');disp(' ')
disp('(3) Polstellen');disp(' ')
disp('(4) Definitionslücken');disp(' ')
disp('(5) Grafik');disp(' ')
disp('(6) Programm beenden');disp(' ')
auswahl= input('Eingabe einer Zahl: ','s');
while (auswahl ~= 0)
switch auswahl
   case '1'
      % Wertetabelle
      clc
      disp('      x          y')
      disp([x(:), y(:)])
      disp(' ')
      pause
      disp('(1) Wertetabelle');disp('(2) Nullstellen');disp('(3) Polstellen');disp('(4) Definitionslücken');disp('(5) Grafik');disp('(6) Programm beenden');disp(' ')
      auswahl= input('Eingabe einer Zahl: ','s');
   case '2'
      %Nullstellen berechnen
      clc
		disp('   ');
		disp('Nullstellen:')
		disp('   ');
      disp(null(:))
      pause
      disp('(1) Wertetabelle');disp('(2) Nullstellen');disp('(3) Polstellen');disp('(4) Definitionslücken');disp('(5) Grafik');disp('(6) Programm beenden');disp(' ')
      auswahl= input('Eingabe einer Zahl: ','s');
   case '3'
      %Polstellen
      clc
      disp('   ');
      if isreal(pol) & (pol.^3+a(1)*pol.^2+a(2)*pol+a(3)~=0)
         disp('Polstellen:')
         disp('   ');
      	disp(pol(:))
      else
      	disp('Es gibt keine Polstellen!')
   	end
   	disp('   ');
      pause
    	disp('(1) Wertetabelle');disp('(2) Nullstellen');disp('(3) Polstellen');disp('(4) Definitionslücken');disp('(5) Grafik');disp('(6) Programm beenden');disp(' ')
    	auswahl= input('Eingabe einer Zahl: ','s');
    case '4'
       %Definitionsluecken
      clc
      disp('   ');
      if DL==0													
         disp('Definitionslücke:')
         disp('   ');
         disp(luecke(:))
		else
 			disp('Es gibt keine Definitionslücken!')
    	end
    	disp('   ');
      pause
      disp('(1) Wertetabelle');disp('(2) Nullstellen');disp('(3) Polstellen');disp('(4) Definitionslücken');disp('(5) Grafik');disp('(6) Programm beenden');disp(' ')
      auswahl= input('Eingabe einer Zahl: ','s');
   case '5'
      %Grafikausgabe
      clc
      axis([-5,5,-5,5])
      plot(x,y)
      hold on
      plot(real(pol), 0, 'go')
      plot(real(null), 0, 'r+')
      %plot(real(pol), 0, 'bo')
		%plot(real(null), 0, 'r+')
		xlabel('X-Achse')
		ylabel('Y-Achse')
		title('Darstellung gebrochenrationaler Funktionen')
      grid on
      pause
      close
      disp('(1) Wertetabelle');disp('(2) Nullstellen');disp('(3) Polstellen');disp('(4) Definitionslücken');disp('(5) Grafik');disp('(6) Programm beenden');disp(' ')
      auswahl= input('Eingabe einer Zahl: ','s'); 
    case '6'
       auswahl=0;
       clc
otherwise
   auswahl=0;
   clc
   end
end