bug 7566 fix: The cacsd module graphic functions (bode, black, nyquist,...)
[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   
76   fig=gcf();
77   immediate_drawing=fig.immediate_drawing;
78   fig.immediate_drawing="off";
79
80   ax=gca();
81   ax.data_bounds=[mnx, -my; mxx, my];
82   ax.axes_visible='on';
83  
84   legs=[],lhandle=[]
85   if size(nr,'*')<>0 then
86     xpoly(nr,ni)
87     e=gce();e.line_mode='off';e.mark_mode='on';
88     e.mark_size_unit="point";e.mark_size=7;e.mark_style=5;
89     legs=[legs;gettext("Zeros")]
90     lhandle=[e;lhandle]
91   end;
92   if size(dr,'*')<>0 then
93     xpoly(dr,di)
94     e=gce();e.line_mode='off';e.mark_mode='on';
95     e.mark_size_unit="point";e.mark_size=7;e.mark_style=2;
96     legs=[legs;gettext("Poles")]
97     lhandle=[e;lhandle]
98   end
99   ax.grid=ones(1,3)*color('gray')
100   ax.box = "on";
101   xarc(-1,1,2,2,0,360*64)
102   xtitle(gettext("Transmission zeros and poles"),gettext("Real axis"), ...
103          gettext("Imaginary axis"));
104   if legs<>[] then legend(lhandle,legs,1),end
105   fig.immediate_drawing=immediate_drawing;
106   show_window();
107 endfunction