主要内容

解决错误:数组大小不兼容

问题

代码生成器在以下任一情况下可能会生成数组大小不兼容性错误:

  • 您的代码更改了代码生成器先前定义为固定大小的变量的大小。当您为变量赋值、将变量传递给函数或从函数返回变量时,可能会发生此类错误。

  • 您的代码对大小不兼容的两个数组执行了运算。或者,您的代码对大小兼容的两个数组执行了运算,但禁用了隐式扩展。

在这些情况下,代码生成器会生成以下错误之一:

Arrays have incompatible sizes(数组大小不兼容)

Arrays in element 'element' have incompatible sizes(元素 'element' 中的数组大小不兼容)

Arrays in field 'field' have incompatible sizes(字段 'field' 中的数组大小不兼容)

Unable to perform this operation because the sizes of the arrays are incompatible(无法执行此运算,因为数组大小不兼容)

可能的解决方案

根据代码生成器是在变量赋值期间还是在二元(两个数组)运算期间生成错误,尝试以下解决方案之一。

使用 coder.varsize 指示代码生成器允许变量更改大小

如果错误发生在为变量赋值、将一个变量传递给另一个函数或从函数返回变量时,您的代码可以更改代码生成器先前定义为固定大小的变量大小。在这种情况下,请通过使用 coder.varsize (MATLAB Coder) 显式指示代码生成器允许变量更改大小。请参阅生成代码时解决大小不兼容性错误 (MATLAB Coder)

有关在 MATLAB® 代码中使用可变大小数组进行代码生成的详细信息,请参阅可变大小数组的代码生成 (MATLAB Coder)

对兼容大小的数组执行二元运算

如果错误发生在二元运算期间,请检查您的代码是否存在大小不兼容问题。

MATLAB 中的大多数二元运算符和函数都支持具有兼容大小的数值数组。如果对于每个维度,输入的大小相同或其中一个维度为 1,则两个输入具有兼容的大小。MATLAB 在执行按元素运算或函数期间会隐式扩展具有兼容大小的数组以使其大小相同。请参阅基本运算的兼容数组大小

默认情况下,代码生成器支持对具有兼容大小的数组进行隐式扩展和二元运算。但是,如果以下任一条件成立,代码生成器会生成大小不兼容性错误:

  • 您的代码对大小不兼容的两个数组执行运算。此代码在 MATLAB 执行中也会出错。

  • 您的代码对大小兼容的两个数组执行运算,但禁用了隐式扩展。

要解决此错误,请先在 MATLAB 中运行您的代码,以验证二元运算中的数组是否具有兼容大小。在生成代码之前,请确保您的代码在 MATLAB 中成功运行。

如果您的代码在 MATLAB 中成功运行,但代码生成器生成大小不兼容性错误,则可能禁用了隐式扩展。根据您的代码禁用隐式扩展的方式,请尝试以下解决方案之一:

  • 如果您通过使用 coder.sameSizeBinaryOp (MATLAB Coder) 在一个函数中禁用隐式扩展,请确保传递给此函数的输入大小相同。

  • 如果您通过使用 coder.noImplicitExpansionInFunction (MATLAB Coder) 指令在一个函数中禁用隐式扩展,请确保该函数中的所有二元运算都对相同大小的输入执行。或者,请在未禁用隐式扩展的另一个函数中执行这些运算。

  • 如果您通过“代码配置”对话框或使用代码配置对象以全局方式禁用了隐式扩展,但您只需防止某些函数和运算的隐式扩展,请以全局方式重新启用隐式扩展。然后,通过使用 coder.sameSizeBinaryOpcoder.noImplicitExpansionInFunction 禁用特定函数或运算的隐式扩展。

请参阅优化生成代码中的隐式扩展 (MATLAB Coder)

另请参阅

(MATLAB Coder) | (MATLAB Coder) | (MATLAB Coder)

主题