* Bug 16369 fixed: sparse right divisions / restored
[scilab.git] / scilab / modules / overloading / macros / %sp_r_sp.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA
3 // Copyright (C) 2012 - 2016 - Scilab Enterprises
4 // Copyright (C) 2020 - Samuel GOUGEON
5 //
6 // This file is hereby licensed under the terms of the GNU GPL v2.0,
7 // pursuant to article 5.3.4 of the CeCILL v.2.1.
8 // This file was originally licensed under the terms of the CeCILL v2.1,
9 // and continues to be available under such terms.
10 // For more information, see the COPYING file which you should have received
11 // along with this program.
12
13 function a = %sp_r_sp(p, b)
14     // a = p / b, such that p = a * b
15     // p sparse, b sparse
16     // not-square complex b not supported
17
18     [rp, cp] = size(p)
19     [rb, cb] = size(b)
20     if cp <> cb then
21         msg = _("%s: Arguments #%d and #%d: Same numbers of columns expected.\n")
22         error(msprintf(msg, "%sp_r_sp", 1, 2))
23     end
24     if issquare(b)
25         if det(b) <> 0 then
26             a = p * inv(b)
27             return
28         end
29     else
30         p = p * b.'
31         b = b * b.'   // Makes b square
32     end
33
34     [h,rk] = lufact(b.')
35     if rk < min(rb,cb) then
36         warning(msprintf(_("sparse / sparse: Deficient rank: rank = %d"),rk))
37     end
38     a = []
39     for k = 1:rp
40         a = [a ; sparse(lusolve(h,full(p(k,:)).').')]
41     end
42     ludel(h)
43 endfunction