Anonymous
×
Create a new article
Write your page title here:
We currently have 105 articles on MOR Wiki. Type your article name above or click on one of the titles below and start writing!



MOR Wiki


Description

This procedural benchmark generates an all-pass SISO system based on [1]. For an all-pass system, the transfer function has the property g(s)g(-s) = \sigma^2, \sigma > 0, or (equivalently) the controllability and observability Gramians are quasi inverse to each other: W_C W_O = \sigma I, which means this system has a single Hankel singular value of multiplicity of the system's order. The system matrices are constructed based on the scheme:


\begin{align}
A &=
\begin{pmatrix}
  a_{1,1} & -\alpha_1 \\
  \alpha_1 & 0 & -\alpha_2 \\
  & \alpha_2 & 0 & \ddots \\
  & & \ddots & \ddots & -\alpha_{N-1} \\
  & & & \alpha_{N-1} & 0
\end{pmatrix}, \\
B &=
\begin{pmatrix}
  b_1 \\
  0 \\
  \vdots \\
  0
\end{pmatrix}, \\
C &=
\begin{pmatrix}
  s_1 b_1 & 0 & \cdots & 0
\end{pmatrix}, \\
D &= -s_1 \sigma. 
\end{align}

We choose s_1 \in \{-1,1\} to be s_1 \equiv -1, as this makes the system state-space-anti-symmetric. Furthermore, b_1 = 1 and \sigma = 1, which makes a_{1,1} = -\frac{b_1^2}{2 \sigma} = -\frac{1}{2}.

Data

This benchmark is procedural and the state dimensions can be chosen. Use the following MATLAB code to generate a random system as described above:

function [A,B,C,D] = allpass(n)
% allpass (all-pass system)
% by Christian Himpe, 2020
% released under BSD 2-Clause License
%*

    A = gallery('tridiag',n,-1,0,1);
    A(1,1) = -0.5;
    B = sparse(1,1,1,n,1);
    C = -B';
    D = 1;
end

The function call requires one argument; the number of states n. The return value consists of four matrices; the system matrix A, the input matrix B, the output matrix C, and the feed-through matrix D.

[A,B,C,D] = allpass(n);

An equivalent Python code is

from scipy.sparse import diags, lil_matrix

def allpass(n):
    A = diags([-1, 0, 1], offsets=[-1, 0, 1], shape=(n, n), format='lil')
    A[0, 0] = -0.5
    A = A.tocsc()
    B = lil_matrix((n, 1))
    B[0, 0] = 1
    B = B.tocsc()
    C = -B.T
    D = 1
    return A, B, C, D

Dimensions


\begin{align}
\dot{x}(t) &= Ax(t) + Bu(t) \\
y(t) &= Cx(t) + Du(t)
\end{align}

System dimensions:

A \in \mathbb{R}^{n \times n}, B \in \mathbb{R}^{n \times 1}, C \in \mathbb{R}^{1 \times n}, D \in \mathbb{R}.

Citation

To cite this benchmark, use the following references:

  • For the benchmark itself and its data:
The MORwiki Community, All-Pass System. MORwiki - Model Order Reduction Wiki, 2020. http://modelreduction.org/index.php/All_pass_system
@MISC{morwiki_allpass,
  author =       {{The MORwiki Community}},
  title =        {All-Pass System},
  howpublished = {{MORwiki} -- Model Order Reduction Wiki},
  url =          {https://modelreduction.org/morwiki/index.php/All_pass_system},
  year =         {2020}
}

References