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