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