主要内容

coder.varsize

声明适应数据

描述

例子

coder.varsize (varName1,…, varNameN)声明的变量命名varName1,…, varNameN有一个变量的大小。宣言指示代码生成器允许变量改变大小在执行期间生成的代码。使用这种语法,您没有指定的上界维度的变量或维度可以改变大小。代码生成器计算上界。所有维度,除了单维度,可以改变大小。

使用coder.varsize根据这些限制和指南:

  • 使用coder.varsize在MATLAB®用于代码生成功能。

  • coder.varsize声明必须在第一次使用一个变量。例如:

    …x = 1;coder.varsize (“x”);disp(大小(x));…

  • 使用coder.varsize宣布一个输出参数变量的大小或地址大小不匹配错误。否则,定义适应可变数据,用描述的方法定义为代码生成适应可变数据

请注意

MATLAB函数块,宣布适应输出变量,使用符号面板和属性检查器。看到声明适应MATLAB函数块变量(万博1manbetx模型)。如果您提供一个上界coder.varsize声明,上界必须匹配属性检查器的上界。

更多的限制和指南,请参阅限制提示

例子

coder.varsize (varName1,…, varNameN,ubounds)还指定了一个上界为每个维度的变量。所有的变量必须有相同数量的维度。所有维度,除了单维度,可以改变大小。

例子

coder.varsize (varName1,…, varNameN,ubounds,会变暗)还指定了一个上界为每个维度的变量和每个维度是否有一个固定的大小或一个变量的大小。如果一个维度有一个固定的大小,那么相应的ubound元素指定固定尺寸的大小。所有的变量有相同的固定大小尺寸和相同的适应维度。

代码生成器使用冒号前缀表示一个适应维度。例如,如果一个数组的大小一个表示为3 x 5 x:正,那么:

  • 第一个维度有一个固定的大小3

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

  • 第三个维度是适应和无界

例子

全部折叠

在使用一个变量(读),改变变量的大小会导致失配误差大小。使用coder.varsize指定变量的大小可以改变。

代码生成下列函数产生一个大小不匹配错误,因为x = 1:10第二维度的大小变化x线后y =大小(x)使用x

函数(x, y) = usevarsize (n)% # codegenx = 1;y =大小(x);如果n > 10 x = 1:10;结束

宣布x可以改变尺寸、使用吗coder.varsize

函数(x, y) = usevarsize (n)% # codegenx = 1;coder.varsize (“x”);y =大小(x);如果n > 10 x = 1:10;结束

如果你删除线y =大小(x),你不再需要coder.varsize声明,因为x之前没有使用它的大小变化。

指定一个是一个行向量的大小1 x: 20。这表示,第二个维度一个有一个可变大小的上限20。

函数fcn ()coder.varsize (“一个”20 [1]);结束

当你不提供的会变暗所有维度,除了单维度,一个变量的大小。

指定一个是一个数组大小3 x: 20。这表示,第一个维度有一个固定大小的三个和他的第二个维度变量大小的上限20。

函数fcn ()coder.varsize (“一个”20 [3],[0 1]);结束

在这个函数中,声明coder.varsize (“data.values”)宣称该领域里面的每个元素数据有一个变量的大小。

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

指定单元阵列C有一个固定大小的第一个维度和适应第二维度三个的一个上界。的coder.varsize声明必须在第一次使用之前C

C = {1 (1 2)};coder.varsize (“C”3 [1],[0 1]);y = C {1};结束

没有coder.varsize声明,C异构单元阵列的元素有相同的类和不同的大小。与coder.varsize声明,C均质单元阵列的元素有相同的类和最大尺寸。

  • 单元阵列C的大小1 x: 3。冒号表示,第二维C是适应3的一个上界。

  • 的每个元素C是一个1 x: 2数组中。

指定单元阵列的元素C1 x: 5向量。这表明这个元素都有一个固定大小的第一维度和适应第二维度5的一个上界。

C = {1 2 3};coder.varsize (“C {:}”[1 - 5],[0 1]);C = {1 1:5 2:3};

你也可以指定一个特定元素的单元阵列是适应的。例如,在一个1×3单元阵列x,宣布第一个元素x {1}是一个1 x: 10行向量。

x = {1,2,3};coder.varsize (“x {1}”10 [1]);

输入参数

全部折叠

名称的变量声明一个变量的大小,指定为一个或多个特征向量或字符串标量。

例子:coder.varsize (x, y)

上界为数组维度,指定为一个向量的整数常量。

当你没有指定ubounds,代码生成器计算每个变量的上界。如果ubounds元素对应一个固定大小的尺寸,值是固定大小的尺寸。

例子:coder.varsize (“x”,'y',[1 2])

指示是否每个维度有一个固定的大小或一个变量大小,指定为一个逻辑向量。对应于0或维度会变暗有一个固定的大小。对应1或维度真正的有一个变量的大小。

当你没有指定会变暗,尺寸有一个变量的大小,除了单维度。

例子:coder.varsize (“x”,'y',[1 2], [0 1])

限制

  • coder.varsize声明指示代码生成器允许一个变量的大小变化。它不改变变量的大小。考虑这段代码:

    x = 7;coder.varsize (“x”(1、5));disp(大小(x));

    coder.varsize声明,x仍然是一个数组1×1。你不能赋值一个元素之外的电流的大小x。例如,这段代码会产生一个运行时错误,因为索引3超过的尺寸x

    x = 7;coder.varsize (“x”(1、5));x (3) = 1;

  • coder.varsize不支持输入参数万博1manbetx的函数。而不是:

    • 如果函数是一个入口点函数,指定一个输入参数的变量大小使用coder.typeof在命令行中。另外,指定一个入口点函数输入参数变量大小使用定义输入类型一步的应用。

    • 如果函数不是一个入口点函数,使用coder.varsize在调用函数调用的函数的输入变量。

  • 为稀疏矩阵,coder.varsize为适应维度滴上界。

  • 限制使用coder.varsize细胞数组:

    • 单元阵列可以只有一个变量的大小是否均匀。当你使用coder.varsize异构单元阵列,代码生成器试图使单元阵列均匀。代码生成器试图找到一个适用于所有的类和最大尺寸单元阵列的元素。例如,考虑单元阵列c = {1, 2 [3]}。两元素可以表示为两个类型的第一个维度有一个固定大小的1和第二维度变量大小的上限2。如果代码生成器不能找到共同的类和一个最大尺寸,代码生成失败。例如,考虑单元阵列c = {' a ', 2 [3]}。代码生成器无法找到一个可以代表两类元素,因为第一个元素字符第二个元素是

    • 如果你使用细胞函数定义一个固定大小的单元阵列,您不能使用coder.varsize指定单元阵列的一个变量的大小。例如,这段代码会导致错误,因为生成代码x =细胞(1、3)使x一个固定大小,1×3细胞数组。

      x =细胞(1、3);coder.varsize (“x”[1 5])

      您可以使用coder.varsize单元阵列,使用大括号定义。例如:

      x = {1 2 3};coder.varsize (“x”[1 5])

    • 创建一个适应单元阵列使用细胞功能,使用这个代码模式:

      函数mycell (n)% # codegenx =细胞(1,n);i = 1: n x{} =我;结束结束

      看到适应细胞阵列通过细胞的定义

      指定单元格的上界数组,使用coder.varsize

      函数mycell (n)% # codegenx =细胞(1,n);i = 1: n x{} =我;coder.varsize (“x”,1,20);结束结束

  • coder.varsize不支持:万博1manbetx

    • 全局变量

    • MATLAB类或类属性

    • 字符串标量

更多关于

全部折叠

单维度

维度的大小(dim) = 1

提示

  • 在代码生成报告或MATLAB函数的一份报告中,一个冒号(:)表明维度有一个变量的大小。例如,一个规模1 x: 2表明,第一个维度有一个固定大小的,第二个维度有一两变量大小的上限。

  • 如果你使用coder.varsize指定的上限尺寸是1,默认情况下,维有固定大小的1。指定维度可以是0或1(空数组),设置相应的元素会变暗参数真正的。例如,这个代码指定的第一个维度x固定大小的1和其他维度变量大小5。

    coder.varsize (“x”(1、5、5))

    相比之下,这段代码指定的第一个维度x有一个上界1和有一个变量的大小(可以是0或1)。

    coder.varsize (“x”(1、5、5),(1,1,1))

  • 如果你使用输入变量或计算的结果使用输入变量来指定数组的大小,它是声明为适应在生成的代码。不重用coder.varsize数组,除非你也想指定一个上界为它的大小。

  • 如果你不指定的上界coder.varsize声明和代码生成器无法确定上界,生成的代码使用动态内存分配。动态内存分配可以减少生成的代码的速度。为了避免动态内存分配,指定提供的上界ubounds论点。

版本历史

介绍了R2011a