Serge Steer [Wed, 1 Jun 2016 15:48:20 +0000 (17:48 +0200)]
Change-Id: Iaf4909fca4b13c3040ed0afb1be0e841d2f05aef

index 2393ef7..768bde3 100644 (file)
@@ -1,8 +1,5 @@
// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) ????-2008 - INRIA
-//
-// Copyright (C) 2012 - 2016 - Scilab Enterprises
-//
+// Copyright (C) ????-2016 - INRIA
// This file is hereby licensed under the terms of the GNU GPL v2.0,
// pursuant to article 5.3.4 of the CeCILL v.2.1.
// This file was originally licensed under the terms of the CeCILL v2.1,
// For more information, see the COPYING file which you should have received
// along with this program.

-
-function [Sm]=systmat(Sl);
-    // System matrix of the linear system Sl (syslin list)
-    // in state-space form.
-    // Sm = [-sE + A   B;
-    //      [    C     D]
-    // To get the zeros use det or detr (for square systems)
-    //!
-    ty=Sl(1);
-    ty=ty(1);
-    if ty=="lss" then
-        if Sl(7)=="d" then
-            s=poly(0,"z");
-        else
-            s=poly(0,"s");
-        end
-        Sm=[-s*eye(Sl(2))+Sl(2),Sl(3);Sl(4),Sl(5)];
-        return
-    end
-    if part(ty,1)=="d" then
-        s=poly(0,"s");
-        Sm=[-s*Sl(6)+Sl(2),Sl(3);Sl(4),Sl(5)];
-        return
+function Sm=systmat(Sl);
+// System matrix of the linear system Sl
+// in state-space form.
+// Sm = [-sE + A   B;
+//      [    C     D]
+// To get the zeros use trzeros
+//!
+  if typeof(Sl)=="state-space" then
+    if Sl.dt=="d"|Sl.dt==[] then
+      s=poly(0,"z");
+    else
+      s=poly(0,"s");
end
+    Sm=[-s*eye(Sl.A)+Sl.A, Sl.B;
+         Sl.C,             Sl.D];
+  elseif typeof(Sl)=="des" then
+    s=poly(0,"s");
+    Sm=[-s*Sl.E+Sl.A,   Sl.B;
+         Sl.C,          Sl.D];
+  else
+    error(msprintf(_("%s: Wrong type for input argument #%d: state space or a descriptor representation expected.\n"),"systmat",1))
+  end
endfunction