主要内容

代码生成复杂的数据

当定义复杂的变量的限制

对于代码生成,您必须设置变量赋值时的复杂性。分配一个变量或使用复杂的常数复杂的函数。例如:

x = 5 + 6我;% x是一个复杂的数量分配。y =复杂(5、6);% y是复数我5 + 6。

作业后,你不能改变一个变量的复杂性。代码生成以下函数失败,因为我x (k) = 3 + 4变化的复杂性x

x = test1()函数x = 0 (3,3);% x是真实的k = 1:元素个数(x) x (k) = 3 + 4我;结束结束

为了解决这个问题,分配一个复杂的常数x

x = test1()函数x = 0(3,3) + 0我;% k = 1 x是复杂的:元素个数(x) x (k) = 3 + 4我;结束结束

代码生成与新鲜感虚部复杂的数据

对于代码生成、复杂的数据,所有的新鲜感虚部仍是复杂的。这个数据不会成为现实。这种行为有以下影响:

  • 在某些情况下,结果从绝对值函数这种复杂的数据从MATLAB可以不同®结果。看到绝对值函数这种复杂的值

  • 对于功能要求复杂的输入是按绝对值,复杂的输入与新鲜感虚部绝对值必须进行排序。这些功能包括ismember,联盟,相交,setdiff,setxor

绝对值函数这种复杂的值

这种复杂的值的功能包括绝对值排序,issorted,sortrows,中位数,最小值,马克斯。这些函数绝对值即使复数的虚部为零。一般来说,排序的绝对值比排序的部分会产生不同的结果。因此,当输入这些函数是复杂与新鲜感虚部在生成的代码,但真正在MATLAB,比MATLAB生成的代码可以产生不同的结果。在下面的例子中,输入排序在MATLAB是真实的,但是复杂的新鲜感虚部在生成的代码:

  • 你真正的输入传递给一个函数生成的复杂的输入

  • 输入排序输出是一个函数,它返回在生成的代码复杂吗

墨西哥人的输入和输出函数生成的复杂的参数

对墨西哥人创造的功能codegen(MATLAB编码器)命令,fiaccel命令,或MATLAB编码器™应用:

  • 假设您生成复杂的墨西哥人函数输入。如果你调用墨西哥人函数与实际输入,墨西哥人函数变换的输入复杂与新鲜感虚部值。

  • 如果墨西哥人复杂函数返回值都新鲜感虚部,墨西哥人函数返回值,以MATLAB工作区作为真实值。例如,考虑这个函数:

    函数y = foo () y = 1 + 0我;% y是复杂与虚部等于零结束

    如果您生成一个墨西哥人功能喷火和视图代码生成的报告,你会发现y是复杂的。

    codegen喷火报告

    这张图片显示了y的属性在代码生成报告。报告显示,y是一个复杂的类列。

    如果你运行墨西哥人功能,你看到在MATLAB工作区,的结果foo_mex是真正的价值1

    z = foo_mex
    ans = 1

结果的表达复杂的操作数

一般来说,表情复杂,包含一个或多个操作数产生一个复杂导致生成的代码,即使结果的值是零。考虑下面的代码:

z = x + y;

假设在运行时,x的值2 + 3y的值2 - 3我。在MATLAB中,这段代码会产生真正的结果z = 4。在代码生成过程中,类型xy是已知的,但它们的值是未知的。因为或两个操作数在这个表达式很复杂,z被定义为一个复杂的变量需要存储一个真正的和一个虚部。z=复杂的结果4 + 0我在生成的代码,而不是4在MATLAB代码。

例外的行为是:

  • 当复杂结果的虚部为零,墨西哥人函数返回结果MATLAB工作区作为真实值。看到墨西哥人的输入和输出函数生成的复杂的参数

  • 当论点的虚部为零,复杂的外部函数的参数是真实的。

    函数y = foo () coder.extrinsic (√) x = 1 + 0;% x是复杂的y = sqrt (x);% x是真实的,是真正的结束
  • 函数,把复杂的参数但真正产生实际的结果返回值。

    y =真正的(x);% y是复数的实部x y =图像放大(x);%的实虚部x y =伊斯雷尔(x);% y是假的(0)复数x。
  • 函数,把真正的复杂参数而产生复杂的结果返回值。

    z =复杂(x, y);% z是一个真正的x和y的复数。

结果复杂的乘法与非限定的值

当一个复杂的乘法运算的操作数包含一个非限定的值,生成的代码可能产生不同的结果比MATLAB生成的结果。所不同的是由于代码生成的方式定义了复杂的乘法。对于代码生成:

  • 乘法的一个复杂的价值由一个复杂的价值(一个+b我)(c+d我)被定义为(一个c- - - - - -bd)+ (一个d+bc)我。执行完整的计算,即使一个真正的或一个虚部为零。

  • 乘法实际价值的一个复杂的价值c(一个+b我)被定义为c一个+cb