import torch
import numpy as np
import matplotlib.pyplot as plt
from onyxengine import Onyx
onyx = Onyx()
model = onyx.load_model('my_uncertainty_model')
# Set up simulation
batch_size = 1
seq_len = model.config.sequence_length
sim_steps = 200
velocity = torch.zeros(batch_size, seq_len, 1)
position = torch.zeros(batch_size, seq_len, 1)
control_input = torch.ones(batch_size, seq_len + sim_steps, 1)
# Run simulation
result = model.simulate(
x0={'velocity': velocity, 'position': position},
external_inputs={'control_input': control_input},
sim_steps=sim_steps
)
# output_uncertainties is a FeatureTrajectory (or None if model wasn't trained with uncertainty)
# Values are variance in real-world units
accel_variance = result.output_uncertainties['acceleration'] # Shape: (batch_size, sim_steps, 1)
accel_std = torch.sqrt(accel_variance)
# Plot mean prediction with confidence bands
time = np.arange(sim_steps) * model.config.dt
accel_mean = result.outputs['acceleration'][0, :, 0].cpu().numpy()
accel_std_np = accel_std[0, :, 0].cpu().numpy()
plt.figure(figsize=(10, 4))
plt.plot(time, accel_mean, label='Mean prediction')
plt.fill_between(
time,
accel_mean - 2 * accel_std_np,
accel_mean + 2 * accel_std_np,
alpha=0.3,
label='±2σ confidence'
)
plt.xlabel('Time (s)')
plt.ylabel('Acceleration')
plt.legend()
plt.title('Simulation with Uncertainty Bands')
plt.show()