https://github.com/gramian/emgr
Raw File
Tip revision: 17bd1773b6d08dee50c57fedcff7eafdc4080e87 authored by ch on 12 December 2015, 21:32:32 UTC
release 3.8
Tip revision: 17bd177
vernval.m
function vernval(J)
% vernval (verification and validation)
% by Christian Himpe, 2013-2015 ( http://gramian.de )
% released under BSD 2-Clause License ( opensource.org/licenses/BSD-2-Clause )
%*
    if(exist('emgr')~=2)
        error('emgr not found! Get emgr at: http://gramian.de');
    else
        global ODE; ODE = [];
        fprintf('emgr (version: %g)\n',emgr('version'));
    end

    rand('seed',1009);

    if(nargin==0) J=4; end	% number of inputs
    N = J*J;			% number of states
    O = J;			% number of outputs

    h = 0.01;			% time step
    T = 1.0;			% end time

    A = rand(N,N);		% random system matrix
    A(1:N+1:end) = -0.55*N;	% ensure stability
    A = 0.5*(A+A');		% symmetrize system matrix
    B = rand(N,J);		% random input matrix
    C = B';			% ensure state-space symmetric system
    P = zeros(N,1);		% parameter vector
    Q = ones(N,1)*[0,1.0];	% parameter range

    f = @(x,u,p) A*x+B*u+p;   	% linear dynamic system vector field
    g = @(x,u,p) C*x;       	% linear output functional

    G = @(x,u,p) A'*x+C'*u;	% adjoint dynamic system vector field

    WC = emgr(f,g,[J,N,O],[h,T],'c',P);
    Wc = emgr(G,g,[J,N,O],[h,T],'c',P);
    WO = emgr(f,g,[J,N,O],[h,T],'o',P);
    WX = emgr(f,g,[J,N,O],[h,T],'x',P);
    WY = emgr(f,G,[J,N,O],[h,T],'y',P);

    dWCWc = norm(WC-Wc,'fro')
    dWCWY = norm(WC-WY,'fro')
    dWCWO = norm(WC-WO,'fro')
    dWCWX = norm(WC-WX,'fro')
    dWOWX = norm(WO-WX,'fro')
    dWXWY = norm(WX-WY,'fro')

    WC = emgr(f,g,[J,N,O],[h,T],'c',P);
    WO = emgr(f,g,[J,N,O],[h,T],'o',P);
    WX = emgr(f,g,[J,N,O],[h,T],'x',P);
    WS = emgr(f,g,[J,N,O],[h,T],'s',Q);
    WI = emgr(f,g,[J,N,O],[h,T],'i',Q);
    WJ = emgr(f,g,[J,N,O],[h,T],'j',Q);

    dWCWS = norm(WC-WS{1},'fro')
    dWOWI = norm(WO-WI{1},'fro')
    dWXWJ = norm(WX-WJ{1},'fro')

    dWIWJ = norm(WI{2}-WJ{2},'fro')
end
back to top