diff options
Diffstat (limited to 'modules/cacsd/macros/lcf.sci')
-rwxr-xr-x | modules/cacsd/macros/lcf.sci | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/modules/cacsd/macros/lcf.sci b/modules/cacsd/macros/lcf.sci new file mode 100755 index 000000000..ed38155df --- /dev/null +++ b/modules/cacsd/macros/lcf.sci @@ -0,0 +1,39 @@ +// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab +// Copyright (C) INRIA - F. Delebecque +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt + +function [N,M]=lcf(Sl) + //Compute Normalized coprime factorization of a linear dynamic system + //%Syntax and parameters description + // [N,M]=lcf(Sl) + // + // SL : linear dynamic system given in state space or transfer function. + // see syslin + // N,M : is realization of Sl: Sl = M^-1 N + //! + + if and(typeof(Sl)<>["rational","state-space"]) then + error(msprintf(gettext("%s: Wrong type for input argument #%d: Linear state space or a transfer function expected.\n"),"lcf",1)) + end + if Sl.dt<>"c" then + error(msprintf(gettext("%s: Wrong type for argument #%d: In continuous time expected.\n"),"lcf",1)) + end + flag=0; + if typeof(Sl)=="rational" then Sl=tf2ss(Sl),flag=1;end + + [A,B,C,D]=Sl(2:5);[nw,nb]=size(B);[nc,nw]=size(C); + R=eye()+D*D'; + [Z,H]=gfare(Sl); + Ar=A+H*C; + Bn=B+H*D;Bm=H; + Rm12=inv(sqrtm(R)); + Cr=Rm12*C;Dn=Rm12*D;Dm=Rm12; + N=syslin("c",Ar,Bn,Cr,Dn); + M=syslin("c",Ar,Bm,Cr,Dm); + if flag==1 then N=ss2tf(N);M=ss2tf(M);end +endfunction |