Control

get_parabolic_robin_backstepping_controller(state, approx_state, d_approx_state, approx_target_state, d_approx_target_state, integral_kernel_ll, original_beta, target_beta, scale=None)[source]

Build a modal approximated backstepping controller u(t)=(Kx)(t), for the (open loop-) diffusion system with reaction term, robin boundary condition and robin actuation

\begin{align*}
    \dot x(z,t) &= a_2 x''(z,t) + a_0 x(z,t),
     && z\in (0, l) \\
    x'(0,t) &= \alpha x(0,t) \\
    x'(l,t) &= -\beta x(l,t) + u(t)
\end{align*}

such that the closed loop system has the desired dynamic of the target system

\begin{align*}
    \dot{\bar{x}}(z,t) &= a_2 \bar x''(z,t) +
    \bar a_0 \bar x(z,t), && z\in (0, l) \\
    \bar x'(0,t) &= \bar\alpha \bar x(0,t) \\
    \bar x'(l,t) &= -\bar\beta x(l,t)
\end{align*}

where \bar a_0,\, \bar\alpha,\, \bar\beta are controller parameters.

The control design is performed using the backstepping method, whose integral transform

\bar x(z) = x(z) + \int_0^z k(z, \bar z) x(\bar z) \, d\bar z

maps from the original system to the target system.

Note

For more details see the example script pyinduct.examples.rad_eq_const_coeff that implements the example from [WoiEtAl17] .

Parameters:
  • state (list of ScalarTerm’s) – Measurement / value from simulation of x(l).
  • approx_state (list of ScalarTerm’s) – Modal approximated x(l).
  • d_approx_state (list of ScalarTerm’s) – Modal approximated x'(l).
  • approx_target_state (list of ScalarTerm’s) – Modal approximated \bar x(l).
  • d_approx_target_state (list of ScalarTerm’s) – Modal approximated \bar x'(l).
  • integral_kernel_ll (numbers.Number) –

    Integral kernel evaluated at \bar z = z = l :

    k(l, l) = \bar\alpha
- \alpha
+ \frac{a_0-\bar a_0}{a_2} l \:.

  • original_beta (numbers.Number) – Coefficient \beta of the original system.
  • target_beta (numbers.Number) – Coefficient \bar\beta of the target system.
  • scale (numbers.Number) – A constant c \in \mathbb R to scale the control law: u(t) = c \, (Kx)(t).
Returns:

(Kx)(t)

Return type:

Controller

[WoiEtAl17]Frank Woittennek, Marcus Riesmeier and Stefan Ecklebe; On approximation and implementation of transformation based feedback laws for distributed parameter systems; IFAC World Congress, 2017, Toulouse
split_domain(n, a_desired, l, mode='coprime')[source]

Consider a domain [0,l] which is divided into the two sub domains [0,a] and [a,l] with the discretization l_0 = l/n and a partition a + b = l.

Calculate two numbers k_1 and k_2 with k_1 + k_2 = n such that n is odd and a = k_1l_0 is close to a_desired.

Parameters:
  • n (int) – Number of sub-intervals to create (must be odd).
  • a_desired (float) – Desired partition size a .
  • l (float) – Length l of the interval.
  • mode (str) –

    Operation mode to use:

    • ’coprime’: k_1 and k_2 are coprime (default) .
    • ’force_k2_as_prime_number’: k_2 is a prime number (k_1 and k_2 are coprime)
    • ’one_even_one_odd’: One is even and one is odd.