5.3.5 Funktionen mit variabler Zahl von Argumenten

Es gibt Situationen, in denen man die Zahl der Ein- oder Ausgabe-Parameter variabel haben will. Nehmen wir an, wir wollen die direkte Summe einer unbestimmten Anzahl von Matrizen bilden:

$\displaystyle A_1 \oplus A_2 \oplus\ \cdots\ \oplus A_m
=
\begin{pmatrix}
A_1 &...
... O \\
\vdots & \vdots & \ddots & \vdots \\
O & O & \cdots & A_m
\end{pmatrix}$

Wenn nur zwei Matrizen da wären, wäre die Lösung naheliegend.
     function C = dirsum2(A,B)
     %DIRSUM2 Direct sum of two matrices.
     %
     %     C = dirsum (A,B):   C = [A 0]
     %                             [0 B]
     
     % Peter Arbenz, Sep 8, 1989.
     
     [n,m] = size(A);
     [o,p] = size(B);
     C = [A zeros(n,p); zeros(o,m) B];
Das Benützen einer variable Anzahl von Argumenten unterstützt MATLAB durch die Funktionen varargin und varargout an. Diese kann man sich als eindimensionale Arrays vorstellen, deren Elemente die Eingabe-/Ausgabeargumente sind. In MATLAB werden diese Arrays, deren Elemente verschiedene Typen haben können cell arrays genannt, siehe Abschnitt 2.13. Hier müssen wir nur wissen, dass die Elemente eines cell arrays mit geschweiften statt mit runden Klammern ausgewählt werden. Die Lösung unseres kleinen Problems könnte somit so aussehen.
     function A = dirsum(A,varargin)
     %DIRSUM Direct sum of matrices
     %       C = dirsum(A1,A2,...,An)
     
     % Peter Arbenz, May 30, 1997.
     
     for k=1:length(varargin)
        [n,m] = size(A);
        [o,p] = size(varargin{k});
        A = [A zeros(n,p); zeros(o,m) varargin{k}];
     end
Hier wird das erste Argument als A bezeichnet, alle weiteren werden mit der Funktion varargin behandelt.
     >> a=[1 2 3]; b=ones(3,2);
     >> dirsum(a,b,17)

     ans =

          1     2     3     0     0     0
          0     0     0     1     1     0
          0     0     0     1     1     0
          0     0     0     1     1     0
          0     0     0     0     0    17



Peter Arbenz 2008-09-24