m (→Usage) |
m (code formatting) |
||
Line 20: | Line 20: | ||
Use the following matlab code to generate a random system as described above: |
Use the following matlab code to generate a random system as described above: |
||
+ | <div class="thumbinner" style="width:540px;text-align:left;"><!--[[Media:ilp.m|--> |
||
<source lang="matlab"> |
<source lang="matlab"> |
||
Line 70: | Line 71: | ||
</source> |
</source> |
||
+ | <!--]]--></div> |
||
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>. |
||
Line 81: | Line 83: | ||
'''ilp''' is compatible with [[wikipedia:MATLAB|MATLAB]] and [[wikipedia:GNU_Octave|OCTAVE]]. |
'''ilp''' is compatible with [[wikipedia:MATLAB|MATLAB]] and [[wikipedia:GNU_Octave|OCTAVE]]. |
||
− | The matlab code can be downloaded: [[Media:ilp.m |
+ | The matlab code can be downloaded: [[Media:ilp.m|ilp.m]]. |
The required [[Emgr|Empirical Gramian Framework]] can be obtained from [http://gramian.de/emgr.m http://gramian.de]. |
The required [[Emgr|Empirical Gramian Framework]] can be obtained from [http://gramian.de/emgr.m http://gramian.de]. |
||
Revision as of 14:17, 15 June 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. In aggregate form, for randomly generated controllability and observability gramians, a balancing transformation is computed. The balanced gramian is the basis for an associated state-space system, which is determined by solving a Lyapunov equation and then unbalanced. 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 for a stable system, yet with a non-unique solution.
Implementation
An efficient approach to solving the Lyapunov equation is provided by empirical gramians.
Usage
Use the following matlab code to generate a random system as described above:
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 , of states
and outputs
.
Optionally, a symmetric system can be enforced with the parameter
.
For reproducibility, the random number generator seed can be controlled by the parameter
.
The return value consists of three matrices; the system matrix
, the input matrix
and the output matrix
.
[A,B,C] = ilp(J,N,O,s,r);
ilp is compatible with MATLAB and OCTAVE. The matlab code can be downloaded: ilp.m. The required Empirical Gramian Framework can be obtained from http://gramian.de.
References
- ↑ S.C. Smith, J. Fisher, "On generating random systems: a gramian approach", Proceedings of the American Control Conference, 2003.