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;
この関数をコンパイルすると次のエラーが発生します。
??? Dimension 1 is fixed on the left-hand side
but varies on the right ...
このエラーを回避するにはいくつかの方法があります。
coder.varsize コンストラクトを追加することにより、行列 A の拡大を許可します。
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;
assert ステートメントを変更することで、行列 B のサイズを明示的に 3 行 3 列に制限します。
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;
明示的なインデックスを使い、B のサイズを 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;
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.