【发布时间】:2014-04-04 11:01:54
【问题描述】:
我想模拟一些作为方差 Gamma 分布的随机变量。
我知道 pdf (http://en.wikipedia.org/wiki/Variance-gamma_distribution),但我不知道累积函数 F 的逆:所以我无法生成随机统一变量 U 并计算 x=F^(-1)(U).
我必须在 MATLAB 中执行此操作。
谢谢!
斯特凡诺
【问题讨论】:
标签: matlab
我想模拟一些作为方差 Gamma 分布的随机变量。
我知道 pdf (http://en.wikipedia.org/wiki/Variance-gamma_distribution),但我不知道累积函数 F 的逆:所以我无法生成随机统一变量 U 并计算 x=F^(-1)(U).
我必须在 MATLAB 中执行此操作。
谢谢!
斯特凡诺
【问题讨论】:
标签: matlab
下一个值得研究的自然选择是冯诺依曼的“接受-拒绝方法”。
如果您可以找到与您的f 在同一空间上定义的密度g,则
g 生成样本,并且那么你就可以走了。
如果您搜索文献,人们一定已经这样做了。 VG 广泛用于定价选项。
【讨论】:
遵循@Drake 的想法:第一步,您可以使用here 中的Marsaglia 和Tsang 方法。
这是生成伽马随机数的代码:
function x=gamrand(alpha,lambda)
% Gamma(alpha,lambda) generator using Marsaglia and Tsang method
% Algorithm 4.33
if alpha>1
d=alpha-1/3; c=1/sqrt(9*d); flag=1;
while flag
Z=randn;
if Z>-1/c
V=(1+c*Z)^3; U=rand;
flag=log(U)>(0.5*Z^2+d-d*V+d*log(V));
end
end
x=d*V/lambda;
else
x=gamrand(alpha+1,lambda);
x=x*rand^(1/alpha);
end
【讨论】: