Discrete state space system is stable but has strange convergence

261 Views Asked by At

I am working on a real-world system that follows:

$$x_{k} = Bu_k + z_0\\ u_{k+1} = u_k + x_k$$

or equivalently:

$$u_{k+1} = (B + I) u_k + z_0$$

where $z_0$ is a unknown given constant, $B$ is a time-invariant matrix, for example a misalignment perturbation (see below). The initial conditions are $x_0 = 0$ and $u_0 = 0$. I would like $\forall z_0$ the infinite state $x_{\infty} = 0$.

Following MATLAB code simulates the system's behavior:

clc;clear;

n = 10;

% set z0
z0 = 10*fspecial('gaussian', [n 1], 1e2);

% define matrices
I = eye(n);
mis = 0.6;
B = -toeplitz([1-mis; zeros(n-1,1)],[1-mis mis zeros(1,n-2)]);
B = B(:,1:n);

% initial conditions
u = zeros(n,1);
x = zeros(n,1);

% the loop
for i = 1:100
    x = B*u + z0;
    u = u + x;
    disp(['i = ' num2str(i) ', ||x|| = ' num2str(norm(x))]);
end

For two different mis values I gotenter image description here

My questions:

  • Why is this happening?

  • For mis = 0.6, how can I find a function $f(\cdot)$ that $u_{k+1} = f(u_k,x_k)$ to ensure a convergence like mis = 0.4? I don't want the peaks.

Thanks and any hints are appreciated.

1

There are 1 best solutions below

2
On BEST ANSWER

So you want as time goes to infinity that $x$ goes to zero. In your question you state that $x_0=0$, however in your implementation it actually comes down to $x_0=z_0$ since you iterate it first before you display it. By substituting in the update formula for $u$ and using the definition of $x$ itself an update formula for $x$ can be shown to be equal to

$$ x_{k+1} = (B + I)\,x_k. $$

This system only converges to zero if $B+I$ is a Schur matrix (all its eigenvalues are within the unit circle centered at the origin of the complex plane). This in turn implies that $B$ should have all its eigenvalues within the unit circle centered at minus one.

The rate at which $x$ goes to zero will be bounded by the eigenvalue of $B+I$ with the largest magnitude, denoted by $|\lambda|_\max$. Namely an upper bound for $\|x\|$ can be shown to be

$$ \|x_k\| \leq \alpha\,|\lambda|_\max^k\,\|x_0\| $$

with $\alpha>0$ and a bounded constant.

If you only have freedom in choosing how you update $u$, then if you would change it to the following form

$$ u_{k+1} = u_k + B^{-1}(A - I)\,x_k $$

then the update formula for $x$ would simply become

$$ x_{k+1} = A\,x_k. $$

For this I do assume that $B$ is invertible. So if you want the same dynamics as mis=0.4 you could choose $A = B_{0.4} + I$. Where the $B$ used in the new update formula for $u$ for your example would be with mis=0.6 and $B_{0.4}$ refers to the $B$ matrix when mis=0.4. However if you want much faster convergence you could just use $A=0$.