0c2b351f3a845942bc12dfc92e9ac2fbd977b7c8
[scilab.git] / scilab / modules / cacsd / macros / plzr.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA
3 // This file must be used under the terms of the CeCILL.
4 // This source file is licensed as described in the file COPYING, which
5 // you should have received as part of this distribution.  The terms
6 // are also available at    
7 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
8
9 function plzr(a,b,c,d)
10 //
11 // Copyright INRIA
12   [lhs,rhs]=argn(0)
13   select typeof(a)
14   case 'rational' then
15     if rhs<>1 then 
16       error(msprintf(gettext("%s: Wrong number of input arguments: %d expected.\n"),"plzr",1)),
17     end
18     a=tf2ss(a),
19     [a,b,c,d]=a(2:5)
20     if type(d)<>1 then 
21       error(msprintf(gettext("%s: Wrong value of input argument %d: Proper system expected.\n"),"plzr",1));
22     end
23   case 'state-space' then
24     if rhs<>1 then 
25       error(msprintf(gettext("%s: Wrong number of input arguments: %d expected.\n"),"plzr",1)),
26     end
27     [a,b,c,d]=a(2:5)
28     if type(d)<>1 then 
29       error(msprintf(gettext("%s: Wrong value of input argument %d: Proper system expected.\n"),"plzr",1));
30     end
31   case 'constant' then
32     if rhs<>4 then 
33       error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"plzr",4)),
34     end
35     if type(d)<>1 then 
36       error(msprintf(gettext("%s: Wrong type for input argument #%d: Array of floating point numbers expected.\n"),..
37                      "plzr",4));
38     end
39
40   else
41     if rhs==1 then
42       error(msprintf(gettext("%s: Wrong type for input argument #%d: Linear dynamical system expected.\n"),"plzr",1))
43     else
44       error(msprintf(gettext("%s: Wrong type of input argument #%d: Array of floating point numbers expected.\n"),"plzr",1))
45     end
46   end
47   if type(d)<>1 then 
48     error(msprintf(gettext("%s: Wrong type for input argument #%d: Array of floating point numbers expected.\n"),..
49                    "plzr",4));
50   end
51
52
53   dr=spec(a)
54   [al,be]=tr_zer(a,b,c,d)
55   nr=al./be
56   ni=imag(nr);nr=real(nr)
57   di=imag(dr);dr=real(dr)
58   //
59   mxx=max([nr;dr;1]*1.1)
60   mnx=min([nr;dr;-1]*1.1)
61   my=max(abs([ni;di;1])*1.1)
62  
63   rect=[mnx, -my, mxx, my];
64
65   wdim=get(gcf(),'axes_size')
66   dx=(mxx-mnx)/wdim(1);dy=2*my/wdim(2)
67   if dy>dx then 
68     ax=(dy*wdim(1)-mxx+mnx)/2
69     mxx=mxx+ax;mnx=mnx-ax
70   elseif dy<dx then
71     ay=(dx*wdim(2)-2*my)/2
72     my=my+ay
73   end
74   rect=[mnx, -my, mxx, my];
75   drawlater()
76   ax=gca();
77   ax.data_bounds=[mnx, -my; mxx, my];
78   ax.axes_visible='on';
79  
80   legs=[],lhandle=[]
81   if size(nr,'*')<>0 then
82     xpoly(nr,ni)
83     e=gce();e.line_mode='off';e.mark_mode='on';
84     e.mark_size_unit="point";e.mark_size=7;e.mark_style=5;
85     legs=[legs;gettext("Zeros")]
86     lhandle=[e;lhandle]
87   end;
88   if size(dr,'*')<>0 then
89     xpoly(dr,di)
90     e=gce();e.line_mode='off';e.mark_mode='on';
91     e.mark_size_unit="point";e.mark_size=7;e.mark_style=2;
92     legs=[legs;gettext("Poles")]
93     lhandle=[e;lhandle]
94   end
95   ax.grid=ones(1,3)*color('gray')
96   ax.box = "on";
97   xarc(-1,1,2,2,0,360*64)
98   xtitle(gettext("Transmission zeros and poles"),gettext("Real axis"), ...
99          gettext("Imaginary axis"));
100   if legs<>[] then legend(lhandle,legs,1),end
101   drawnow()
102   show_window();
103 endfunction