首先,看起来您使用random
. 其次,您是正确的,因为 MatlabProbDist
类的文档不是特别好并且缺少示例。
让我们使用与您使用的参数相匹配的这些参数(但是我不确定您是否有界限,a
和b
,是否意味着概率,P(X)
-您是否要在一系列概率上进行积分?-在这种情况下,您实际上想使用逆CDF):
mu = 1; sig = 1;
a = 0.3; b = 0.6;
根据您的需要,您有多种选择。使用该integral
函数执行数值积分(正交)可能是最简单的。首先,您可以自己实现 CDF:
normalCDF = @(t,mu,sig)(1+erf((t-mu)./(sqrt(2)*sig)))/2;
q = integral(@(t)normalCDF(t,mu,sig),a,b)
或者使用旧式 cdf 函数之一,normcdf
在这种情况下:
q = integral(@(t)normcdf(t,mu,sig),a,b)
或者使用通用cdf
函数(键入help cdf
以查看旧式 CDF 的所有受支持发行版的列表):
q = integral(@(t)cdf('norm',t,mu,sig),a,b)
或者使用新的ProbDistUnivParam
类方法之一:
normalPD = ProbDistUnivParam('normal',[mu sig]);
q = integral(@(t)normalPD.cdf(t),a,b)
有关此新类支持的发行版列表,请参见此处。请注意,不要与上面使用的函数.cdf(t)
混淆。cdf
这是ProbDistUnivParam
该类的一种方法。键入help ProbDistUnivParam
和help ProbDistUnivParam/cdf
。
如果您想尝试解决符号解决方案,那么您可能需要自己实现 CDF 函数。大多数高级 Matlab 函数仅支持浮点计算,除非它们是符号工具箱的一部分。以下是您可以使用以下符号解决这些问题的方法int
:
syms t MU SIG A B real
normalCDFsym = (1+erf((t-MU)./(sqrt(2)*SIG)))/2;
qsym = simplify(int(normalCDFsym,t,A,B)); % Solve integral symbolically
pretty(qsym) % Print out result
q = subs(qsym,{MU,SIG,A,B},{mu,sig,a,b}) % Plug in numeric values
请注意,对于更复杂的分布,您可能并不总是能够获得解决方案。另外,我在这里留下了MU
, SIG
, A
, 和B
所有的符号。在某些情况下,您可能无法获得包含所有符号参数的解决方案,因此如果您知道这些值是什么,您可以尝试让其中一些成为显式值,例如:
syms t MU A real
normalCDFsym = (1+erf((t-MU)./(sqrt(2)*sym(1))))/2;
qsym = simplify(int(normalCDFsym,t,A,sym(0.6))); % Solve integral symbolically
pretty(qsym) % Print out result
q = subs(qsym,{MU,A},{mu,a}) % Plug in numeric values