annotate scripts/control/base/rlocus.m @ 6415:6b1535a09268

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