主要内容

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

常见的限制

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

变长向量限制

标准库函数的输入必须是变长向量或固定大小的向量。变长向量是具有形状的变长数组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的可变矩阵,则会发生错误。

  • 维度参数必须是常数。

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