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