主要内容

coder.const

表达式折叠成常量在生成的代码

描述

例子

= coder.const (表达式)评估表达式和替换与评估的结果生成的代码。

例子

(着干活,…,outN)= coder.const (处理,__arg1、…, argN)评估多输出函数处理处理。然后替换着干活,…,outN与评估的结果生成的代码。

例子

全部折叠

这个例子显示了如何指定常量在生成的代码中使用coder.const

写一个函数AddShift这需要一个输入转变,并将其添加到一个向量的元素。向量由第十个自然数的平方。AddShift生成这个向量。

函数y = AddShift(转变)% # codegeny =(1:10)。^ 2 +转变;

生成的代码AddShift使用codegen命令。打开代码生成报告。

codegen配置:自由-launchreportAddShiftarg游戏0

代码生成器生成的代码来创建向量。它增加了转变向量在向量的每个元素的创建。的定义AddShift在生成的代码如下:

空白AddShift(双转移,双y [10]) {int k;(k = 0;k < 10;k + +) {y [k] = (double) ((1 + k) * (1 + k)) +转变;}}

替换表达式(1:10)。^ 2coder.const ((1:10) ^ 2)。,然后生成代码AddShift再次使用codegen命令。打开代码生成报告。

codegen配置:自由-launchreportAddShiftarg游戏0

代码生成器创建矢量包含第十个自然数的平方。在生成的代码,它补充说转变这个向量的每个元素。的定义AddShift在生成的代码如下:

空白AddShift(双转移,双y [10]) {int我;静态常量签署第四char[10] ={1、4、9、16、25日,36岁,49岁,64年,81年,100};(我= 0;我< 10;我+ +){y[我]=(双)iv[我]+转变;}}

这个例子展示了如何编写函数折叠成一个常数在生成的代码。

写一个函数getsine这需要一个输入指数并返回引用的元素指数从正弦的查找表。这个函数getsine使用另一个函数创建查找表可以获得的

函数y = getsine(指数)% # codegen断言(isa(指数,“int32”));持续的(资源;如果isempty(台)台=可以获得的(1024);结束y =(资源(指数);函数y =可以获得的(n) y = 0 (1, n);i = 1: n y (i) =罪((张)/(2 *π* n));结束

生成的代码getsine使用一个参数的类型int32。打开代码生成报告。

codegen配置:自由-launchreportgetsinearg游戏int32 (0)

生成的代码包含创建查找表的说明。

取代声明:

台=可以获得的(1024);

:

台= coder.const(可以获得的(1024));

生成的代码getsine使用一个参数的类型int32。打开代码生成报告。

生成的代码包含了查找表本身。coder.const力的表达式可以获得的(1024)在代码生成被评估。生成的代码不包含指令的评估。生成的代码包含了评价的结果本身。

这个例子显示了如何指定常量在生成的代码中使用一个多输出函数coder.const声明。

写一个函数MultiplyConst这需要一个输入因素和繁殖两个向量的每个元素vec1vec2因素。函数生成vec1vec2使用另一个函数EvalConsts

函数(y1, y2) = MultiplyConst(因素)% # codegen[vec1, vec2] = EvalConsts(π。* (1. / 2。^ (1:10)),2);日元= vec1。*因素;y2 = vec2。*因素;函数(f1、f2) = EvalConsts (z, n) f1 = z。^ (2 * n) /阶乘(2 * n);f2 = z。^ (2 * n + 1) /阶乘(2 * n + 1);

生成的代码MultiplyConst使用codegen命令。打开代码生成报告。

codegen配置:自由-launchreportMultiplyConstarg游戏0

代码生成器生成的代码来创建向量。

替换语句

[vec1, vec2] = EvalConsts(π。* (1. / 2。^ (1:10)),2);

[vec1, vec2] = coder.const (@EvalConsts,π。* (1. / 2。^ (1:10)),2);

生成的代码MultiplyConst使用codegen命令。打开代码生成报告。

codegen配置:自由-launchreportMultiplyConstarg游戏0
代码生成器并不生成代码来创建向量。相反,它计算的向量和指定计算向量生成的代码。

这个例子显示了如何调用一个外部函数使用coder.const

编写一个XML文件MyParams.xml包含以下语句:

<参数> < param name = "你好" value = " 17 " / > < param name = "世界" value = " 42 " / > < /参数>

保存MyParams.xml在当前文件夹。

写一个MATLAB®函数xml2struct读取一个XML文件。函数标识XML标记参数在另一个标签参数个数

后确定参数,该函数分配的价值属性的名字字段名的结构年代。函数也分配的价值属性价值字段的值。

函数s = xml2struct(文件)s =结构();医生= xmlread(文件);els = doc.getElementsByTagName (“参数”);我= 0:隧道。getLength-1它= els.item(我);ps = it.getElementsByTagName (“参数”);j = 0: ps。getLength-1参数= ps.item (j);paramName = char (param.getAttribute (“名字”));paramValue = char (param.getAttribute (“价值”));paramValue = evalin (“基地”,paramValue);年代。(paramName) = paramValue;结束结束

保存xml2struct在当前文件夹。

编写一个MATLAB函数MyFunc读取XML文件MyParams.xml成一个结构年代使用函数xml2struct。声明xml2struct外部使用coder.extrinsic并调用它coder.const声明。

函数y = MyFunc (u)% # codegen断言(isa (u,“双”));coder.extrinsic (“xml2struct”);s = coder.const (xml2struct (“MyParams.xml”));y =。你好+ s。世界+ u;

生成的代码MyFunc使用codegen命令。打开代码生成报告。

codegen配置:dll-launchreportMyFuncarg游戏0

代码生成器执行调用xml2struct在代码生成。它取代结构字段s.hellos.world在生成的代码中17和42的值。

输入参数

全部折叠

MATLAB对于表达式或用户定义的函数。

表达式必须编译时常量。该函数必须采取恒定参数。例如,下面的代码会导致代码生成错误,因为x不是一个编译时常量。

函数y = func (x) y = coder.const (log10 (x));

修复错误,分配x在MATLAB代码一个常数。另外,在代码生成,您可以使用coder.Constant定义输入类型如下:

codegen配置:自由函数arg游戏coder.Constant (10)

例子:2 *π,阶乘(10)

内置的或用户编写的函数的句柄。

例子:@log,@sin

数据类型:function_handle

和处理参数的函数处理

参数必须是编译时常量。例如,下面的代码会导致代码生成错误,因为xy不是编译时常量。

函数y = func (x, y) y = coder.const (@nchoosek, x, y);

修复错误,分配xyMATLAB代码中的常量。另外,在代码生成,您可以使用coder.Constant定义输入类型如下:

codegen配置:自由函数arg游戏{coder.Constant (10), coder.Constant (2)}

输出参数

全部折叠

的价值表达式。在生成的代码中,MATLAB编码器™替换出现的的值表达式

输出函数的处理处理MATLAB编码器评价功能和替换出现的着干活,…,outN常量在生成的代码中。

提示

  • 在可能的情况下,自动代码生成器constant-folds表达式。通常,自动常数合并发生与标量表达式。使用coder.const当代码生成器不constant-fold表达式。

  • 当常数合并计算密集型函数调用,减少代码生成时间,使函数调用外在。的非本征函数调用会导致评价函数调用MATLAB的代码生成器。例如:

    函数j = fcn (z) zTable = coder.const (0:0.01:100);jTable = coder.const(函数宏指令(“besselj”3 zTable));j = interp1 (zTable, jTable, z);结束

    看到使用编码器。常量与外在的函数调用

  • 如果coder.const无法constant-fold函数调用,试图迫使常数合并通过函数调用外在。的非本征函数调用会导致评价函数调用MATLAB的代码生成器。例如:

    函数易= fcn (xi) y = coder.const(函数宏指令(“兰德”,1100));易= interp1 (y, xi);结束

    看到使用编码器。常量与外在的函数调用

扩展功能

C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。

GPU的代码生成
生成NVIDIA的CUDA®代码®GPU使用GPU编码器™。

介绍了R2013b