代码生成复杂的数据
当定义复杂的变量的限制
对于代码生成,您必须设置变量赋值时的复杂性。分配一个变量或使用复杂的常数复杂的
函数。例如:
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喷火报告
如果你运行墨西哥人功能,你看到在MATLAB工作区,的结果
foo_mex
是真正的价值1
。z = foo_mex
ans = 1
结果的表达复杂的操作数
一般来说,表情复杂,包含一个或多个操作数产生一个复杂导致生成的代码,即使结果的值是零。考虑下面的代码:
z = x + y;
假设在运行时,x
的值2 + 3
和y
的值2 - 3我
。在MATLAB中,这段代码会产生真正的结果z = 4
。在代码生成过程中,类型x
和y
是已知的,但它们的值是未知的。因为或两个操作数在这个表达式很复杂,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我。