37 std::random_device device;
38 std::array<unsigned int,std::mt19937::state_size> seed;
39 std::generate_n(seed.data(), seed.size(), std::ref(device));
40 std::seed_seq seq(std::begin(seed), std::end(seed));
60 const std::string ornstein_uhlenbeck_process_program =
61 " const var mu := 1; "
62 " const var sigma := 0.4; "
63 " const var theta := 2; "
64 " const var tau := 1 / theta; "
65 " const var T := 10 * tau; "
66 " const var dt := 0.01 * tau; "
67 " const var num_steps := floor(T / dt); "
68 " const var stddev := sqrt(sigma^2 / (2 * theta) * (1 - exp(-2 * theta * dt))); "
69 " const var x_0 := 1.0; "
71 " var x[num_steps] := [0]; "
75 " for (var i := 0; i < num_steps - 1; i += 1) "
77 " var mean := x[i] * exp(-theta * dt) + mu * (1 - exp(-theta * dt)); "
79 " x[i + 1] := normal(mean,stddev); "
83 " for (var i := 0; i < x[]; i += 1) "
85 " println(i * dt, '\t', x[i]); "
92 symbol_table_t symbol_table;
93 symbol_table.add_function(
"println", println);
94 symbol_table.add_function(
"normal" , normal );
96 expression_t expression;
97 expression.register_symbol_table(symbol_table);
100 parser.compile(ornstein_uhlenbeck_process_program,expression);