QSS Control Input
This canonical example uses a simple singularly perturbed system to show how a quasi-steady-state approximation eliminates a fast state while keeping a constant or slowly varying control input.
Model
Consider
\[\dot{x} = -x + z, \qquad \epsilon \dot{z} = x - 2z + u, \qquad 0 < \epsilon \ll 1,\]
where \(u\) is a constant or slowly varying control input. This is the standard singularly perturbed form
\[\dot{x}=f(x,z,u), \qquad \epsilon\dot{z}=g(x,z,u).\]
[ ]:
from sympy import simplify, symbols
from autoreduce import System, solve_timescale_separation
x, z, u, epsilon = symbols("x z u epsilon")
system = System(
[x, z],
[
-x + z,
(x - 2 * z + u) / epsilon,
],
params=[u, epsilon],
params_values=[1.0, 0.01],
x_init=[0.0, 0.0],
)
Quasi-steady-state approximation
Because \(z\) evolves on the fast time scale, set \(\epsilon=0\) in the fast equation. This changes the differential equation into the algebraic constraint
\[0 = x - 2z + u.\]
Therefore, the quasi-steady value of \(z\) is
\[z = h(x,u) = \frac{x+u}{2}.\]
[ ]:
reduced_system, collapsed_system = solve_timescale_separation(
system,
slow_states=[x],
fast_states=[z],
)
[simplify(expr) for expr in reduced_system.f]
Reduced model
Substituting the quasi-steady value of \(z\) into the slow equation gives
\[\dot{x} = -x + \frac{x+u}{2} = -\frac{1}{2}x + \frac{1}{2}u.\]
The reduced AutoReduce system stores this one-state model in reduced_system.x and reduced_system.f.
[ ]:
reduced_system.x, reduced_system.f, collapsed_system.x