db1cc96d2000a4e4ae629cef9bfd83479bc38837
[scilab.git] / scilab / modules / cacsd / macros / obsv_mat.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA -
3 //
4 // Copyright (C) 2012 - 2016 - Scilab Enterprises
5 //
6 // This file is hereby licensed under the terms of the GNU GPL v2.0,
7 // pursuant to article 5.3.4 of the CeCILL v.2.1.
8 // This file was originally licensed under the terms of the CeCILL v2.1,
9 // and continues to be available under such terms.
10 // For more information, see the COPYING file which you should have received
11 // along with this program.
12
13 function o=obsv_mat(a,c)
14
15     [lhs,rhs]=argn(0)
16     select typeof(a)
17     case "constant"  then
18         if rhs==1 then
19             error(msprintf(gettext("%s: Wrong number of input arguments: %d expected"),"obsv_mat",2)),
20         end
21         [m,n]=size(a)
22         if m<>n then error(20,1),end
23         [mb,nb]=size(c);if nb<>n then error(60),end
24     case "state-space" then
25         [a,c]=a([2,4])
26         [n,n]=size(a)
27     else
28         if rhs==1 then
29             error(msprintf(gettext("%s: Wrong type for input argument #%d: Linear dynamical system expected.\n"),"obsv_mat",1))
30         else
31             error(msprintf(gettext("%s: Wrong type of input argument #%d: Array of floating point numbers expected.\n"),"obsv_mat",1))
32         end
33     end;
34     o=c;for k=1:n-1, o=[c;o*a],end
35 endfunction