概率分布对象的代码生成

这个示例展示了如何生成将概率分布与样本数据相匹配的代码,并对拟合的分布进行评估。

首先,定义一个入口点函数使用fitdist创建概率分布对象,并使用它的物体的功能,以评估拟合分布。然后,通过使用产生的入口点函数的代码代码生成。一个入口点函数可以具有的概率分布对象既作为输入参数和输出参数。因此,另外,您也可以定义两个入口点函数,一个用于安装分布和其他用于评估拟合分布。第一入口点函数返回一个拟合分布,并且所述第二入口点函数接受拟合分布作为输入参数。本例首先描述了工作流与单入口点函数,和然后短暂地描述了具有两个入口点功能的工作流。

fitdist万博1manbetx支持代码生成的β为,指数,极值,对数正态分布,正常和威布尔分布。拟合概率万博1manbetx分布的对象的支持的对象的功能,通过创建fitdist, 是CDFicdfIQR意思中位数pdfSTD截断,var

有关代码生成的更多信息,请参阅通用代码生成流程

定义入口点函数

定义一个入口点函数myFitandEvaluate这需要的采样数据,分配名称,分配的截断的限制,和数据值在其中计算累积分布函数(CDF)和概率分布函数(pdf)。内的入口点函数,适合的概率分布对象的样本数据,截断分配到指定的截取极限,计算平均截分布的,并在指定的数据值计算CDF和pdf值。

的内容myFitandEvaluate.m文件。

类型myFitandEvaluate.m
函数[pd_truncated,st] = myfitanvaluate (data,distname,truncation_limits,x) %#codegen %将概率分布对象匹配到数据。pd = fitdist(数据、distname);%截断pd。pd_truncated =截断(pd, truncation_limits (1) truncation_limits (2));%计算截断pd的平均值。mean_val =意味着(pd_truncated);%计算cdf和pdf,在x处求值。pdf_val = pdf (pd_truncated x);%创建一个包含平均值、cdf和pdf值的结构数组。mean_val圣=结构(“的意思是”,“提供”,cdf_val, pdf, pdf_val); end

注意:如果单击此页面右上方的按钮,并在MATLAB®中打开此示例,MATLAB将打开示例文件夹。此文件夹包含本例的入口点函数文件。

生成代码

指定输入参数类型myFitandEvaluate使用4×1单元格数组。将入口点函数的每个输入参数类型分配给每个单元格。通过使用一个示例值指定数据类型和确切的输入数组大小,该示例值表示具有特定数据类型和数组大小的一组值。

ARGS =细胞(4,1);ARGS {1} =酮(100,1);ARGS {2} = coder.Constant(“指数”);的参数{3}=(1、2);ARGS {4} = 1 (10, 1);

的第二输入端myFitandEvaluate是一个分布的名称,这是第二个输入参数fitdist。此参数必须是一个编译时间常数。因此,您指定ARGS {2}通过使用coder.Constant

如果你想指定ARGS {1}ARGS {3}作为可变大小的输入,使用coder.typeof。有关详细信息,请参见通用代码生成流程

生成从入口点函数MEX功能myFitandEvaluate。指定使用的输入参数类型-args选项和单元阵列ARGS

代码生成myFitandEvaluate-argsARGS

代码生成生成MEX函数myFitandEvaluate_mex使用当前文件夹中的平台依赖扩展名。

验证生成的代码

通过一些数据来验证是否myFitandEvaluatemyFitandEvaluate_mex返回相同的输出。

RNG('默认'%的再现性数据= exprnd(1,[100,1]);%指数的随机数平均参数1DISTNAME =“指数”;truncation_limits = [0, 4];x =(0:9)”;[pd_truncated,ST] = myFitandEvaluate(数据,DISTNAME,truncation_limits,X);[pd_truncated_mex,st_mex] = myFitandEvaluate_mex(数据,DISTNAME,truncation_limits,X);

比较概率分布对象pd_truncatedpd_truncated_mex

pd_truncated
指数分布mu = 0.917049截断到区间[0,4]
pd_truncated_mex
pd_truncated_mex = ExponentialDistribution指数分布亩= 0.917049截断为区间[0,4]
verifyMEX_pd = ISEQUAL(pd_truncated,pd_truncated_mex)
verifyMEX_pd =合乎逻辑1

是平等的返回逻辑1(真正), 意思是pd_truncatedpd_truncated_mex是相等的。

与此相比,包含的意思,CDF和PDF值结构数组。

st_mex verifyMEX_st = isequal(圣)
verifyMEX_st =合乎逻辑1

对比确认myFitandEvaluatemyFitandEvaluate_mex返回相同的输出。所生成的代码可能不会产生与MATLAB中所述相同的浮点数值结果生成的代码和MATLAB代码之间的差异(编码器MATLAB)。在这种情况下,比较允许公差小的值。

工作流与两个入口点函数的

一个入口点函数可以具有的概率分布对象既作为输入参数和输出参数。因此,您可以定义两个入口点函数,一个用于安装分布和其他用于评估拟合分布。然后生成两个入口点函数的代码。

定义入口点函数

定义两个入口点函数。第一个入口点函数myFitDist对样本数据拟合一个概率分布对象。第二个入口点函数myEvaluateDist截断分布,计算截断分布的平均值,并按指定的数据值计算cdf和pdf值。myEvaluateDist需要的输出myFitDist作为输入参数。

的内容myFitDist.mmyEvaluateDist.m文件。

类型myFitDist.m
函数pd = myFitDist(data,dist) %#codegen %拟合概率分布对象到数据。pd = fitdist(数据、区域);结束
类型myEvaluateDist.m
[pd_truncated,st] = myEvaluateDist(pd,truncation_limits,x) %#codegen % Truncate pdpd_truncated =截断(pd, truncation_limits (1) truncation_limits (2));%计算截断pd的平均值。mean_val =意味着(pd_truncated);%计算cdf和pdf,在x处求值。pdf_val = pdf (pd_truncated x);%创建一个包含平均值、cdf和pdf值的结构数组。mean_val圣=结构(“的意思是”,“提供”,cdf_val, pdf, pdf_val);结束

生成代码

指定输入参数类型myFitDistmyEvaluateDist

ARGS_myFitDist =细胞(2,1);ARGS_myFitDist {1} =酮(100,1);ARGS_myFitDist {2} = coder.Constant(“指数”);ARGS_myEvaluateDist =细胞(3,1);ARGS_myEvaluateDist {1} = fitdist(exprnd(1,[100,1]),“指数”);ARGS_myEvaluateDist{2} = 1(1、2);ARGS_myEvaluateDist {3} = 1 (10, 1);

如果您不需要生成MEX函数,那么你可以指定ARGS_myEvaluateDist {1}coder.OutputType(“myFitdist”),如在将入口点函数输出作为输入传递(编码器MATLAB)。您不能使用coder.OutputType在生成MEX函数时,因为输出的数据类型来自myFitDist输入的数据类型不匹配到myEvaluateDist在生成的MEX函数。

生成两个入口点函数的代码。

代码生成-omyFitandEvaluate_mex2myFitDist-argsARGS_myFitDistmyEvaluateDist-argsARGS_myEvaluateDist

代码生成生成MEX函数myFitandEvaluate_mex2。有关为多个入口点函数生成代码的详细信息,请参见生成代码多的入口点函数(编码器MATLAB)。

验证生成的代码

验证生成的代码。

RNG('默认')数据= exprnd(1,[100,1]);DISTNAME =“指数”;truncation_limits = [0, 4];x =(0:9)”;pd2 = myFitDist(数据、distname);[pd_truncated2, st2] = myEvaluateDist (pd2 truncation_limits x);pd_mex2 = myFitandEvaluate_mex2 ('myFitDist'、数据distname);[pd_truncated_mex2, st_mex2] = myFitandEvaluate_mex2 ('myEvaluateDist',pd_mex2,truncation_limits,X);verifyMEX_pd2 = ISEQUAL(PD2,pd_mex2)
verifyMEX_pd2 =合乎逻辑1
verifyMEX_pd_truncated2 = isequal (pd_truncated2 pd_truncated_mex)
verifyMEX_pd_truncated2 =合乎逻辑1
verifyMEX_st2 = ISEQUAL(ST2,st_mex2)
verifyMEX_st2 =合乎逻辑1

是平等的返回逻辑1(真正),这意味着,入口点的功能和相应的MEX函数返回相同的输出。

也可以看看

|||||||

相关话题