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

Difference between revisions of "Inverse Lyapunov Procedure"

m
(reproducibility)
Line 14: Line 14:
 
==Usage==
 
==Usage==
   
Use the following matlab code to generate a random system by ilp:
+
Use the following matlab code to generate a random system by [[Media:ilp.m|ilp]]:
 
   
 
<source lang="matlab">
 
<source lang="matlab">
   
function [A B C] = ilp(J,N,O,s)
+
function [A B C] = ilp(J,N,O,s,r)
 
% ilp (inverse lyapunov procedure)
 
% ilp (inverse lyapunov procedure)
 
% by Christian Himpe, 2013 ( http://gramian.de )
 
% by Christian Himpe, 2013 ( http://gramian.de )
Line 26: Line 25:
   
 
if(exist('emgr')~=2) disp('emgr framework is required. Download at http://gramian.de/emgr.m'); return; end
 
if(exist('emgr')~=2) disp('emgr framework is required. Download at http://gramian.de/emgr.m'); return; end
  +
  +
if(nargin==5) rand('seed',r); randn('seed',r); end;
   
 
%% Gramian Eigenvalues
 
%% Gramian Eigenvalues
Line 65: Line 66:
   
 
</source>
 
</source>
 
 
   
 
The function call requires three parameters; the number of inputs <math>J</math>, of states <math>N</math> and outputs <math>O</math>.
 
The function call requires three parameters; the number of inputs <math>J</math>, of states <math>N</math> and outputs <math>O</math>.
 
Optionally, a symmetric system can be enforced with the parameter <math>s=1</math>.
 
Optionally, a symmetric system can be enforced with the parameter <math>s=1</math>.
  +
For reproducibility, the random number generator seed can be controlled by the parameter <math>r \in \mathbb{N}</math>.
 
The return value consists of three matrices; the system matrix <math>A</math>, the input matrix <math>B</math> and the output matrix <math>C</math>.
 
The return value consists of three matrices; the system matrix <math>A</math>, the input matrix <math>B</math> and the output matrix <math>C</math>.
   
 
:<source lang="matlab">
 
:<source lang="matlab">
[A,B,C] = ilp(J,N,O,s);
+
[A,B,C] = ilp(J,N,O,s,r);
 
</source>
 
</source>
   
 
'''ilp''' is compatible with [[wikipedia:MATLAB|MATLAB]] and [[wikipedia:GNU_Octave|OCTAVE]];
The matlab code can be downloaded: [[Media:ilp.m.tar.gz|ilp.m]].
 
The required [[Emgr|Empirical Gramian Framework]] can be obtained from [http://gramian.de/emgr.m http://gramian.de].
+
and the required [[Emgr|Empirical Gramian Framework]] can be obtained from [http://gramian.de/emgr.m http://gramian.de].
The '''ilp''' generator is compatible with [[wikipedia:MATLAB|MATLAB]] and [[wikipedia:GNU_Octave|OCTAVE]].
 
   
 
==References==
 
==References==

Revision as of 20:35, 22 May 2013


Description

The Inverse Lyapunov Procedure (ilp) is a synthetic random linear system generator. It is based on reversing the Balanced Truncation procedure and was developed in [1], where a description of the algorithm is given.

A central point is the solution of the Lyapunov equations for the system matrix instead of the gramian matrix. This is feasable due to the symmetric (semi-)positive definiteness of the gramians and the requirement of a stable system. The solution will not be unique and include a symmetric system matrix, yet can be solved efficiently using empirical gramians.

Usage

Use the following matlab code to generate a random system by ilp:

function [A B C] = ilp(J,N,O,s,r)
% ilp (inverse lyapunov procedure)
% by Christian Himpe, 2013 ( http://gramian.de )
% released under BSD 2-Clause License ( http://gramian.de/#license )
%*

if(exist('emgr')~=2) disp('emgr framework is required. Download at http://gramian.de/emgr.m'); return; end

if(nargin==5) rand('seed',r); randn('seed',r); end;

%% Gramian Eigenvalues
 WC = exp(-N + N*rand(N,1));
 WO = exp(-N + N*rand(N,1));

%% Gramian Eigenvectors
 X = randn(N,N);
 [U E V] = svd(X);

%% Balancing Trafo
 [P D Q] = svd(diag(WC.*WO));
 W = -D;

%% Input and Output
 B = randn(N,J);

 if(nargin<4 || s==0)
        C = randn(O,N);
 else
        C = B';
 end

%% Scale Output Matrix
 BB = sum(B.*B,2);  % = diag(B*B')
 CC = sum(C.*C,1)'; % = diag(C'*C)
 C = bsxfun(@times,C,sqrt(BB./CC)');

%% Solve System Matrix
 f = @(x,u,p) W*x+B*u;
 g = @(x,u,p) C*x;
 A = -emgr(f,g,[J N O],0,[0 0.01 1],'c');

%% Unbalance System
 T = U'*P';
 A = T*A*T';
 B = T*B;
 C = C*T';

The function call requires three parameters; the number of inputs J, of states N and outputs O. Optionally, a symmetric system can be enforced with the parameter s=1. For reproducibility, the random number generator seed can be controlled by the parameter r \in \mathbb{N}. The return value consists of three matrices; the system matrix A, the input matrix B and the output matrix C.

[A,B,C] = ilp(J,N,O,s,r);

ilp is compatible with MATLAB and OCTAVE; and the required Empirical Gramian Framework can be obtained from http://gramian.de.

References

  1. S.C. Smith, J. Fisher, "On generating random systems: a gramian approach", Proceedings of the American Control Conference, 2003.


Contact

Christian Himpe