* Bug #12121 fixed - inv function did not work for complex sparse matrices.
[scilab.git] / scilab / modules / overloading / macros / %sp_inv.sci
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