bug 4596 fix (g_margin fails to return the gain margins in some cases)
Serge Steer [Mon, 22 Jun 2009 12:53:43 +0000 (14:53 +0200)]
scilab/CHANGES_5.1.X
scilab/modules/cacsd/macros/g_margin.sci
scilab/modules/cacsd/tests/nonreg_tests/bug_4596.dia.ref [new file with mode: 0644]
scilab/modules/cacsd/tests/nonreg_tests/bug_4596.tst [new file with mode: 0644]

index 492fb9f..2c2e028 100644 (file)
@@ -145,6 +145,7 @@ Bug fixes:
  * bug 4580 fixed - rpem documentation made more accurate
  
  * bug 4592 fixed - The ged entity picker produces an error if a menu has been added to the graphic window
+ * bug 4596 fixed - g_margin fails to return the gain margins in some cases.
 
 
                Changes between version 5.1.0 and 5.1.1 of Scilab
index 301159e..8dc8478 100644 (file)
@@ -26,7 +26,7 @@ function [gm,fr]=g_margin(h)
      s=%i*poly(0,"w");
      w=roots(imag(horner(h.num,s)*conj(horner(h.den,s))) )
      ws=real(w(abs(imag(w))<eps&real(w)<=0)) //points where phase is -180°
-     ws(abs(horner(h.den,ws))==0)=[];
+     ws(abs(horner(h.den,%i*ws))==0)=[];
      if ws==[] then gm=%inf,fr=[],return,end
      mingain=real(freq(h.num,h.den,%i*ws))
   else  //discrete time case
diff --git a/scilab/modules/cacsd/tests/nonreg_tests/bug_4596.dia.ref b/scilab/modules/cacsd/tests/nonreg_tests/bug_4596.dia.ref
new file mode 100644 (file)
index 0000000..56492b5
--- /dev/null
@@ -0,0 +1,25 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009 - INRIA - Serge Steer
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 4596 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=4596
+//
+// <-- Short Description -->
+//   g_margin fails to return the gain margins in some cases.
+s=%s;
+K=485000.;
+h=syslin('c', K / ( s * (s+100)^2 ) );
+[gm,fr]=g_margin(h)
+ fr  =
+    15.915494  
+ gm  =
+    12.305765  
+if gm==[] then bugmes();quit;end
+if abs(2*%pi*fr-100)>100*%eps then bugmes();quit;end
diff --git a/scilab/modules/cacsd/tests/nonreg_tests/bug_4596.tst b/scilab/modules/cacsd/tests/nonreg_tests/bug_4596.tst
new file mode 100644 (file)
index 0000000..4012967
--- /dev/null
@@ -0,0 +1,22 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009 - INRIA - Serge Steer
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- Non-regression test for bug 4596 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=4596
+//
+// <-- Short Description -->
+//   g_margin fails to return the gain margins in some cases.
+
+s=%s;
+K=485000.;
+h=syslin('c', K / ( s * (s+100)^2 ) );
+
+[gm,fr]=g_margin(h)
+if gm==[] then pause,end
+if abs(2*%pi*fr-100)>100*%eps then pause,end