elementary_functions module.
[scilab.git] / scilab / modules / elementary_functions / macros / %spb_diag.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA
3 // 
4 // This file must be used under the terms of the CeCILL.
5 // This source file is licensed as described in the file COPYING, which
6 // you should have received as part of this distribution.  The terms
7 // are also available at    
8 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
9
10 function d=%spb_diag(a,k)
11 // g_diag - implement diag function for sparse matrix, rational matrix ,..
12
13 [lhs,rhs]=argn(0)
14 if rhs==1 then k=0,end
15 [ij,v,sz]=spget(a)
16 m=sz(1);n=sz(2)
17 if m>1&n>1 then
18   l=find(ij(:,1)==(ij(:,2)-k))
19   if k<=0 then
20     mn=min(m,n-k)
21   else
22     mn=min(m+k,n)
23   end
24   kk=abs(k)
25   d=sparse([ij(l,1),ones(ij(l,1))],v(l),[mn,1])
26 else
27   nn = max(m,n)+abs(k)
28   if ij==[] then 
29     d=sparse([],[],[nn,nn])
30   else
31     d=sparse([ij(:,1),ij(:,1)+k],v,[nn,nn])
32   end
33 end
34 endfunction