function [f1,f2] = tfunc2a(x,a,b) 
% Funktion mit drei Input-Variablen und zwei Output-Variablen.
% Setzen von Default-Werten.
% 
% Berechnet die Funktionen f1(x) = a * x^2 * sin(x)
%                          f2(x) = a * x^2 * sin(x) + b * x
%  
% Aufruf: [f1,f2] = tfunc2a(x,a,b) 
% Input:  x   double array 
%         a   double scalar, optional, default a=1
%         b   double scalar, optional, default b=2
% Output: f1  double array   f1 = a * x.^2 .* sin(x)
%         f2  double array   f2 = a * x.^2 .* sin(x) + b * x

% Die Variable nargin enthaelt nach dem Aufruf der Funktion 
% tfunc2a die Anzahl der übergebenen Input-Variablen. Die 
% Variable nargout enthält die Anzahl der Output-Variablen.
% 
% z.B.:  [r1,r2] = tfunc2a([1:10],3,4) => nargin=3, nargout=2
%         r1     = tfunc2a([1:10],3)   => nargin=2, nargout=1
%                  tfunc2a             => nargin=0, nargout=0
%
% Diese Variablen kann man nun zum Steuern des Verhaltens der 
% Funktion, zum Setzen von Defaultwerten und zur Entscheidung, 
% welche Output-Variablen berechnet werden sollen, verwenden.
  
% Der Befehl isempty(a) überprüft ob die Variable a eine 
% leeres Array [] ist. Damit kann man auch den Defaultwert von 
% a verwenden, obwohl man b eingibt: 
% z.B.:  [r1,r2] = tfunc2a([1:10],[],4)
  if nargin<1, error('Aufruf: [f1,f2]=tfunc2a(x,a,b)'); end
  if nargin<2,   a = 1; end, if isempty(a), a = 1; end
  if nargin<3,   b = 2; end, if isempty(b), b = 2; end
  f1 = a * x.^2 .* sin(x);
  if nargout>1, f2 = f1 + b * x; end