模拟几何布朗运动

时间:2017-03-11 17:07:00

标签: c++ montecarlo

背景资料:

考虑Psedocode:

enter image description here

问题:

我正在尝试在C ++中实现上述内容,但我真的不明白如何正确实现它。注意,ZZ是伪代码中的Z_ij。我们有S[0] = 50。这是我的代码:

for(int j = 1; j <= N; j++){
    for(int i = 1; i <= n; i++){
        S[i] = S[i-1]*exp((mu - sigma/2)*(t[i] - t[i-1]) + sqrt(sigma)*sqrt(t[i] - t[i-1])*ZZ[i]);
    }
}

N = 10000n = 10。我知道我的外部循环除了加热我的cpu之外什么也没做,但是我不确定如何使用上面Pseudocode的外部循环。非常感谢任何建议。

这是我创建的时间向量,我们使用10个时间步长t_0 = 0,t_1 = \ Delta t,t_2 = 2 \ Delta t,...,t_10 = 10 \ Delta t = T.注意T = 1这是代码:

double t[n+1];
for(int i = 0; i <= n; i++){
    t[i] = (double)i*T/(n-1);
}

2 个答案:

答案 0 :(得分:1)

'Z_i,j'取决于两个循环,即。索引I和j。你也错过了函数M(Phi_i(j))。这个函数使得依赖于两个索引。

答案 1 :(得分:0)

你需要改变t数组(我想是时候了)。

for(int j = 1; j < N; j++){
    for(int i = 1; i < n; i++){
        t[i] = t[i-1] + deltat;
        S[i] = S[i-1]*exp((mu - sigma/2)*(t[i] - t[i-1]) + sqrt(sigma)*sqrt(t[i] - t[i-1])*ZZ[i]);
    } }