Poisson Sampling#
Evaluate the MC simulation for The Poisson process against the analytical PDF.
from quantflow.sp.poisson import PoissonProcess
from quantflow.utils import plot
import ipywidgets as widgets
import plotly.graph_objects as go
def simulate():
pr = PoissonProcess(intensity=intensity.value)
paths = pr.sample(samples.value, 1, 1000)
pdf = paths.pdf(delta=1)
pdf["simulation"] = pdf["pdf"]
pdf["analytical"] = pr.marginal(1).pdf(pdf.index)
return pdf
def on_intensity_change(change):
df = simulate()
fig.data[0].x = df.index
fig.data[0].y = df["simulation"]
fig.data[1].x = df.index
fig.data[1].y = df["analytical"]
intensity = widgets.IntSlider(description="intensity")
samples = widgets.IntSlider(description="paths", min=100, max=10000, step=100)
intensity.value = 50
samples.value = 1000
intensity.observe(on_intensity_change)
samples.observe(on_intensity_change)
df = simulate()
simulation = go.Bar(x=df.index, y=df["simulation"], name="simulation")
analytical = go.Scatter(x=df.index, y=df["analytical"], name="analytical")
fig = go.FigureWidget(data=[simulation, analytical])
widgets.VBox([intensity, samples, fig])