You cannot assign variable-size matrices to fixed-size matrices in
generated code. Consider this
example:

function Y = example_mismatch1(n) %#codegen
assert(n < 10);
B = ones(n,n);
A = magic(3);
A(1) = mean(A(:));
if (n == 3)
A = B;
end
Y = A;

Compiling this function produces this error:

??? Dimension 1 is fixed on the left-hand side
but varies on the right ...

There are several ways to fix this error:

Allow matrix A to grow by adding the
coder.varsize
construct:

function Y = example_mismatch1_fix1(n) %#codegen
coder.varsize('A');
assert(n < 10);
B = ones(n,n);
A = magic(3);
A(1) = mean(A(:));
if (n == 3)
A = B;
end
Y = A;

Explicitly restrict the size of matrix B to
3-by-3 by modifying the assert
statement:

function Y = example_mismatch1_fix2(n) %#codegen
coder.varsize('A');
assert(n == 3)
B = ones(n,n);
A = magic(3);
A(1) = mean(A(:));
if (n == 3)
A = B;
end
Y = A;

Use explicit indexing to make B the same
size as A:

function Y = example_mismatch1_fix3(n) %#codegen
assert(n < 10);
B = ones(n,n);
A = magic(3);
A(1) = mean(A(:));
if (n == 3)
A = B(1:3, 1:3);
end
Y = A;

If you assign an empty matrix [] to variable-size data,
MATLAB^{®} might silently reshape the data in generated code to match a
coder.varsize specification. For example:

function Y = test(u) %#codegen
Y = [];
coder.varsize('Y', [1 10]);
if u < 0
Y = [Y u];
end

In this example, coder.varsize defines
Y as a column vector of up to 10 elements, so its
first dimension is fixed at size 1. The statement Y = []
designates the first dimension of Y as 0, creating a
mismatch. The right hand side of the assignment is an empty matrix and the
left hand side is a variable-size vector. In this case, MATLAB reshapes the empty matrix Y = [] in
generated code to Y = zeros(1,0) so it matches the
coder.varsize specification.

Diagnosing and Fixing Errors in Detecting Upper Bounds

You can also select a web site from the following list:

How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.