function [f1,f2] = tfunc3a(f,x,a,b) 
% Funktion mit vier Input-Variablen und zwei Output-Variablen.
% Die Variable f dient dabei zur Fallunterscheidung.
% 
% Berechnet die Funktionen f1(x) = a * x^2 * f(x)
%                          f2(x) = a * x^2 * f(x) + b * x
%  
% Aufruf: [f1,f2] = tfunc3a(f,x,a,b)
% Input:  f   char   array,  {'sin', 'cos', 'tan', 'cot'}, 
%                    default 'sin'
%         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 .* f(x)
%         f2  double array   f2 = a * x.^2 .* f(x) + b * x

  if nargin<2, error('Aufruf: [f1,f2]=tfunc3a(f,x,a,b)'); end
  if isempty(f), f = 'sin'; end;
  if nargin<3, a = 1; end; if isempty(a), a = 1; end;
  if nargin<4, b = 2; end; if isempty(b), b = 2; end;
  
  % Die String-Variable f wird nun einerseits als Schalter, 
  % aber auch zur Konstruktion der Funktion verwendet.
  switch f
   case {'sin', 'cos', 'tan', 'cot'}
    % Zusammensetzen einer Zeichenkette [s1,s2,s3]
    e_string = ['a * x.^2 .* ',f,'(x)'];
    disp(['Berechnung mit: ',e_string]);
    % Mit eval kann man den Inhalt einer Zeichenkette als 
    % Kommando ausführen. 
    % z.B.: f = eval('3*x+2'); equivalent mit f = 3*x+2;
    f1 = eval(e_string);
   otherwise
    error(['Fall ',f,' nicht erlaubt!']);
  end
  if nargout>1, f2 = f1 + b * x; end