annotate scripts/control/base/rlocus.m @ 7016:93c65f2a5668

[project @ 2007-10-12 06:40:56 by jwe]
author jwe
date Fri, 12 Oct 2007 06:41:26 +0000
parents 6b1535a09268
children a1dbe9d80eee
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
1 ## Copyright (C) 1996 Auburn University. All rights reserved.
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
2 ##
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
3 ## This file is part of Octave.
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
4 ##
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6415
diff changeset
6 ## under the terms of the GNU General Public License as published by
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6415
diff changeset
7 ## the Free Software Foundation; either version 3 of the License, or (at
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6415
diff changeset
8 ## your option) any later version.
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
9 ##
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6415
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6415
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6415
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6415
diff changeset
13 ## General Public License for more details.
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
14 ##
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6415
diff changeset
16 ## along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6415
diff changeset
17 ## <http://www.gnu.org/licenses/>.
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
18
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
19 ## -*- texinfo -*-
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
20 ## @deftypefn {Function File} {[@var{rldata}, @var{k}] =} rlocus (@var{sys}[, @var{increment}, @var{min_k}, @var{max_k}])
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
21 ##
5460
eaedbf469316 [project @ 2005-09-20 19:27:07 by jwe]
jwe
parents: 5307
diff changeset
22 ## Display root locus plot of the specified @acronym{SISO} system.
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
23 ## @example
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
24 ## @group
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
25 ## ----- --- --------
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
26 ## --->| + |---|k|---->| SISO |----------->
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
27 ## ----- --- -------- |
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
28 ## - ^ |
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
29 ## |_____________________________|
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
30 ## @end group
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
31 ## @end example
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
32 ##
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
33 ## @strong{Inputs}
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
34 ## @table @var
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
35 ## @item sys
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
36 ## system data structure
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
37 ## @item min_k
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
38 ## Minimum value of @var{k}
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
39 ## @item max_k
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
40 ## Maximum value of @var{k}
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
41 ## @item increment
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
42 ## The increment used in computing gain values
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
43 ## @end table
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
44 ##
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
45 ## @strong{Outputs}
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
46 ##
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
47 ## Plots the root locus to the screen.
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
48 ## @table @var
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
49 ## @item rldata
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
50 ## Data points plotted: in column 1 real values, in column 2 the imaginary values.
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
51 ## @item k
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
52 ## Gains for real axis break points.
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 4771
diff changeset
53 ## @end table
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
54 ## @end deftypefn
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
55
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
56 ## Author: David Clem
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
57 ## Author: R. Bruce Tenison <btenison@eng.auburn.edu>
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
58 ## Updated by Kristi McGowan July 1996 for intelligent gain selection
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
59 ## Updated by John Ingram July 1996 for systems
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
60
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
61 function [rldata, k_break, rlpol, gvec, real_ax_pts] = rlocus (sys, increment, min_k, max_k)
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
62
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
63 if (nargin < 1 || nargin > 4)
6046
34f96dd5441b [project @ 2006-10-10 16:10:25 by jwe]
jwe
parents: 5605
diff changeset
64 print_usage ();
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
65 endif
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
66
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
67 ## Convert the input to a transfer function if necessary
5605
5b80eaa366c1 [project @ 2006-02-02 16:49:52 by jwe]
jwe
parents: 5460
diff changeset
68 [num,den] = sys2tf(sys); # extract numerator/denom polyomials
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
69 lnum = length(num);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
70 lden = length(den);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
71 # equalize length of num, den polynomials
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
72 if(lden < 2)
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
73 error("system has no poles");
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
74 elseif(lnum < lden)
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
75 num = [zeros(1,lden-lnum), num]; # so that derivative is shortened by one
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
76 endif
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
77
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
78 olpol = roots(den);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
79 olzer = roots(num);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
80 nas = lden -lnum; # number of asymptotes
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
81 maxk = 0;
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
82 if(nas > 0)
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
83 cas = ( sum(olpol) - sum(olzer) )/nas;
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
84 angles = (2*[1:nas]-1)*pi/nas;
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
85 # printf("rlocus: there are %d asymptotes centered at %f\n", nas, cas);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
86 else
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
87 cas = angles = [];
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
88 maxk = 100*den(1)/num(1);
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
89 endif
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
90
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
91
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
92 # compute real axis break points and corresponding gains
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
93 dnum=polyderiv(num);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
94 dden=polyderiv(den);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
95 brkp = conv(den, dnum) - conv(num, dden);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
96 real_ax_pts = roots(brkp);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
97 real_ax_pts = real_ax_pts(find(imag(real_ax_pts) == 0));
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
98 k_break = -polyval(den,real_ax_pts) ./ polyval(num, real_ax_pts);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
99 idx = find(k_break >= 0);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
100 k_break = k_break(idx);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
101 real_ax_pts = real_ax_pts(idx);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
102 if(!isempty(k_break))
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
103 maxk = max(max(k_break),maxk);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
104 endif
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
105
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
106 if(nas == 0)
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
107 maxk = max(1, 2*maxk); % get at least some root locus
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
108 else
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
109 # get distance from breakpoints, poles, and zeros to center of asymptotes
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
110 dmax = 3*max(abs( [vec(olzer); vec(olpol); vec(real_ax_pts)] - cas ));
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
111 if(dmax == 0)
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
112 dmax = 1;
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
113 endif
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
114
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
115 # get gain for dmax along each asymptote, adjust maxk if necessary
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
116 svals = cas + dmax*exp(j*angles);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
117 kvals = -polyval(den,svals) ./ polyval(num, svals);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
118 maxk = max(maxk, max(real(kvals)));
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
119 end
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
120
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
121 ## check for input arguments:
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
122 if (nargin > 2)
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
123 mink = min_k;
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
124 else
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
125 mink = 0;
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
126 endif
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
127 if (nargin > 3)
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
128 maxk = max_k;
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
129 endif
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
130 if (nargin > 1)
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
131 if(increment <= 0)
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
132 error("increment must be positive");
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
133 else
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
134 ngain = (maxk-mink)/increment;
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
135 endif
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
136 else
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
137 ngain = 30;
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
138 endif
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
139
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
140 ## vector of gains
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
141 ngain = max(30,ngain);
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
142 gvec = linspace(mink,maxk,ngain);
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
143 if(length(k_break))
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
144 gvec = sort([gvec, vec(k_break)']);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
145 endif
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
146
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
147 ## Find the open loop zeros and the initial poles
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
148 rlzer = roots(num);
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
149
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
150 ## update num to be the same length as den
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
151 lnum = length(num);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
152 if(lnum < lden)
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
153 num = [zeros(1,lden - lnum),num];
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
154 endif
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
155
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
156 ## compute preliminary pole sets
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
157 nroots = lden-1;
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
158 for ii=1:ngain
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
159 gain = gvec(ii);
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
160 rlpol(1:nroots,ii) = vec(sortcom(roots(den + gain*num)));
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
161 endfor
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
162
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
163 ## set smoothing tolerance
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
164 smtolx = 0.01*( max(max(real(rlpol))) - min(min(real(rlpol))));
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
165 smtoly = 0.01*( max(max(imag(rlpol))) - min(min(imag(rlpol))));
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
166 smtol = max(smtolx, smtoly);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
167 rlpol = sort_roots(rlpol,smtolx, smtoly); % sort according to nearest-neighbor
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
168
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
169 done=(nargin == 4); # perform a smoothness check
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
170 while((!done) & ngain < 1000)
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
171 done = 1 ; # assume done
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
172 dp = abs(diff(rlpol'))';
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
173 maxdp = max(dp);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
174
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
175 ## search for poles whose neighbors are distant
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
176 if(lden == 2)
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
177 idx = find(dp > smtol);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
178 else
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
179 idx = find(maxdp > smtol);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
180 endif
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
181
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
182 for ii=1:length(idx)
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
183 i1 = idx(ii);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
184 g1 = gvec(i1);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
185 p1 = rlpol(:,i1);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
186
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
187 i2 = idx(ii)+1;
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
188 g2 = gvec(i2);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
189 p2 = rlpol(:,i2);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
190
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
191 ## isolate poles in p1, p2
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
192 if( max(abs(p2-p1)) > smtol)
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
193 newg = linspace(g1,g2,5);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
194 newg = newg(2:4);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
195 gvec = [gvec,newg];
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
196 done = 0; # need to process new gains
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
197 endif
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
198 endfor
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
199
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
200 ## process new gain values
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
201 ngain1 = length(gvec);
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
202 for ii=(ngain+1):ngain1
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
203 gain = gvec(ii);
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
204 rlpol(1:nroots,ii) = vec(sortcom(roots(den + gain*num)));
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
205 endfor
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
206
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
207 [gvec,idx] = sort(gvec);
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
208 rlpol = rlpol(:,idx);
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
209 ngain = length(gvec);
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
210 rlpol = sort_roots(rlpol,smtolx, smtoly); % sort according to nearest-neighbor
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
211 endwhile
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
212 rldata = rlpol;
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
213
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
214 ## Plot the data
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
215 if(nargout == 0)
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
216 rlpolv = vec(rlpol);
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
217 axdata = [real(rlpolv),imag(rlpolv); real(olzer), imag(olzer)];
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
218 axlim = axis2dlim(axdata);
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
219 rldata = [real(rlpolv), imag(rlpolv) ];
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
220 [stn,inname,outname] = sysgetsignals(sys);
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
221
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
222 ## build plot command args pole by pole
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
223
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
224 n_rlpol = rows(rlpol);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
225 nelts = n_rlpol+1;
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
226 if (! isempty (rlzer))
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
227 nelts++;
5605
5b80eaa366c1 [project @ 2006-02-02 16:49:52 by jwe]
jwe
parents: 5460
diff changeset
228 endif
6413
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
229 # add asymptotes
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
230 n_A = length (olpol) - length (olzer);
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
231 if (n_A > 0)
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
232 nelts += n_A;
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
233 endif
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
234 args = cell (3, nelts);
6413
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
235 kk = 0;
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
236 # asymptotes first
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
237 if (n_A > 0)
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
238 len_A = 2*max(abs(axlim));
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
239 sigma_A = (sum(olpol) - sum(olzer))/n_A;
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
240 for i_A=0:n_A-1
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
241 phi_A = pi*(2*i_A + 1)/n_A;
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
242 args{1,++kk} = [sigma_A sigma_A+len_A*cos(phi_A)];
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
243 args{2,kk} = [0 len_A*sin(phi_A)];
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
244 if (i_A == 1)
6415
6b1535a09268 [project @ 2007-03-15 18:03:17 by jwe]
jwe
parents: 6413
diff changeset
245 args{3,kk} = "k--;asymptotes;";
6413
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
246 else
6415
6b1535a09268 [project @ 2007-03-15 18:03:17 by jwe]
jwe
parents: 6413
diff changeset
247 args{3,kk} = "k--";
6413
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
248 endif
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
249 endfor
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
250 endif
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
251 # locus next
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
252 for ii=1:rows(rlpol)
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
253 args{1,++kk} = real (rlpol (ii,:));
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
254 args{2,kk} = imag (rlpol (ii,:));
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
255 if (ii == 1)
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
256 args{3,kk} = "b-;locus;";
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
257 else
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
258 args{3,kk} = "b-";
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
259 endif
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
260 endfor
6413
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
261 # poles and zeros last
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
262 args{1,++kk} = real(olpol);
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
263 args{2,kk} = imag(olpol);
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
264 args{3,kk} = "rx;open loop poles;";
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
265 if (! isempty(rlzer))
6413
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
266 args{1,++kk} = real(rlzer);
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
267 args{2,kk} = imag(rlzer);
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
268 args{3,kk} = "go;zeros;";
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
269 endif
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
270
6413
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
271 set (gcf,"visible","off");
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
272 hplt = plot (args{:});
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
273 set (hplt(kk--), "markersize", 2);
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
274 if (! isempty(rlzer))
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
275 set(hplt(kk--), "markersize", 2);
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
276 endif
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
277 for ii=1:rows(rlpol)
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
278 set (hplt(kk--), "linewidth", 2);
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
279 endfor
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
280 legend ("boxon", 2);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
281 grid ("on");
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
282 axis (axlim);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
283 xlabel (sprintf ("Root locus from %s to %s, gain=[%f,%f]: Real axis",
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
284 inname{1}, outname{1}, gvec(1), gvec(ngain)));
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
285 ylabel ("Imag. axis");
6413
cf8e671beada [project @ 2007-03-15 14:11:51 by jwe]
jwe
parents: 6395
diff changeset
286 set (gcf,"visible","on");
3431
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
287 rldata = [];
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
288 endif
99ab64f4a09d [project @ 2000-01-14 03:53:03 by jwe]
jwe
parents:
diff changeset
289 endfunction
6395
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
290
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
291 function rlpol = sort_roots (rlpol,tolx, toly)
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
292 # no point sorting of you've only got one pole!
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
293 if(rows(rlpol) == 1)
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
294 return
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
295 endif
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
296
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
297 # reorder entries in each column of rlpol to be by their nearest-neighbors
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
298 dp = diff(rlpol')';
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
299 drp = max(real(dp));
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
300 dip = max(imag(dp));
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
301 idx = find( drp > tolx | dip > toly );
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
302 if(isempty(idx) )
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
303 return
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
304 endif
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
305
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
306 [np,ng] = size(rlpol); # num poles, num gains
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
307 for jj = idx
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
308 vals = rlpol(:,[jj,jj+1]);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
309 jdx = (jj+1):ng;
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
310 for ii=1:rows(rlpol-1)
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
311 rdx = ii:np;
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
312 dval = abs(rlpol(rdx,jj+1)-rlpol(ii,jj));
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
313 mindist = min(dval);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
314 sidx = min( find ( dval == mindist)) + ii - 1;
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
315 if( sidx != ii)
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
316 c1 = norm(diff(vals'));
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
317 [vals(ii,2), vals(sidx,2)] = swap( vals(ii,2), vals(sidx,2));
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
318 c2 = norm(diff(vals'));
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
319 if(c1 > c2 )
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
320 # perform the swap
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
321 [rlpol(ii,jdx), rlpol(sidx,jdx)] = swap( rlpol(ii,jdx), rlpol(sidx,jdx));
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
322 vals = rlpol(:,[jj,jj+1]);
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
323 endif
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
324 endif
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
325 endfor
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
326 endfor
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
327
a8dd70bacc1e [project @ 2007-03-07 22:22:12 by jwe]
jwe
parents: 6046
diff changeset
328 endfunction