主要内容

工具箱函数代码生成的可变大小限制

常见的限制

以下常见限制适用于多个工具箱函数,但仅适用于代码生成。要确定哪些限制适用于特定的库函数,请参阅对可变大小数据有限制的工具箱函数

变长矢量限制

库函数的输入必须是变长向量或固定大小的向量。变长向量是具有以下形状的变大小数组1 x: n:资料片(一个维度是可变大小的,另一个是固定大小为1)。其他形状是不允许的,即使它们在运行时是向量。

自动尺寸限制

此限制适用于将工作维度(操作所沿的维度)作为输入的函数。在MATLAB®在代码生成中,如果您没有提供工作维度,函数将选择它。在MATLAB中,函数选择大小不等于1的第一个维度。对于代码生成,该函数选择第一个具有可变大小或具有不等于1的固定大小的维度。如果工作维的大小是可变的,并且在运行时变为1,那么工作维与MATLAB中的工作维是不同的。因此,当启用运行时错误检查时,就会发生错误。

例如,假设X变大小矩阵是有维的吗1 x: 3 x: 5.在生成的代码中,总和(X)表现得像总和(X, 2).在MATLAB中,总和(X)表现得像总和(X, 2)除非大小(X, 2)是1。在MATLAB中,当大小(X, 2)是1,总和(X)表现得像总和(X, 3)

要避免此问题,可以显式地将预期的工作维度指定为常量值。例如,总和(X, 2)

Array-to-vector限制

当不是变长向量的变大小数组在运行时呈现向量的形状时,该函数将发出错误。为了避免这个问题,可以显式地将输入指定为变长向量,而不是变大数组。

Array-to-scalar限制

如果可变大小的数组在运行时假定标量值,则该函数将发出错误。要避免此问题,请将标量指定为固定大小。

对可变大小数据有限制的工具箱函数

下表列出了对可变大小数据具有代码生成限制的函数。有关这些函数的其他限制,以及代码生成支持的所有函数和对象的限制,请参见金宝appC/ c++代码生成支持的函数和对象金宝app

函数 对可变大小数据的限制
所有

  • 看到自动尺寸限制

  • 如果向第一个参数传递一个在运行时为0 × 0的可变大小矩阵,则会发生错误。

任何

  • 看到自动尺寸限制

  • 如果向第一个参数传递一个在运行时为0 × 0的可变大小矩阵,则会发生错误。

  • Dimension参数必须是常量。

conv

  • 看到变长矢量限制

  • 输入向量必须有相同的方向,无论是行向量还是列向量。

交叉

  • 在运行时成为向量的可变大小数组输入必须具有相同的方向。

deconv

去趋势

诊断接头

diff

  • 看到自动尺寸限制

  • 当输入是可变尺寸时,工作尺寸的长度必须大于差阶输入。例如,如果输入是一个在运行时为3 × 5的可变大小矩阵,diff (x, 2, - 1)但工作diff (x 5 - 1)生成一个运行时错误。

fft

过滤器

histc

传输线

ind2sub

  • 第一个输入(大小向量输入)必须是固定的大小。

interp1

interpft

ipermute

  • 订单输入必须是固定大小。

issorted

魔法

  • 参数必须是常数。

  • 输出只能是固定大小的矩阵。

马克斯

maxk

的意思是

  • 看到自动尺寸限制

  • 如果在运行时传递一个0乘0的可变大小矩阵作为第一个参数,则会发生错误。

中位数

  • 看到自动尺寸限制

  • 如果在运行时传递一个0乘0的可变大小矩阵作为第一个参数,则会发生错误。

最小值

模式

  • 看到自动尺寸限制

  • 如果在运行时传递一个0乘0的可变大小矩阵作为第一个参数,则会发生错误。

mtimes

考虑乘法A * B.如果代码生成器知道这一点一个是标量和B是矩阵,则代码生成器生成用于标量矩阵乘法的代码。但是,如果代码生成器知道一个而且B都是可变大小的矩阵,它生成的代码用于一般矩阵的乘法运算。在运行时,如果一个结果是标量,生成的代码不会改变其行为。因此,当启用运行时错误检查时,可能会发生大小不匹配错误。

nchoosek

  • 第二个输入,k,必须是固定大小的标量。

  • 第二个输入,k,必须为常数进行静态分配。如果启用动态分配,第二个输入可以是一个变量

  • 你不能通过传入一个变量来创建一个可变大小的数组,k除非您启用动态分配

交换

  • 订单输入必须是固定大小。

planerot

  • 输入必须是一个固定大小的两元素列向量。它不能是在运行时采用2 × 1大小的可变大小数组。

polyfit

刺激

  • 看到自动尺寸限制

  • 如果在运行时传递一个0乘0的可变大小矩阵作为第一个参数,则会发生错误。

兰德

  • 对于一个上界变量N兰特(1,N)的变长向量1 x: M在哪里上界开了吗N

  • 对于一个上界变量N兰德(N [1])可以产生一个变长矢量: 1 x: M在哪里上界开了吗N

兰迪

  • 对于一个上界变量N兰迪(imax 1 N)的变长向量1 x: M在哪里上界开了吗N

  • 对于一个上界变量N兰迪(imax, N [1])可以产生一个变长矢量: 1 x: M在哪里上界开了吗N

randn

  • 对于一个上界变量Nrandn (1, N)的变长向量1 x: M在哪里上界开了吗N

  • 对于一个上界变量Nrandn (N [1])可以产生一个变长矢量: 1 x: M在哪里上界开了吗N

重塑

  • 如果输入是一个可变大小的数组,而输出数组至少有一个固定长度的维度,则不要在size向量中指定输出维度的大小深圳.相反,将输出维度大小指定为标量值,sz1,…,szN.将固定大小的维度指定为常量。

  • 当输入是一个可变大小的空数组时,输出数组(也是空数组)的最大维度大小不能大于输入数组的最大维度大小。

shiftdim

  • 如果不提供第二个参数,则移位数在编译时由维度大小的上界确定。因此,在运行时,移位的数量是恒定的。

  • 如果移到第一个维度的维度在运行时的长度为1,则会发生错误。为了避免错误,提供移位数作为第二个输入参数(必须是常量)。

  • 当你提供一个正移位数时,第一个输入参数必须具有相同的维数。

排序

性病

  • 看到自动尺寸限制

  • 如果在运行时传递具有0 × 0维的可变大小矩阵,则会发生错误。

sub2ind

  • 第一个输入(大小向量输入)必须是固定的大小。

总和

  • 看到自动尺寸限制

  • 如果在运行时传递一个0乘0的可变大小矩阵作为第一个参数,则会发生错误。

trapz

  • 看到自动尺寸限制

  • 如果在运行时传递一个0乘0的可变大小矩阵作为第一个参数,则会发生错误。

定型

var

  • 看到自动尺寸限制

  • 如果在运行时传递具有0 × 0维的可变大小矩阵,则会发生错误。

vecnorm