Resolve Error: Size Mismatches
Issue
The code generator produces size mismatch errors when array sizes are incompatible or implicit expansion is unavailable.
Most binary operators and functions in MATLAB® and generated code support numeric arrays that have compatible sizes.
Two inputs have compatible sizes if, for every dimension, the sizes of the inputs
are either the same or one of them is 1
. In the simplest cases,
two array sizes are compatible if they are exactly the same or if one is a scalar.
For example:
magic(4) + ones(4,1); % where magic(4) = ones(4,1) = % 16 2 3 13 1 % 5 11 10 8 1 % 9 7 6 12 1 % 4 14 15 1 1
ans = 17 3 4 14 6 12 11 9 10 8 7 13 5 15 16 2
The second array implicitly expands to match the dimensions of the first matrix. For more information, see Compatible Array Sizes for Basic Operations.
Implicit expansion might be unavailable while performing binary operations on arrays of compatible size if any of the following conditions are true :
Your function scope includes the
coder.noImplicitExpansionInFunction
(MATLAB Coder) function.You use the
coder.sameSizeBinaryOp
(MATLAB Coder) function to carry out the binary operation.You turn off implicit expansion for your project.
Size mismatches or unavailability of implicit expansion generates the following error:
%Size mismatch between two arrays Size mismatch (size [10][1] ~= size [1][10])
When the above conditions are true for structure fields and cell elements, the code generator produces the following errors respectively:
%Size mismatch in structure fields Size mismatch (size [10][1] ~= size [1][10]) in field StructField %Size mismatch in cell elements Size mismatch (size [10][1] ~= size [1][10]) in element cellElement.
Possible Solutions
Verify that, in binary operations where you enable implicit expansion, the operations are in the scope of functions. Check for these conditions:
Array size compatibility.
Binary operations in the scope of functions that call
coder.noImplicitExpansionInFunction
(MATLAB Coder).coder.sameSizeBinaryOp
(MATLAB Coder) does not implicitly expand its operands or support scalar expansion.If you have turned off implicit expansion for the whole project, all operations that require implicit expansion generate an error.
Perform Binary Operations on Arrays of Compatible Sizes
If you must carry out a binary operation on arrays of differing sizes, make sure that sizes are compatible and implicit expansion is enabled in the function scope. See Compatible Array Sizes for Basic Operations.
Call Binary Operation Without coder.noImplicitExpansionInFunction
If you must include coder.noImplicitExpansionInFunction
in your function, call the required binary operation in another function where
implicit expansion is enabled.
Call Binary Operation Without coder.sameSizeBinaryOp
If you do not want implicit expansion for a specific operation, provide input
arguments that are of same size to coder.sameSizeBinaryOp
(MATLAB Coder).
coder.sameSizeBinaryOp
does not allow scalar expansion
and generates an error if the input arguments are not of the same size.
Enable Implicit Expansion for Project
If enabling implicit expansion does not
affect your project, consider enabling it by
setting the EnableImplicitExpansion
property in your code
configuration object to true
.
If you need implicit expansion for specific operations, consider using
coder.sameSizeBinaryOp
or
coder.noImplicitExpansionInFunction
to prevent the
other operations from implicitly expanding. See Optimize Implicit Expansion in Generated Code (MATLAB Coder).
See Also
coder.noImplicitExpansionInFunction
(MATLAB Coder) | coder.sameSizeBinaryOp
(MATLAB Coder)