* Bug #12992 fixed - The sigma value was always equals to LM. 43/13143/2
Adeline CARNIS [Wed, 13 Nov 2013 11:06:05 +0000 (12:06 +0100)]
Change-Id: I755c4c71e7c3b237c14c1573e113c820bfca1813

scilab/CHANGES_5.5.X
scilab/modules/arnoldi/macros/eigs.sci
scilab/modules/arnoldi/tests/nonreg_tests/bug_12992.dia.ref [new file with mode: 0644]
scilab/modules/arnoldi/tests/nonreg_tests/bug_12992.tst [new file with mode: 0644]

index a212f30..f95e837 100644 (file)
@@ -115,6 +115,8 @@ Scilab Bug Fixes
 
 * Bug #12990 fixed - GED features conflicted with figure events.
 
+* Bug #12992 fixed - The sigma value was always equals to "LM" in eigs.
+
 * Bug #13000 fixed - []./int8(3) and on int8(3)./[] led to an endless recursive.
 
 * Bug #13003 fixed - String to enum converter added to Java external objects.
index 92ee84b..978f28b 100644 (file)
@@ -121,9 +121,9 @@ function [d, v] = eigs(varargin)
             end
         case 2
             if(issparse(A) | issparse(B))
-                [d, v] = speigs(A, B, nev, "LM", maxiter, tol, ncv, cholB, resid, info);
+                [d, v] = speigs(A, B, nev, sigma, maxiter, tol, ncv, cholB, resid, info);
             else
-                [d, v] = %_eigs(A, B, nev, "LM", maxiter, tol, ncv, cholB, resid, info);
+                [d, v] = %_eigs(A, B, nev, sigma, maxiter, tol, ncv, cholB, resid, info);
             end
         end
     else
@@ -814,6 +814,7 @@ function [res_d, res_v] = feigs(A_fun, nA, %_B, nev, which, maxiter, tol, ncv, c
         //check if chol is complex?
         if(~isreal(cholB) | size(cholB, "*") <> 1)
             error(msprintf(gettext("%s: Wrong type for input argument #%d: %s must be an integer scalar or a boolean.\n"), "eigs", 8, "opts.cholB"));
+
         end
 
         if(and(cholB <> [0 1]))
diff --git a/scilab/modules/arnoldi/tests/nonreg_tests/bug_12992.dia.ref b/scilab/modules/arnoldi/tests/nonreg_tests/bug_12992.dia.ref
new file mode 100644 (file)
index 0000000..d1b4a29
--- /dev/null
@@ -0,0 +1,29 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- Non-regression test for bug 12992 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=12992
+//
+// <-- Short Description -->
+//    The sigma value was always equals to "LM".
+// =============================================================================
+A = [11,2,3,1,4; 2,9,3,5,2; 3,3,15,4,3; 1,5,4,12,4; 4,2,3,4,17];
+B = eye(5,5);
+k = 1;
+sigma = 'SM';
+cld = eigs(A, B, k, sigma);
+d0 = spec(A);
+assert_checkalmostequal(cld, d0(1), [], %eps);
+[d, v] = eigs(A, B, k, sigma);
+[d0, v0] = spec(A);
+assert_checkalmostequal(d, v0(1), [], %eps);
+assert_checkalmostequal(abs(v), abs(d0(:,1)), [], %eps)
+ ans  =
+  T  
diff --git a/scilab/modules/arnoldi/tests/nonreg_tests/bug_12992.tst b/scilab/modules/arnoldi/tests/nonreg_tests/bug_12992.tst
new file mode 100644 (file)
index 0000000..86a00cd
--- /dev/null
@@ -0,0 +1,29 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+
+// <-- Non-regression test for bug 12992 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=12992
+//
+// <-- Short Description -->
+//    The sigma value was always equals to "LM".
+// =============================================================================
+
+A = [11,2,3,1,4; 2,9,3,5,2; 3,3,15,4,3; 1,5,4,12,4; 4,2,3,4,17];
+B = eye(5,5);
+k = 1;
+sigma = 'SM';
+cld = eigs(A, B, k, sigma);
+d0 = spec(A);
+assert_checkalmostequal(cld, d0(1), [], %eps);
+[d, v] = eigs(A, B, k, sigma);
+[d0, v0] = spec(A);
+assert_checkalmostequal(d, v0(1), [], %eps);
+assert_checkalmostequal(abs(v), abs(d0(:,1)), [], %eps)