help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

rlocus/gnuplot problem


From: John W. Eaton
Subject: rlocus/gnuplot problem
Date: Tue, 10 Apr 2007 16:32:26 -0400

On 10-Apr-2007, A. Scottedward Hodel wrote:

| I'm using the recently updated rlocus function in octave 2.9.10 and  
| have found a problem that I don't know how to fix.
| octave:2> rlocus(tf(1,[1,2,10]))
| ans = [](0x0)
| octave:3>
| gnuplot> plot "-" using ($1):($2) title "" with lines linestyle 1,  
| "-" using ($1):($2) title "asymptotes" with lines linestyle 2, "-"  
| using ($1):($2) title "locus" with lines linestyle 3, "-" using ($1): 
| ($2) title "" with lines linestyle 4, "-" using ($1):($2) title "open  
| loop poles" with points linestyle 5;
|                                                                          
|                                                                          
|                                                                          
|                                                                          
|                          ^
|           line 462: Can't plot with an empty x range!
| 
| The problem occurs when replotting with title, xlabel, or ylabel  
| commands.  The error message above is not an artifiact; the root  
| locus in this case is indeed a pair of vertical lines that go outward  
| from poles at -1 +/- j3.  It appears to be a problem interfacing to  
| gnuplot, and that's where I get stuck.
| 
| Can someone duplicate this problem and, if so, how can I go about  
| fixing it?

I think the problem is the call to axis in rlocus.m.  The limits are
computed by control/util/axis2dlim.m and that doesn't seem to be
handling values that are almost but not exactly equal.

Commenting out the call to axis in rlocus.m won't quite work becuase
of a similar bug in the get_axis_limits function in
plot/__go_draw_axes__.m.  I checked in the following patch for that
bug.

What would you like to do with rlocus.m and axis2dlim.m?

jwe


scripts/ChangeLog:

2007-04-10  John W. Eaton  <address@hidden>

        * plot/__go_draw_axes__.m: Try harder to handle min and max vals
        that are close but not exactly equal.

Index: scripts/plot/__go_draw_axes__.m
===================================================================
RCS file: /cvs/octave/scripts/plot/__go_draw_axes__.m,v
retrieving revision 1.14
diff -u -u -r1.14 __go_draw_axes__.m
--- scripts/plot/__go_draw_axes__.m     9 Apr 2007 23:15:47 -0000       1.14
+++ scripts/plot/__go_draw_axes__.m     10 Apr 2007 20:31:24 -0000
@@ -707,9 +707,10 @@
       endif
       warning ("axis: omitting negative data in log plot");
     endif
-    if (min_val == max_val)
-      min_val = 0.9 * min_val;
-      max_val = 1.1 * max_val;
+    ## FIXME -- maybe this test should also be relative?
+    if (abs (min_val - max_val) < sqrt (eps))
+      min_val *= 0.9;
+      max_val *= 1.1;
     endif
     min_val = 10 ^ floor (log10 (min_val));
     max_val = 10 ^ ceil (log10 (max_val));
@@ -717,9 +718,10 @@
     if (min_val == 0 && max_val == 0)
       min_val = -1;
       max_val = 1;
-    elseif (min_val == max_val)
-      min_val = 0.9 * min_val;
-      max_val = 1.1 * max_val;
+    ## FIXME -- maybe this test should also be relative?
+    elseif (abs (min_val - max_val) < sqrt (eps))
+      min_val -= 0.1 * abs (min_val);
+      max_val += 0.1 * abs (max_val);
     endif
     ## FIXME -- to do a better job, we should consider the tic spacing.
     scale = 10 ^ floor (log10 (max_val - min_val) - 1);

reply via email to

[Prev in Thread] Current Thread [Next in Thread]