Skip to main content

Solving

After creating your Temporal Variables, you can simulate your system using:

vip.solve(t_end)

This will integrate the system from time t = 0 to t = t_end.

Choosing Time Points

The vip.solve() function supports different ways to define the time points of the simulation:

  • Fixed time step (default):
    Specify the time_step argument to produce outputs at regular intervals.
  • Automatic time points:
    Leave time_step=None to output only the time points that the solver chooses adaptively.
  • Custom time points:
    Provide a list of time values using the t_eval argument.

If your system includes crossing detections, you can disable automatic insertion of crossing time points by setting:

include_crossing_times=False

Choosing a Solving Method

You can choose among several integration methods provided by SciPy by setting the method argument:

MethodWhen to UseNotes
"RK45" (default)General-purpose for smooth, non-stiff problemsFast, accurate, and a good default choice.
"RK23"Same as RK45, but with lower-order accuracyTakes more steps, useful if you need dense sampling.
"DOP853"For very smooth problems requiring high precisionHigher-order method. Slower but more accurate for some problems.
"Radau"For stiff problemsImplicit solver, stable for stiff systems but slower.
"BDF"Also for stiff systems, especially long simulationsMulti-step implicit solver. Efficient for large or slowly evolving systems.
"LSODA"Unsure whether the system is stiff or not?Automatically switches between stiff and non-stiff solvers. Great for mixed or unknown cases.

👉 See SciPy’s solve_ivp() documentation for technical details on each method.

Controlling Precision

Solvers approximate the true solution. You can control the precision using the following parameters:

  • rtol: Relative tolerance (default: 1e-3)
  • atol: Absolute tolerance (default: 1e-6)

The solver ensures the local error stays below:

atol + rtol * abs(y)

You can also set the max_step argument to limit how far the solver can go in one integration step, which can improve precision.

note

Difference between max_step and time_step:

  • max_step controls the maximum internal step size used by the solver.
  • time_step defines how often the solution is output. It does not modify how the integration method works. However, events are evaluated at each time step, so a smaller time step may detect higher frequency events.

Other Options

  • plot=False:
    Disables the automatic plotting of variables marked with .to_plot().

  • verbose=True:
    Prints useful information about the solver, performance, and triggered events.