主要内容

このページの翻訳は最新ではありませ。

确率分布オブジェクトのコードの生成

この例では,確率分布を標本データにあてはめて,近似分布を評価するコードを生成する方法を示します。

最初に,Fitdist.をを使し确率确率オブジェクト作用成,そのオブジェクト关有关部をし评価ポイントするポイントポイント定义定义定义定义定义定义定义しますし。Codegen.(MATLAB编码器)をを用してエントリポイント关键のコードを生成しますおよびおよび力量引のとして确率引オブジェクトことができことができことができことができ含めることができことができことができことができことができことができことができことができことができことができことができことができことができことができことができことができことができことができことができことができ近似近似近似近似近似近似近似近似近似近似近似近似评価用に2つのエントリポイント关键词定义定义ます。最初のエントリポイント关键分布分布を返し,2番目のエントリポイント关键词このこのでは,最初最初ではははににに关键ををワークワークフローを明し,次に2つのエントリポイント关键

Fitdist.は,ベータ分布,指数分布,極値分布,対数正規分布,正規分布およびワイブル分布のコード生成をサポートします。Fitdist.作者CDF.ICDF.IQR.的意思是中位数PDF.STD.截短,およびvar.です。

コード生成の详细については,一般的なコード生成のワークフローを参照してください。

エントリポイント関数の定義

標本データ,分布名,分布の打ち切り制限,累積分布関数(cdf)と確率密度関数(pdf)を評価するデータ値をとるmyfitandevaluate.という名前のエントリポイント関数を定義します。エントリポイント関数内で確率分布オブジェクトを標本データにあてはめ、指定した打ち切り制限で分布を打ち切り、打ち切られた分布の平均値を計算し、指定したデータ値で cdf 値と pdf 値を計算します。

myFitandEvaluate.mファイルの内容を表示します。

类型myFitandEvaluate.m
函数[pd_trungated,st] = myfitandevaluate(数据,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. cdf_val = cdf(pd_truncated,x);pdf_val = pdf (pd_truncated x);%创建一个包含平均值、cdf和pdf值的结构数组。mean_val圣=结构(“的意思是”,“提供”,cdf_val, pdf, pdf_val); end

メモ:このページの右上にあるををクリックてこのをmatlab®で开启と,matlabで例フォルダーが开口ます。

コードの生成

4行1列列细胞配列配列使使しmyfitandevaluate.のの力量引ののをを指定しし型を指定各各入各の型を各各各割り当て割り当てます割り当て割り当て割り当て割り当て割り当てます割り当て割り当て割り当て割り当て割り当て割り当て割り当て割り当て割り当て割り当て连の型およびをを表す连连の値をを表す値を连の値値をてをしししししししししと正确な入力配列のサイズを指定します。

ARGS =细胞(4,1);ARGS {1} = 1 (100 1);ARGS{2} =编码器。常数('指数');的参数{3}=(1、2);ARGS {4} = 1 (10, 1);

myfitandevaluate.の2番目のの力は,分布名です。これこれFitdist.の2番目の入力引数です。この引数はコンパイル時の定数でなければなりません。したがって,编码器。常数(MATLAB编码器)を使用してargs {2}を指定します。

args {1}およびargs {3}を可変サイズのののとしてとしてする场は,coder.typeof(MATLAB编码器)を使は。详细详细について,一般的なコード生成のワークフローを参照してください。

エントリポイント関数myfitandevaluate.から墨西哥人関数を生成します。- args.オプションおよび细胞配列args.を使用して,入力引数の型を指定します。

Codegen.myfitandevaluate.-  args.args.
代码成功。

Codegen.(MATLAB编码器)は,プラットフォームに依存する张张子のmex关关myfitandevaluate_mex.を现出者ののフォルダー生成します。

生成されたコードの確認

データを渡して,myfitandevaluate.およびmyfitandevaluate_mex.が同じ出力を返すかどうかを確認します。

rng (“默认”的)%的再现性data = exprnd(1,[100,1]);%平均参数为1的指数随机数distname =.'指数';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 =指数分布指数分布MU = 0.917049截断到间隔[0,4]
pd_truncated_mex.
pd_truncated_mex = exponentialDistibution指数分布MU = 0.917049截断到间隔[0,4]
verifyMEX_pd = isequal (pd_truncated pd_truncated_mex)
verifyMEX_pd =逻辑1

是平等的は,逻辑1(真正的)を返します。これこれpd_trungated.pd_truncated_mex.が等しいことを意味します。

平均値,cdf値およびpdf値が含まれる構造体配列を比較します。

验证ex_st = isequal(st,st_mex)
验证ex_st =逻辑1

この比較により,myfitandevaluate.myfitandevaluate_mex.がが同じ结果を返すことを确认しし确认されたコードは,生成されたコードmatlabコードの相违点(MATLAB编码器)で説明するように,MATLABと同じ浮動小数点の数値結果を生成しない可能性があります。このような場合は,小さい誤差を許容して値を比較します。

2つのエントリポイント关键词使しワークフロー

エントリポイント関数には入力引数および出力引数の両方として確率分布オブジェクトを含めることができます。そのため,分布の近似用と近似分布の評価用に2つのエントリポイント関数を定義できます。次に2つのエントリポイント関数のコードを生成します。

エントリポイント関数の定義

2つのエントリポイント关键词定义のポイント关联myfitdist.は確率分布オブジェクトを標本データにあてはめます。2番目のエントリポイント関数MyevalutatiSt.は分布を打ち切り,打ち切られた分布の平衡値を计算し,指定したデータでcdf値とpdf値をします。MyevalutatiSt.myfitdist.の出力を入力引数としてとります。

myFitDist.mファイルとmyevaLiatist.m.ファイルの内容を表示します。

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

コードの生成

myfitdist.MyevalutatiSt.の入力引数の型を指定します。

ARGS_myFitDist =细胞(2,1);ARGS_myFitDist {1} = 1 (100 1);ARGS_myFitDist{2} =编码器。常数('指数');args_myevaliverist = cell(3,1);args_myevaliveist {1} = fitdist(Exprnd(1,[100,1]),'指数');ARGS_myEvaluateDist{2} = 1(1、2);ARGS_myEvaluateDist {3} = 1 (10, 1);

墨西哥人関数を生成する必要がない場合は,入力としてのエントリポイント关键词力の受け渡し(MATLAB编码器)で说明するように,args_myevaliverist {1}Coder.Outputtype('myfitdist')として指定できでき.mex关关を生成する合,编码器。OutputType(MATLAB编码器)は使用できませ。myfitdist.からの出力のデータ型が,生成された墨西哥人関数のMyevalutatiSt.への入力のデータ型と一致しないためです。

2つのエントリポイント关键

Codegen.- omyFitandEvaluate_mex2myfitdist.-  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] = myevaliveist(pd2,truncation_limits,x);pd_mex2 = myfitandevaluate_mex2('myfitdist'、数据distname);[pd_truncated_mex2, st_mex2] = myFitandEvaluate_mex2 ('myevaliveist',pd_mex2,truncation_limits,x);verifymex_pd2 = isequal(pd2,pd_mex2)
验证ex_pd2 =逻辑1
验证evex_pd_trungated2 = isequal(pd_truncated2,pd_truncated_mex)
验证ex_pd_trungated2 =逻辑1
验证ex_st2 = isequal(st2,st_mex2)
verifyMEX_st2 =逻辑1

是平等的は逻辑1(真正的)を返します。これは,エントリポイント关数と対応するMEX关数が同じ出力を返すことを意味します。

参考

(MATLAB编码器)|||||||

関連するトピック