summaryrefslogtreecommitdiff
path: root/modules/cacsd/macros/sysfact.sci
diff options
context:
space:
mode:
Diffstat (limited to 'modules/cacsd/macros/sysfact.sci')
-rwxr-xr-xmodules/cacsd/macros/sysfact.sci44
1 files changed, 44 insertions, 0 deletions
diff --git a/modules/cacsd/macros/sysfact.sci b/modules/cacsd/macros/sysfact.sci
new file mode 100755
index 000000000..d9a824129
--- /dev/null
+++ b/modules/cacsd/macros/sysfact.sci
@@ -0,0 +1,44 @@
+// 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 [S,Series]=sysfact(Sys,Gain,flag)
+ //For Sys=[A,B,C,D],
+ //if flag=='post' returns S = [A+B*Gain, B , Gain, I]
+ // and Series = minss(Sys*S)
+ //if flag=='pre' returns S=[A+Gain*C, Gain , C, I]
+ // and Series = minss(S*Sys)
+ if flag=="post" then
+ S=syslin(Sys("dt"),Sys("A")+Sys("B")*Gain, Sys("B"), Gain, eye(Gain*Sys("B")));
+ //Series=minss(Sys*S);
+ Series= syslin("c",Sys("A")+Sys("B")*Gain, Sys("B"), Sys("C")+Sys("D")*Gain, Sys("D"));
+ end
+ if flag=="pre" then
+ S=syslin(Sys("dt"),Sys("A")+Gain*Sys("C"), Gain, Sys("C"), eye(Sys("C")*Gain));
+ //Series=minss(S*Sys);
+ Series=syslin("c",Sys("A")+Gain*Sys("C"), Sys("B")+Gain*Sys("D"), Sys("C"), Sys("D"));
+ end
+
+
+ //Example:
+ //Sys=ssrand(3,2,4);Sys('D')=rand(3,2);
+ //S=sysfact(Sys,lqr(Sys),'post');
+ //ww=minss(Sys*S);
+ //ss2tf(gtild(ww)*ww),Sys('D')'*Sys('D')
+
+ //Syst=Sys';
+ //S1=sysfact(Syst,lqe(Syst),'pre');
+ //ww=minss(S1*Syst);
+ //ss2tf(ww*gtild(ww)),Syst('D')*Syst('D')'
+
+
+ //Sys=ssrand(2,3,4);
+ //[X,d,F,U,k,Z]=abinv(Sys);
+ //ss2tf(Sys*Z)
+ //ss2tf(Sys*sysfact(Sys,F,'post')*U)
+endfunction