diff options
Diffstat (limited to 'modules/cacsd/macros/sm2des.sci')
-rwxr-xr-x | modules/cacsd/macros/sm2des.sci | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/modules/cacsd/macros/sm2des.sci b/modules/cacsd/macros/sm2des.sci new file mode 100755 index 000000000..7c87c5b3a --- /dev/null +++ b/modules/cacsd/macros/sm2des.sci @@ -0,0 +1,38 @@ +// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab +// Copyright (C) INRIA - +// +// 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 des=sm2des(sysmat,n) + // Generalized system-matrix to descriptor + // sysmat=[-s E + A , B; C , D] + // des=list('des',A,B,C,D,E) + // n=size(A) (assumed square) (optional parameter) + + [LHS,RHS]=argn(0) + [nl,nc]=size(sysmat); + E=-coeff(sysmat,1); + if RHS==1 then + k=nc;n=k; + while E(:,k)==0*E(:,k) + k=k-1;n=k; + end + l=nl;n1=l; + while E(l,:)==0*E(l,:) + l=l-1;n1=l; + end + if n1<>n then + warning(msprintf(gettext("%s: Cannot find the state dimension.\n"),"sm2des")); + end + end + E=E(1:n,1:n); + A=coeff(sysmat(1:n,1:n),0); + B=coeff(sysmat(1:n,n+1:nc),0); + C=coeff(sysmat(n+1:nl,1:n),0); + D=coeff(sysmat(n+1:nl,n+1:nc),0); + des=tlist(["des","A","B","C","D","E"],A,B,C,D,E); +endfunction |