主要内容

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

常见的限制

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

变长向量限制

库函数的输入必须是可变长度的向量或固定大小的向量。变长向量是具有形状的变大小数组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限制

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

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

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

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

  • 看到自动尺寸限制

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

任何

  • 看到自动尺寸限制

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

  • 维度参数必须是常量。

conv

  • 看到变长向量限制

  • 输入向量必须具有相同的方向,要么是行向量,要么是列向量。

交叉

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

deconv

去趋势

诊断接头

diff

  • 看到自动尺寸限制

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

fft

过滤器

histc

传输线

ind2sub

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

interp1

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

重塑

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

  • 当输入为可变大小的空数组时,输出数组(同样为空)的最大尺寸不能大于输入数组的最大尺寸。

shiftdim

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

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

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

排序

性病

  • 看到自动尺寸限制

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

sub2ind

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

总和

  • 看到自动尺寸限制

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

trapz

  • 看到自动尺寸限制

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

定型

var

  • 看到自动尺寸限制

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

vecnorm