Control

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

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

\begin{align*}
    \dot x(z,t) &= a_2 x''(z,t) + a_1 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 from the target system

\begin{align*}
    \dot{\bar{x}}(z,t) &= a_2 \bar x''(z,t) + \bar a_1 \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_1,\, \bar a_0,\, \bar\alpha,\, \bar\beta are controller parameter.

For this purpose the backstepping method is used for controller design, where the backstepping transformation

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

is used to transform the origninal system into the target system.

Note

For more details see:

  • Example pyinduct.examples.rad_eq_const_coeff
  • 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
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_zz (numbers.Number) –

    Integral kernel

    k(z,z) = \bar\alpha - \alpha + \frac{a_0-\bar a_0}{a_2} z

  • original_beta (numbers.Number) – \beta
  • target_beta (numbers.Number) – \bar\beta
  • 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

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.

k1+k2=n is calculated such that n is odd and a=k1*l_0 is close to a_desired. Three modes are available:

  • ‘force_k2_as_prime_number’: k2 is an prime number (k1, k2 are coprime)
  • ‘coprime’: k1, k2 are coprime (default)
  • ‘one_even_one_odd’: one is even one is odd.