在固定时间范围内模拟抛硬币并增加步数

Simulating coin tosses on a fixed time scale and increasing the # of steps

我已经编写了一些基本的(和常用的代码)来模拟 Weiner 过程。最近,我看了 Paul Wilmott Introduces Quantitative Finance(第二版,第 5 章,第 122 页),其中一张图表显示了增加步数(同时将 T 固定为 1)对抛硬币实验的影响。 我不太确定如何创建此图表。

代码比较基础,但我会分享它:

def brownian(num_steps):
    w = np.ones(num_steps)     
    for i in range(1, num_steps):
        yi = np.random.choice([-1, 1])
        # dW
        w[i] = w[i-1]  + yi/np.sqrt(num_steps)
    return w

问题是我不太清楚如何让num步进区间[0, 1](即图中x轴的时间长度)。 希望得到一些指导 谢谢

你可以试试这个:

import numpy as np
import matplotlib.pyplot as plt


def brownian(num_steps):
    rng = np.random.default_rng()
    w = np.cumsum(2 * rng.integers(0, 2, num_steps-1) - 1)
    return np.r_[0, w] / np.sqrt(num_steps)

num_steps = 50
plt.style.use('seaborn-whitegrid')
plt.plot(np.linspace(0, 1, num_steps), brownian(num_steps))
plt.show()

它给出: