Matlab functions are called like C functions which can return matrices of various sizes:
>> A = rand(4)               % your results may vary
A =
    0.9501    0.8913    0.8214    0.9218
    0.2311    0.7621    0.4447    0.7382
    0.6068    0.4565    0.6154    0.1763
    0.4860    0.0185    0.7919    0.4057
>> detA = det( A )
d =
     0.1155
>> size( A )
ans =
     4     4
    Matlab functions are aware of how many variables the output is being assigned to. In the above examples,
Unlike most programming languages, a Matlab functions are aware of how many output, rand(4) and det(A) are being assigned to one variable, while size( A ) is not being assigned to any variables.
Using size as an example, the output can be assigend to zero, one, or two variables:
>> B = rand( 4, 7 );      % a 4 × 7 matrix
>> size( B )
ans =
     4     7
>> sizeB = size( B )
sizeB =
     4     7
>> [mB nB] = size( B )
mB =
     4
nB =
     7
    In the third example, the first variable is assigned the row dimension of B, and the second variable is assigned the column dimension.
Assigning to multiple outputs does not occur automatically:
>> C = [1 2; 3 4]
C =
     1     2
     3     4
>> [a b] = diag( C )
??? Error using ==> diag
Too many output arguments.
    In some cases, you can get more information out of a function if you assign the output to more than one variable. For example, the eigenvalue function eig returns a row vector of eigenvalues if the output is being assigned to zero or one variables, but it returns two matrices if the output is assigned to two variables:
>> D = [1 2; 3 4]
D =
     1     2
     3     4
>> evalD = eig( D )
evalD =
   -0.3723
    5.3723
>> [EvecD EvalD] = eig( D )    % note the eigenvalues are on the diagonal
EvecD =
   -0.8246   -0.4160
    0.5658   -0.9094
EvalD =
   -0.3723         0
         0    5.3723
    If the function is being called from within an expression, it is assumed that it is being assigned to zero variables:
>> length( eig( D ) )
ans =
     2