小编kgl*_*glr的帖子

使用copula分布的和的分位数太慢

尝试使用具有Beta边缘的内置copula分布(Clayton,Frank,Gumbel)创建两个相关随机变量之和的分位数表.尝试NProbabilityFindRoot各种方法 - 不够快.我需要探索的copula-marginal组合的一个例子如下:

nProbClayton[t_?NumericQ, c_?NumericQ] := 
        NProbability[  x + y <= t, {x, y}  \[Distributed]    
               CopulaDistribution[{"Clayton", c}, {BetaDistribution[8, 2], 
                                                   BetaDistribution[8, 2]}]]
Run Code Online (Sandbox Code Playgroud)

对于使用的数值概率的单一评估

nProbClayton[1.9, 1/10] // Timing // Quiet
Run Code Online (Sandbox Code Playgroud)

我明白了

{4.914, 0.939718}
Run Code Online (Sandbox Code Playgroud)

在Vista 64bit Core2 Duo T9600 2.80GHz机器上(MMA 8.0.4)

要获得总和的分位数,请使用

FindRoot[nProbClayton[q, 1/10] == 1/100, {q, 1, 0, 2}// Timing // Quiet
Run Code Online (Sandbox Code Playgroud)

用各种方法

( `Method -> Automatic`, `Method -> "Brent"`, `Method -> "Secant"` ) 
Run Code Online (Sandbox Code Playgroud)

花大约一分钟才能找到一个分位数:时间是

{48.781, {q -> 0.918646}}
{50.045, {q -> 0.918646}}
{65.396, {q -> 0.918646}}
Run Code Online (Sandbox Code Playgroud)

对于其他copula-marginal组合,时间稍微好一些. …

performance wolfram-mathematica mathematica-8

6
推荐指数
1
解决办法
409
查看次数