このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
エラーの解決: 配列のサイズに互換性がない
問題
次のいずれかの場合に、コード ジェネレーターで配列サイズ非互換性エラーが生成されることがあります。
コード ジェネレーターで以前に固定サイズとして定義された変数のサイズがコードによって変更される場合。このタイプのエラーは、変数に値を代入するとき、関数に変数を渡すとき、または関数から変数を返すときに発生する可能性があります。
サイズに互換性がない 2 つの配列に対してコードによって演算が実行される場合。あるいは、サイズに互換性がある 2 つの配列に対してコードによって演算が実行されるが、暗黙的な拡張が無効な場合。
このような場合は、コード ジェネレーターで次のいずれかのエラーが発生します。
配列のサイズに互換性がありません。
要素 '
element
' の配列のサイズに互換性がありません。
フィールド '
field
' の配列のサイズに互換性がありません。
配列のサイズに互換性がないため、この演算を実行できません。
考えられる解決策
コード ジェネレーターでエラーが発生するのが変数の代入時か二項 (2 つの配列) 演算時かに応じて、次のいずれかの解決策を試してください。
coder.varsize
を使用して変数のサイズ変更を許可するようにコード ジェネレーターに指示する
変数に値を代入するとき、別の関数に変数を渡すとき、または関数から変数を返すときにエラーが発生する場合は、コード ジェネレーターで以前に固定サイズとして定義された変数のサイズがコードによって変更されている可能性があります。この場合、coder.varsize
を使用して変数のサイズ変更を許可するようにコード ジェネレーターに明示的に指示します。コード生成時のサイズ非互換性エラーへの対処を参照してください。
コード生成用に MATLAB® コードで可変サイズの配列を使用する方法の詳細については、可変サイズの配列のコード生成を参照してください。
互換性のあるサイズの配列に対する二項演算の実行
二項演算時にエラーが発生する場合は、コードにサイズ非互換性の問題がないかを確認します。
MATLAB の二項演算子および関数のほとんどは、互換性のあるサイズをもつ数値配列をサポートします。各次元で入力のサイズが同じであるか、いずれかの次元が 1
である場合、2 つの入力のサイズには互換性があります。MATLAB は、要素単位の演算または関数の実行時、サイズに互換性のある配列を暗黙的に拡張して同じサイズにします。基本的な演算で互換性のある配列サイズを参照してください。
既定では、コード ジェネレーターは、互換性のあるサイズの配列に対する暗黙的な拡張と二項演算をサポートします。ただし、次の条件のいずれかが当てはまる場合、コード ジェネレーターでサイズ非互換性エラーが生成されます。
サイズに互換性がない 2 つの配列に対してコードによって演算が実行される場合。このコードは MATLAB の実行でもエラーになります。
サイズに互換性がある 2 つの配列に対してコードによって演算が実行されるが、暗黙的な拡張が無効な場合。
このエラーを解決するには、まず MATLAB でコードを実行して、二項演算の配列のサイズに互換性があることを確認します。コード生成の前に、MATLAB でコードを正常に実行します。
MATLAB でコードが正常に実行されるにもかかわらず、コード ジェネレーターでサイズ非互換性エラーが生成される場合は、暗黙的な拡張が無効になっている可能性があります。コードでの暗黙的な拡張の無効化方法に応じて、次のいずれかの解決策を試してください。
coder.sameSizeBinaryOp
を使用して関数で暗黙的な拡張を無効にしている場合は、この関数に渡す入力が同じサイズであることを確認します。coder.noImplicitExpansionInFunction
命令を使用して関数で暗黙的な拡張を無効にしている場合は、関数のすべての二項演算が同じサイズの入力に対して実行されることを確認します。あるいは、暗黙的な拡張を無効にしていない別の関数でこれらの演算を実行します。[コード構成] ダイアログ ボックスまたはコード構成オブジェクトを使用して暗黙的な拡張をグローバルに無効にしているものの、特定の関数および演算でのみ暗黙的な拡張を回避する必要がある場合は、暗黙的な拡張をグローバルに再度有効にします。その後、
coder.sameSizeBinaryOp
またはcoder.noImplicitExpansionInFunction
を使用して特定の関数または演算で暗黙的な拡張を無効にします。
生成コードでの暗黙的な拡張の最適化を参照してください。
参考
coder.varsize
| coder.noImplicitExpansionInFunction
| coder.sameSizeBinaryOp