* Bug #5016 fixed - Umfpack: regularize condestsp 09/12809/2
Paul BIGNIER [Thu, 3 Oct 2013 12:33:43 +0000 (14:33 +0200)]
condestsp could yield different results when repeated calls were performed.

Fix: set the rand seed at 0 before choosing the start matrix.

Change-Id: I53accf5d4d384d279a07b44bf32948006c7e1558

scilab/CHANGES_5.5.X
scilab/modules/umfpack/macros/condestsp.sci
scilab/modules/umfpack/tests/nonreg_tests/bug_5016.dia.ref [new file with mode: 0644]
scilab/modules/umfpack/tests/nonreg_tests/bug_5016.tst [new file with mode: 0644]

index 5d86cb2..d589482 100644 (file)
@@ -4,6 +4,8 @@
 Scilab Bug Fixes
 ================
 
+* Bug #5016 fixed - condestsp could return different results when repeated calls were performed.
+
 * Bug #7570 fixed - The switch criterion on x and y is now explicited in beta() help page.
 
 * Bug #7705 fixed - In the Genetic algorithms help pages, documented the
index b35f2a6..2c46647 100644 (file)
@@ -121,6 +121,7 @@ function [K1] = condestsp(A, arg2, arg3)
 
     // 1/ choose starting matrix X (n,t)
     X = ones(n,t)
+    rand("seed", 0);
     X(:,2:t) = fsign(rand(n,t-1)-0.5)
     X = test_on_columns(X) / n
     Y = zeros(X) ; Z = zeros(X)
diff --git a/scilab/modules/umfpack/tests/nonreg_tests/bug_5016.dia.ref b/scilab/modules/umfpack/tests/nonreg_tests/bug_5016.dia.ref
new file mode 100644 (file)
index 0000000..b5db0ce
--- /dev/null
@@ -0,0 +1,45 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 5016 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=5016
+//
+// <-- Short Description -->
+// condestsp could yield different results when repeated calls were performed.
+A = [
+1.7478328000000000752578  -0.1903736000000000039289 1.3090182999999999680085  -1.3628348999999999602295 0.3444064000000000014268
+0.2762794000000000083084  -1.0118259000000000558117 1.1937549000000000631871  -0.3618465000000000153513 1.417060200000000103060
+-1.0079914000000000928736 -1.2770016                -0.9433875999999999928392 -0.1351713999999999971102 -0.1938765000000000071623
+-0.4281269999999999797957 -1.5414133000000000972562 0.5169858000000000508578  0.9329383999999999455000  -1.2854697999999999957765
+-0.5434953999999999618709 -0.3191552999999999751246 0.8207168000000000240846  -1.0325953999999999410875 -1.1262562000000000406175
+]
+ A  =
+    1.7478328  - 0.1903736    1.3090183  - 1.3628349    0.3444064  
+    0.2762794  - 1.0118259    1.1937549  - 0.3618465    1.4170602  
+  - 1.0079914  - 1.2770016  - 0.9433876  - 0.1351714  - 0.1938765  
+  - 0.428127   - 1.5414133    0.5169858    0.9329384  - 1.2854698  
+  - 0.5434954  - 0.3191553    0.8207168  - 1.0325954  - 1.1262562  
+function c = cond1 ( A )
+  SA = sparse ( A );
+  c = condestsp ( SA );
+endfunction
+refCond = 7.0462354;
+Cond = cond1 ( A );
+assert_checkalmostequal(Cond, refCond, [], 1d-6);
+Cond = cond1 ( A );
+assert_checkalmostequal(Cond, refCond, [], 1d-6);
+Cond = cond1 ( A );
+assert_checkalmostequal(Cond, refCond, [], 1d-6);
+Cond = cond1 ( A );
+assert_checkalmostequal(Cond, refCond, [], 1d-6);
+Cond = cond1 ( A );
+assert_checkalmostequal(Cond, refCond, [], 1d-6);
diff --git a/scilab/modules/umfpack/tests/nonreg_tests/bug_5016.tst b/scilab/modules/umfpack/tests/nonreg_tests/bug_5016.tst
new file mode 100644 (file)
index 0000000..8e1c7ab
--- /dev/null
@@ -0,0 +1,41 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Paul Bignier
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 5016 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=5016
+//
+// <-- Short Description -->
+// condestsp could yield different results when repeated calls were performed.
+
+A = [
+1.7478328000000000752578  -0.1903736000000000039289 1.3090182999999999680085  -1.3628348999999999602295 0.3444064000000000014268
+0.2762794000000000083084  -1.0118259000000000558117 1.1937549000000000631871  -0.3618465000000000153513 1.417060200000000103060
+-1.0079914000000000928736 -1.2770016                -0.9433875999999999928392 -0.1351713999999999971102 -0.1938765000000000071623
+-0.4281269999999999797957 -1.5414133000000000972562 0.5169858000000000508578  0.9329383999999999455000  -1.2854697999999999957765
+-0.5434953999999999618709 -0.3191552999999999751246 0.8207168000000000240846  -1.0325953999999999410875 -1.1262562000000000406175
+]
+function c = cond1 ( A )
+    SA = sparse ( A );
+    c = condestsp ( SA );
+endfunction
+
+refCond = 7.0462354;
+
+Cond = cond1 ( A );
+assert_checkalmostequal(Cond, refCond, [], 1d-6);
+Cond = cond1 ( A );
+assert_checkalmostequal(Cond, refCond, [], 1d-6);
+Cond = cond1 ( A );
+assert_checkalmostequal(Cond, refCond, [], 1d-6);
+Cond = cond1 ( A );
+assert_checkalmostequal(Cond, refCond, [], 1d-6);
+Cond = cond1 ( A );
+assert_checkalmostequal(Cond, refCond, [], 1d-6);