不是机器学习模型的对象函数的Statistics和Machine Learning Toolbox™函数的通用代码生成工作流与下面描述的工作流相同MATLAB®编码器™.有关详细信息,请参见入门MATLAB编码器(MATLAB编码器)。要学习如何为机器学习模型的目标函数生成代码,请参见代码生成简介.
这个例子简要地解释了通用代码生成工作流,如流程图所总结的那样:
一个入口点函数,又称顶级或主函数,是为代码生成而定义的函数。因为你不能在顶层使用codegen
,您必须定义一个入口点函数来调用支持代码生成的函数,并通过使用codegen
.入口点函数中的所有函数必须支持代码生成。金宝app
添加% # codegen
编译器指令(或pragma)到函数签名后的入口点函数,以指示您打算为MATLAB算法生成代码。添加此指令将指示MATLAB代码分析器帮助您诊断和修复在代码生成期间可能导致错误的违规。看到用代码分析器检查代码(MATLAB编码器)。
例如,使用。生成估计数据集四分位数范围的代码位差
,定义此函数。
函数r = iqrCodeGen (x)% # codegen%IQRCODEGEN估计四分位范围% iqrCodeGen返回数据x的四分位范围,%一个单精度或双精度向量。r =差(x);结束
变长度输入宗量
作为输入参数。有关详细信息,请参见可变长度参数列表的代码生成(MATLAB编码器)和为代码生成指定可变大小参数.
要生成C/ c++代码,您必须访问配置正确的编译器。MATLAB编码器定位并使用受支持的已安装的编译器。金宝app要查看和更改默认的C编译器,输入:
墨西哥人设置
codegen
在设置编译器之后,使用codegen
或者是MATLAB编码器来学习如何使用MATLAB编码器应用程序,请参阅用MATLAB Coder App生成MEX函数(MATLAB编码器)。
要在命令行生成代码,请使用codegen
.因为C和c++都是静态类型语言,所以必须在编译时确定入口点函数中所有变量的属性。在调用时指定入口点函数的所有输入的数据类型和大小codegen
通过使用arg游戏
选择。
要指定数据类型和准确的输入数组大小,请传递一个MATLAB表达式,该表达式表示具有特定数据类型和数组大小的值集。例如,指定生成的代码来自iqrCodeGen.m
必须接受包含100个元素的双精度数字列向量,输入:
testX = randn (100 1);codegeniqrCodeGenarg游戏{testX}报告
的报告
标志生成代码生成报告。看到代码生成报告(MATLAB编码器)。
要指定至少一个维度可以具有任意长度,请使用arg游戏
选项coder.typeof
如下。
args {coder.typeof (example_value,size_vector,variable_dims)}
example_value
,size_vector
,variable_dims
指定生成的代码可以接受的输入数组的属性。
输入数组具有与中的示例值相同的数据类型example_value
.
size_vector
输入数组的大小是否对应variable_dims
值是假
.
size_vector
如果数组大小的上限是相应的variable_dims
值是真正的
.
variable_dims
指定数组的每个维度的大小是可变的还是固定的。的值真正的
(逻辑1)表示对应的维度大小可变;的值假
(逻辑0)表示对应的维度具有固定的大小。
当您在编译时拥有未知数量的观察数据时,指定一个可变大小的输入是很方便的。例如,指定生成的代码来自iqrCodeGen.m
可以接受任意长度的双精度数字列向量,输入:
testX = coder.typeof(0[正无穷,1][1,0]);codegeniqrCodeGenarg游戏{testX}报告
0
为example_value
值表示数据类型为双
因为双
是MATLAB默认的数值数据类型。(正,1)
为size_vector
价值和(1,0)
为variable_dims
值表示第一个维度的大小是可变的和无界的,第二个维度的大小固定为1。
若要指定字符数组,例如受支持的名称-值对参数,请将字符数组指定为常量金宝app编码器。常数
.例如,假设“名字”
的有效名称-值对参数是iqrCodeGen.m
,以及相应的值价值
是数字。然后输入:
codegeniqrCodeGenarg游戏{testX, coder.Constant(“名字”),值}报告
有关详细信息,请参见在命令行生成C代码(MATLAB编码器)和指定入口点函数输入的属性(MATLAB编码器)。
MATLAB编码器可以生成以下类型的代码:
MEX (MATLAB可执行程序)函数
独立的C / c++代码
独立的C/ c++代码编译为静态库
编译为动态链接库的独立C/ c++代码
编译成可执行文件的独立C/ c++代码
属性指定构建类型配置
选择codegen
.有关设置代码生成选项的详细信息,请参见配置构建设置(MATLAB编码器)。
默认情况下,codegen
生成一个MEX函数。MEX函数是一个C/ c++程序,可在MATLAB中执行。您可以使用MEX函数来加速MATLAB算法,并测试生成的代码的功能和运行时问题。有关详细信息,请参见MATLAB算法加速(MATLAB编码器)和为什么在MATLAB中测试MEX函数?(MATLAB编码器)。
你可以使用报告
标记以生成代码生成报告。该报告帮助您调试代码生成问题,并查看生成的C/ c++代码。有关详细信息,请参见代码生成报告(MATLAB编码器)。
测试MEX函数,以验证生成的代码是否提供了与原始MATLAB代码相同的功能。要执行此测试,请使用与运行原始MATLAB代码相同的输入运行MEX函数,然后比较结果。在生成独立代码之前在MATLAB中运行MEX函数,还可以检测和修复在生成的独立代码中很难诊断的运行时错误。有关详细信息,请参见为什么在MATLAB中测试MEX函数?(MATLAB编码器)。
传递一些数据来验证是否位差
,iqrCodeGen
,iqrCodeGen_mex
返回相同的四分位数范围。
testX = randn (100 1);r =差(testX);r_entrypoint = iqrCodeGen (testX);r_mex = iqrCodeGen_mex (testX);
使用isequal
.
isequal (r, r_entrypoint, r_mex)
isequal
如果所有输入都相等,则返回逻辑1 (true)。
您还可以使用测试文件和验证MEX函数coder.runTest
.有关详细信息,请参见测试代码生成的MATLAB代码(MATLAB编码器)。