* Bug #12121 fixed - inv function did not work for complex sparse matrices. 13/13313/3
Adeline CARNIS [Wed, 4 Dec 2013 10:46:36 +0000 (11:46 +0100)]
Change-Id: I2dab5286eee1b1a7385896460f565eee7f888aff

scilab/CHANGES_5.5.X
scilab/modules/linear_algebra/tests/nonreg_tests/bug_12121.dia.ref [new file with mode: 0644]
scilab/modules/linear_algebra/tests/nonreg_tests/bug_12121.tst [new file with mode: 0644]
scilab/modules/overloading/macros/%sp_inv.sci

index 493e319..e33b738 100644 (file)
@@ -144,6 +144,8 @@ Scilab Bug Fixes
 
 * Bug #11680 fixed - GUI functions in Scilab 5.4.X were much slower than in Scilab 5.3.3.
 
+* Bug #12121 fixed - inv function did not work for complex sparse matrices.
+
 * Bug #12334 fixed - Mark color in legend was invalid.
 
 * Bug #12481 fixed - xlabel could not be used with Scilab property names.
diff --git a/scilab/modules/linear_algebra/tests/nonreg_tests/bug_12121.dia.ref b/scilab/modules/linear_algebra/tests/nonreg_tests/bug_12121.dia.ref
new file mode 100644 (file)
index 0000000..3b6088f
--- /dev/null
@@ -0,0 +1,19 @@
+// =============================================================================
+// 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 12121 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=12121
+//
+// <-- Short Description -->
+//    inv() did not work for complex sparse matrices.
+// =============================================================================
+A = %i*speye(3,3);
+assert_checkequal(inv(A), -A);
+A = rand(5,5)*%i;
+assert_checkalmostequal(full(inv(sparse(A))), inv(A));
diff --git a/scilab/modules/linear_algebra/tests/nonreg_tests/bug_12121.tst b/scilab/modules/linear_algebra/tests/nonreg_tests/bug_12121.tst
new file mode 100644 (file)
index 0000000..9ae4341
--- /dev/null
@@ -0,0 +1,23 @@
+// =============================================================================
+// 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 12121 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=12121
+//
+// <-- Short Description -->
+//    inv() did not work for complex sparse matrices.
+// =============================================================================
+
+A = %i*speye(3,3);
+assert_checkequal(inv(A), -A);
+
+A = rand(5,5)*%i;
+assert_checkalmostequal(full(inv(sparse(A))), inv(A));
index 58a97ad..6436df0 100644 (file)
@@ -1,5 +1,6 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) INRIA
+// Copyright (C) 2013 - Scilab Enterprises - Adeline CARNIS
 //
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
@@ -7,16 +8,16 @@
 // are also available at
 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
 
-function x=%sp_inv(a)
-
-    [ma,na]=size(a)
-    if ma<>na then error(20,1),end
-    [hand,rk]=lufact(a)
-    if rk<na then ludel(hand);error(19),end
-    x=[]
-    for k=1:ma
-        b=0*ones(ma,1);b(k)=1;
-        x=[x,sparse(lusolve(hand,b))]
+function x = %sp_inv(a)
+    
+    [ma, na] = size(a)
+    if ma<>na then 
+        error(20,1)
     end
-    ludel(hand);
+    warning("off")
+    Lup = umf_lufact(a);
+    warning("on")
+    x = sparse(umf_lusolve(Lup, eye(ma, na)));
+    umf_ludel(Lup)
+
 endfunction