主要内容

定义为代码生成适应可变数据

对于代码生成,在操作或使用变量之前返回它们作为输出,您必须指定一个特定的类,大小和复杂性。一般来说,在最初的任务之后,你不能再分配变量属性。因此,后分配一个固定大小的变量或结构领域,试图增加变量或结构字段可能会导致一个编译错误。在这些情况下,您必须显式地定义数据所适应的使用这些方法之一。

方法 看到

从适应矩阵构造函数分配数据,例如:

使用一个矩阵构造函数非常数的维度
分配多个常数大小相同的变量在使用前(阅读)的变量。 分配多个大小相同的变量
增加使用数组结束(+ 1)索引。 增长数组使用结束(+ 1)
定义的所有实例变量是适应的。 通过使用coder.varsize显式地定义适应可变数据

使用一个矩阵构造函数非常数的维度

您可以定义一个适应矩阵通过使用构造函数和非常数的维度。例如:

函数s = var_by_assign (u)% # codegeny = 1 (u);s =元素个数(y);

如果你不使用动态内存分配时,您还必须添加一个断言声明提供上界的维度。例如:

函数s = var_by_assign (u)% # codegen断言(u < 20);y = 1 (u);s =元素个数(y);

分配多个大小相同的变量

使用之前(读)代码中的一个变量,你可以让它适应分配多个常数大小。当代码生成器使用静态分配在堆栈上,它可以为每个指定的最大上界的大小尺寸。当你分配相同的尺寸给定的尺寸在所有作业,代码生成器假设尺寸大小是固定的。作业可以指定不同的形状和大小。

代码生成器使用动态内存分配时,它不检查上界。它假设适应可变数据是无限的。

推断上界从多个定义不同的形状

函数s = var_by_multiassign (u)% # codegen如果(u > 0) y = 1 (3、4、5);其他的y = 0 (3,1);结束s =元素个数(y);

当代码生成器使用静态分配,它推断y与三维空间是一个矩阵:

  • 第一个维度是固定大小3

  • 第二个维度是适应4的一个上界

  • 第三个维度是适应5的一个上界

当代码生成器使用动态分配,它分析的维度y不同:

  • 第一个维度是固定大小3。

  • 第二个和第三个维度是无界的。

增长数组使用结束(+ 1)

增加一个数组X,你可以分配一个值X(+ 1)结束。如果你在MATLAB做这个任务®代码,代码生成器对你成长为适应可变的维度。

例如,您可以生成代码的代码片段:

一个= (1 2 3 4 5 6);(结束+ 1)= 7;b = (1 - 2);我= 3:10 b(结束+ 1)=我;结束

当你使用结束(+ 1)增加一个数组,遵循这些限制:

  • 只使用结束(+ 1)。不要使用(结束+ 2),(+ 3)结束,等等。

  • 使用结束(+ 1)与向量。例如,下面的代码是不允许的,因为X是一个矩阵,而不是一个向量。

    X = [1 2;3 4];结束X (+ 1) = 5;
  • 你可以空数组的大小1 x0通过使用结束(+ 1)。日益增长的数组大小0 x1不支持。万博1manbetx越来越多的数组的大小0 x0只有支万博1manbetx持你创建数组的使用吗[]

通过使用coder.varsize显式地定义适应可变数据

显式地定义适应可变数据,使用函数coder.varsize。可选地,您还可以指定哪个维度变化以及它们的上界。例如:

  • 定义B作为一个适应二维数组,其中每个维度的上限为64。

    coder.varsize ('B', [64 64]);

  • 定义B作为一个适应可变数组:

    coder.varsize (B);

    当你只提供第一个参数,coder.varsize假设所有的尺寸B可以改变,上限是多少大小(B)

指定哪个尺寸不同

您可以使用函数coder.varsize指定哪个维度不同。例如,以下语句定义B作为数组的第一个维度是固定的,但其第二维度可以长到一个大小为16:

coder.varsize ('B',[2, 16],[0 1])

第三个参数指定尺寸不同。这个参数必须是一个逻辑向量或一个向量只包含0和1的两倍。对应于零或维度有固定大小。维度对应的或真正的大小不同。coder.varsize通常将尺寸大小1视为固定。看到定义适应单维度的矩阵

允许一个变量定义尺寸固定后成长

函数var_by_if定义了矩阵Y与固定2×2维在第一次使用前(声明Y = Y + u读取从Y)。然而,coder.varsize定义了Y作为一个适应矩阵,使其改变大小的基于决策逻辑其他的条款:

函数Y = var_by_if (u)% # codegen如果(u > 0) Y = 0 (2, 2);coder.varsize (“Y”);如果(u < 10) Y = Y + u;结束其他的Y = 0 (5,5);结束

没有coder.varsize代码生成器推断Y是一个固定大小,2×2的矩阵。这形成了一种失配误差大小。

定义适应单维度的矩阵

一个单例的维度是一个维度大小(暗)= 1。单件尺寸是固定在大小:

  • 你指定一个维度1的一个上界coder.varsize表达式。

    例如,在这个函数,Y像一个向量和一个适应维度:

    函数Y = dim_singleton (u)% # codegenY = [1 - 2];coder.varsize (“Y”10 [1]);如果(u > 0) Y = Y [3];其他的Y = [Y u];结束

  • 你用单维度通过使用初始化适应可变数据矩阵构造函数表达式或矩阵函数。

    例如,在这个函数,XY像向量,只有他们的第二个维度是适应。

    函数(X, Y) = dim_singleton_vects (u)% # codegenY = 1 (1、3);4 X = [1];coder.varsize (“Y”,“X”);如果(u > 0) Y = [Y u];其他的X = [X u];结束

你可以通过使用覆盖这一行为coder.varsize明确指定单维度不同。例如:

函数Y = dim_singleton_vary (u)% # codegenY = [1 - 2];coder.varsize (“Y”,10 [1],[1]);如果(u > 0) Y = (Y Y + u);其他的Y = [Y Y * u];结束

在这个例子中,第三个参数coder.varsize是一个向量的,表明每个维度的Y不同的大小。

定义适应可变结构领域

定义结构领域适应可变数组,使用冒号(:),该指数表达式。冒号(:)表明,适应可变数组的所有元素。例如:

函数y = struct_example ()% # codegend =结构(“值”0 (1,0),“颜色”,0);data = repmat (d, [3 3]);coder.varsize (“数据(:). values”);i = 1:元素个数(数据)的数据(i)。颜色=兰德- 0.5;数据(我)。值= 1:i;结束y = 0;i = 1:元素个数(数据)如果数据(我)。颜色> 0 = y +(数据(我). values)总和;结束结束

表达式coder.varsize(“数据(:). values”)定义了字段在矩阵的每个元素数据适应。

这里有其他的例子:

  • coder.varsize(从(:)。b)

    在这个例子中,数据是一个标量变量,其中包含矩阵一个。矩阵的每个元素一个包含一个适应可变字段B

  • coder.varsize(“数据(:)。(:)。b”)

    这个表达式定义字段B在矩阵的每个元素一个在矩阵的每个元素数据适应。

另请参阅

|

相关的话题