def test_ParameterInDistribution(self): shape = 10, 100 a = 1e-2 * torch.ones((shape[0], 1)) dt = 1e-2 dist = Normal(loc=0., scale=Parameter(Exponential(10.))) init = Normal(a, 1.) sde = AffineEulerMaruyama((f_sde, g_sde), (a, 0.15), init, dist, dt=dt, num_steps=10) sde.sample_params(shape) # ===== Initialize ===== # x = sde.i_sample(shape) # ===== Propagate ===== # num = 1000 samps = [x] for t in range(num): samps.append(sde.propagate(samps[-1])) samps = torch.stack(samps) self.assertEqual(samps.size(), torch.Size([num + 1, *shape])) # ===== Sample path ===== # path = sde.sample_path(num + 1, shape) self.assertEqual(samps.shape, path.shape)
def test_SDE(self): shape = 1000, 100 a = 1e-2 * torch.ones((shape[0], 1)) dt = 0.1 norm = Normal(0., math.sqrt(dt)) init = Normal(a, 1.) sde = AffineEulerMaruyama((f_sde, g_sde), (a, 0.15), init, norm, dt=dt, num_steps=10) # ===== Initialize ===== # x = sde.i_sample(shape) # ===== Propagate ===== # num = 100 samps = [x] for t in range(num): samps.append(sde.propagate(samps[-1])) samps = torch.stack(samps) self.assertEqual(samps.size(), torch.Size([num + 1, *shape])) # ===== Sample path ===== # path = sde.sample_path(num + 1, shape) self.assertEqual(samps.shape, path.shape)