此示例显示了如何生成适合概率分布的代码,以进行样本数据,并评估拟合分布。
首先,定义使用的入口点函数Fitdist.
要创建概率分布对象并使用其对象功能来评估拟合分布。然后,通过使用生成输入点功能的代码Codegen.
(MATLAB编码器)。入口点函数可以具有概率分布对象作为输入参数和输出参数。因此,或者,您可以定义两个入口点功能,用于拟合分布,另一个用于评估拟合分布。第一个入口点函数返回拟合分布,第二个入口点函数接受拟合分发作为输入参数。此示例首先描述具有单个入口点函数的工作流程,然后简要介绍具有两个入口点函数的工作流程。
Fitdist.
金宝app支持Beta,指数,极值,逻辑,正常和Weibull分布的代码生成。由...金宝app创建的拟合概率分布对象的支持对象功能Fitdist.
, 是CDF.
那ICDF.
那IQR.
那意思
那中位数
那PDF.
那STD.
那截短
, 和var.
。
有关代码生成的更多信息,请参阅一般代码生成工作流程。
定义命名的入口点函数myfitandevaluate.
采用分发的示例数据,分发名称,截断限制,以及评估累积分布函数(CDF)和概率密度函数(PDF)的数据值。在入口点函数中,将概率分布对象拟合到示例数据,截断向指定截断限制的分布,计算截断分布的平均值,并在指定的数据值下计算CDF和PDF值。
显示该内容myfitandevaluate.m
文件。
类型myfitandevaluate.m
函数[pd_trungated,st] = myfitandevaluate(data,distname,truncation_limits,x)%#codegen%拟合概率分布对象到数据。pd = fitdist(数据,distname);%截断PD。pd_trungated = truncate(pd,truncation_limits(1),truncation_limits(2));%计算截短的PD的平均值。mean_val =均值(pd_trungated);%计算CDF和PDF,在x下进行评估。cdf_val = cdf(pd_trungated,x);pdf_val = pdf(pd_truncated,x);%创建包含平均值,CDF和PDF值的结构阵列。 st = struct('mean', mean_val,'cdf',cdf_val,'pdf',pdf_val); end
笔记:如果单击此页面的右上部分的按钮,请在MATLAB®中打开此示例,然后MATLAB打开示例文件夹。此文件夹包括此示例的入口点函数文件。
指定输入参数类型myfitandevaluate.
使用4×1个单元格阵列。将入口点函数的每个输入参数类型分配给每个单元格。使用表示具有特定数据类型和数组大小的示例值,指定数据类型和精确输入数组大小。
args = cell(4,1);args {1} = =(100,1);args {2} = coder.constant('指数');args {3} = =那些(1,2);args {4} = =那些(10,1);
第二个输入myfitandevaluate.
是一个分发名称,它是第二个输入参数Fitdist.
。此参数必须是编译时常量。因此,您指定args {2}
通过使用编码器.Constant.
(MATLAB编码器)。
如果要指定args {1}
和args {3}
作为可变大小的输入,使用Coder.typeof.
(MATLAB编码器)。有关详细信息,请参阅一般代码生成工作流程。
从入口点函数生成MEX功能myfitandevaluate.
。使用使用的输入参数类型- args.
选项和单元格数组args.
。
Codegen.myfitandevaluate.- args.args.
代码成功。
Codegen.
(MATLAB编码器)生成MEX函数myfitandevaluate_mex.
使用当前文件夹中的平台依赖扩展名。
通过一些数据来验证是否myfitandevaluate.
和myfitandevaluate_mex.
返回相同的输出。
RNG('默认')重复性的%data = exprnd(1,[100,1]);%指数随机数,平均参数1distname ='指数';truncation_limits = [0,4];x =(0:9)';[pd_trungated,st] = myfitandevaluate(数据,distname,truncation_limits,x);[pd_truncated_mex,st_mex] = myfitandevaluate_mex(数据,distname,truncation_limits,x);
比较概率分布对象pd_trungated.
和pd_truncated_mex.
。
pd_trungated.
pd_truncated = exponentialLifribution指数分布mu = 0.917049截断到间隔[0,4]
pd_truncated_mex.
pd_truncated_mex = exponentialDistibution指数分布MU = 0.917049截断到间隔[0,4]
验证ex_pd = isequal(pd_truncated,pd_truncated_mex)
验证evex_pd =逻辑1
是平等的
返回逻辑1(真的
), 意思是pd_trungated.
和pd_truncated_mex.
是平等的。
比较包含平均值,CDF和PDF值的结构阵列。
verifymex_st = isequal(st,st_mex)
验证evex_st =逻辑1
比较证实了myfitandevaluate.
和myfitandevaluate_mex.
返回相同的输出。如上所述,所生成的代码可能不会产生与MATLAB相同的浮点数数字结果生成代码与MATLAB代码之间的差异(MATLAB编码器)。在这种情况下,比较允许小公差的值。
入口点函数可以具有概率分布对象作为输入参数和输出参数。因此,您可以定义两个入口点函数,一个用于拟合分发,另一个用于评估拟合分布。然后为两个入口点函数生成代码。
定义两个入口点函数。第一个入口点函数myfitdist.
适合对样本数据的概率分布对象。第二个入口点函数myevalutatist.
截断分布,计算截断分布的平均值,并在指定的数据值下计算CDF和PDF值。myevalutatist.
采取产出myfitdist.
作为输入参数。
显示该内容myfitdist.m
和myevalativeist.m.
文件。
类型myfitdist.m
函数pd = myfitdist(data,dist)%#codegen%fit概率分布对象到数据。pd = fitdist(数据,dist);结尾
类型myevalativeist.m.
函数[pd_trungated,st] = myevaLientist(pd,truncation_limits,x)%#codegen%truncate pd。pd_trungated = truncate(pd,truncation_limits(1),truncation_limits(2));%计算截短的PD的平均值。mean_val =均值(pd_trungated);%计算CDF和PDF,在x下进行评估。cdf_val = cdf(pd_trungated,x);pdf_val = pdf(pd_truncated,x);%创建包含平均值,CDF和PDF值的结构阵列。st = struct('alc',man,cdf',cdf_val,'pdf',pdf_val);结尾
指定输入参数类型myfitdist.
和myevalutatist.
。
args_myfitdist = cell(2,1);args_myfitdist {1} = in(100,1);args_myfitdist {2} = coder.constant('指数');args_myevaliverist = cell(3,1);args_myevaliveist {1} = fitdist(exprnd(1,[100,1]),'指数');args_myevaluentist {2} =那些(1,2);args_myevaliveist {3} = {3}(10,1);
如果您不需要生成MEX函数,则可以指定args_myevaliveist {1}
作为Coder.Outputtype('myfitdist')
,如上所述通过作为输入的入口点函数输出(MATLAB编码器)。你不能使用Coder.Outputtype.
(MATLAB编码器)生成MEX函数时,因为输出的数据类型myfitdist.
与输入的数据类型不匹配myevalutatist.
在生成的mex函数中。
为两个入口点函数生成代码。
Codegen.-Omyfitandevaluate_mex2.myfitdist.- args.args_myfitdist.myevalutatist.- args.args_myevaluentist.
代码成功。
Codegen.
(MATLAB编码器)生成MEX函数myfitandevaluate_mex2.
。有关为多个入口点函数生成代码的详细信息,请参阅生成多个入口点函数的代码(MATLAB编码器)。
验证生成的代码。
RNG('默认')Data = Exprnd(1,[100,1]);distname ='指数';truncation_limits = [0,4];x =(0:9)';pd2 = myfitdist(数据,distname);[pd_truncated2,st2] = myevaliverist(pd2,truncation_limits,x);pd_mex2 = myfitandevaluate_mex2('myfitdist',数据,distname);[pd_truncated_mex2,st_mex2] = myfitandevaluate_mex2('myevaliverist',pd_mex2,truncation_limits,x);验证ex_pd2 = isequal(pd2,pd_mex2)
验证evex_pd2 =逻辑1
验证evex_pd_trungated2 = isequal(pd_truncated2,pd_truncated_mex)
验证evex_pd_trungated2 =逻辑1
验证ex_st2 = isequal(st2,st_mex2)
验证evex_st2 =逻辑1
是平等的
返回逻辑1(真的
),这意味着输入点函数和相应的MEX函数返回相同的输出。
结合分布式
|exponentialDistribution.
|extremevaluepistribution.
|Fitdist.
|lognormaldistribution.
|正规分布
|WeibulLdistribution.
|Codegen.
(MATLAB编码器)