function []=startawa(F,tspan,y0, zeichenart, koords)
% ======================================================================
% Loesen von Anfangswertaufgaben fuer gewoehnliche Differentialgleichungen
% 
%
% Erstellt fuer die Veranstaltung
% Weiterbildenes Studium fuer Ingenieure WS 98/99
%
% Helge Baumann, 25.8.1998, geaendert S.F.
% ----------------------------------------------------------------------
% Aurufparameter: 
%  F: Funktionsname der rechten Seite der Dgl.
%  tspan: [t0,tf] oder [t0,t1,t2,...,tf]
%  y0: [y1(0),y2(0),...,ym(0)]
%  zeichenart='pfeile'	mit Richtungsfeld nur fuer m=2 moeglich
%            ='ohne'    ohne Richtungsfeld, Projektionen y1-y2,y2-y3,...,ym-y1
%            ='drei'    drei Koordinaten zusammen, y1-y2-y3 
%            ='holdon'  nur fuer m=2, zeichnet die Kurve in das aktuelle 
%                    	Koordinatensystem. 
%            ='nur'    zeichnet das Koordinatensystem koords=[i,j], 0< i,j <=m
%            ='nurdrei' zeichnet das Koordinatensystem koords=[i,j,k], 
%						mit  0< i,j,k <=m
% ---------------------------------------------------------------------
% Rueckgabeparameter:
% ---------------------------------------------------------------------
% Programmvariablen:
% ======================================================================

% - - - - - Problemstellung, Standardeinstellungen - - - - - -

   % Startpunkt festlegen
   if nargin<3, y0=[0.2,0.3];end;
   m=length(y0);

   % Zeitspanne festlegen.
   if nargin<2, tspan=[0,100];end;
   if length(tspan)<2, error('tspan falsche Dimension');end;

   % Rechte Seite der Differentialgleichung 
   if nargin<1, F='raeuberbeute';end;

% - - - - - - - Angaben zur Zeichnung ueberpruefen - - - - - - 

 % Zeichenart festlegen
  if nargin<4, zeichenart=[];end;

  if isempty(zeichenart), 
   if m==2, zeichenart='pfeile';
   else, zeichenart='ohne';
   end;
  end;

 % gibt es die gewuenschte Zeichenart ueberhaupt

  zeinr=strmatch(zeichenart,...
           strvcat('pfeile','ohne','drei','holdon','nur','nurdrei'),'exact');
  if isempty(zeinr), 
	error(['''',zeichenart,''' ist keine zulaessige Zeichenart']);
  end;

 % Ist die Zeichenart bei der Dimension zulaessig.

  if (m<3) & (strcmp(zeichenart,'nurdrei')==1 | strcmp(zeichenart,'drei')), 
     error('Es gibt keine drei Komponenten zu zeichnen');
  end;
  if m~=2 & (strcmp(zeichenart,'pfeile') | strcmp(zeichenart,'holdon'))
    error(['''',zeichenart,''' nur fuer m=2 erlaubt.']);
  end;

 % 5. Komponente nur bei zeichenart='nur' und zeichenart='nurdrei' wichtig.

  if nargin<5 & (strcmp(zeichenart,'nur')==1 | strcmp(zeichenart,'nurdrei')==1),
      error('Kein zu reichnendes Koordinatensystem angegeben!')
  end;
  if strcmp(zeichenart,'nur')==1 & length(koords)~=2
     error(['Der 5. Parameter muss von der Art [i,j] sein, mit 0 < i,j < ',...
            num2str(m+1)])
  end;
  if strcmp(zeichenart,'nurdrei')==1 & (length(koords)~=3), 
     error(['Der 5. Parameter muss von der Art [i,j,k] sein, mit 0 < i,j,k < ',...
            num2str(m+1)])
  end;   

  if strcmp(zeichenart,'drei')==1 
     koords=[1,2,3];  %   es werden nur die ersten drei Komponenten gezeichnet
     zeichenart='nurdrei';
  end;

%=============================================================================
%		Ende der Vorarbeiten, Belegung und Prüfen der Variablen
%=============================================================================

%  -  -  -  -  -  -  Festlegen der Optionen:  -  -  -  -  -  -
%  z.B.:	
%    options=odeset('RelTol',10^(-3),'AbsTol',10^(-6));
options=odeset([]);

%  -  -  -  -  -  Aufruf des DGL Loesers  -  -  -  -  -  -  

%[T,Y,S] = ode23(F,tspan,y0,options);disp('ode23')
[T,Y,S] = ode45(F,tspan,y0,options);disp('ode45')
%[T,Y,S] = ode113(F,tspan,y0,options);disp('ode113')

%============================================================================
%		Nun zum Zeichnen:
%=========================================================================

[n,m]=size(Y);

if strcmp(zeichenart,'nurdrei'),
   i=koords(1);
   j=koords(2);
   k=koords(3);   
   odezei3(F, T,[Y(:,i),Y(:,j),Y(:,k)])
   title(['y_',num2str(i),'- y_',num2str(j),'- y_',num2str(k),...
           '- Koordinatensystem'])
   xlabel(['y_',num2str(i)]);
   ylabel(['y_',num2str(j)]);
   zlabel(['y_',num2str(k)]);
  
elseif strcmp(zeichenart,'nur')
   i=koords(1);
   j=koords(2);
   odezei2(F,T,[Y(:,i),Y(:,j)],'ohne')
   title(['y_',num2str(i),'- y_',num2str(j),'- Koordinatensystem'])
   xlabel(['y_',num2str(i)]);
   ylabel(['                y_',num2str(j)]);

else
  if m>2
    odezei2(F, T,[Y(:,m),Y(:,1)],zeichenart)
    title(['y_',num2str(m),'- y_',num2str(1),'- Koordinatensystem'])
    xlabel(['y_',num2str(m)]);
    ylabel(['                y_',num2str(1)]);
  end;
  for i=1:m-1
   if strcmp(zeichenart,'holdon'), hold on;
   else figure
   end;
   odezei2(F, T,[Y(:,i),Y(:,i+1)],zeichenart)
   title(['y_',num2str(i),'- y_',num2str(i+1),'- Koordinatensystem'])
   xlabel(['y_',num2str(i)]);
   ylabel(['                y_',num2str(i+1)]);
  end;
end;
disp(['erfolgreiche Schritte: ', num2str(S(1))]);
disp(['nicht erfolgreiche Schritte: ', num2str(S(2))]);
disp(['Funktionsauwertungen: ', num2str(S(3))]);
disp('   ');
disp(['y(tf)=',num2str(Y(n,:))])

return;






