State-space initial conditions

937 Views Asked by At

I have a state space system represented by the following system of equations. The state vector is defined by:

$$ \dot{X}\left(t\right)=\left[\begin{matrix}0&1\\a&b\\\end{matrix}\right]\left[\begin{matrix}x_1\\x_2\\\end{matrix}\right]+\left[\begin{matrix}0\\1\\\end{matrix}\right]u(t)$$

and the output vector by

$$Y\left(t\right)=\left[\begin{matrix}c&d\\\end{matrix}\right]\left[\begin{matrix}x_1\\x_2\\\end{matrix}\right]+[e]u(t) $$

I'm wondering how I would impose the initial condition that $ \frac{dY\left(0\right)}{dt}=C$ such that I could represent it in the from $$ x(0)=\left[\begin{matrix}x_{1,o}\\x_{2,o}\\\end{matrix}\right]$$ Let me know if you have any suggestions for how I would do this.

1

There are 1 best solutions below

0
On

To compute the required initial conditions just solve the derivative of the output for your desired rate of change. You have:

$$ \begin{align} \dot{x}_1 &= x_2 \\ \dot{x}_2 &= a x_1 + b x_2 + u \\ y &= c x_1 + d x_2 + e u \end{align} $$

So the derivative of the output is

$$ \begin{align} \dot{y} &= c \dot{x}_1 + d \dot{x}_2 + e \dot{u} \\ &= d (u + a x_1 + b x_2) + c x_2 + \dot{u} e \end{align} $$

So solving $\dot{y} = C$ for $x_1$, $x_2$ provides you some initial conditions:

$$ \begin{align} x_1(0) &= -\frac{\dot{u}(0) e - C + d u(0)}{a d} \\ x_2(0) &= 0 \end{align} $$

This choice will guarantee that $\dot{y}(0) = C$, while $a d \neq 0$ is required for this computation.

We can check that by setting for example $a=-2,b=-3,c=2,d=1,e=1,C=-10$. Assume the system input is $u=\sin(2t)$ so that $\dot{u}=2\cos(2t)$ and hence $u(0)=0,\dot{u}(0)=2$. Then a quick simulation gives:

enter image description here

So you can see that with this choice of initial conditions you can impose any initial output derivative you want.

Of course you need $\dot{u}(0)$ for this computation. If you don't have it available you could do several things to circumvent this problem, like:

  • Since you control $u$ demand $u = 0$ during the initialisation, since then $\dot{u} = 0$.
  • If your system is stable, use feedforward during initialization so that you can compute $\dot{u}$.
  • Approximate $\dot{u}$ with a high pass.
  • If $e$ is small, ignore the contribution of $\dot{u}$.

Which one of those (if any) will work for you will depend on your application and the goal you are trying to achieve.