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 got
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 likemis = 0.4? I don't want the peaks.
Thanks and any hints are appreciated.
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.4you could choose $A = B_{0.4} + I$. Where the $B$ used in the new update formula for $u$ for your example would be withmis=0.6and $B_{0.4}$ refers to the $B$ matrix whenmis=0.4. However if you want much faster convergence you could just use $A=0$.