error(number): converting occurrences remaining in all .sce .sci files
[scilab.git] / scilab / modules / linear_algebra / macros / nlev.sci
1
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 1987-2008 - INRIA - Serge STEER <serge.steer@inria.fr>
4 // Copyright (C) 1987-2008 - INRIA - Fran├žois DELEBECQUE
5 //
6 // Copyright (C) 2012 - 2016 - Scilab Enterprises
7 //
8 // This file is hereby licensed under the terms of the GNU GPL v2.0,
9 // pursuant to article 5.3.4 of the CeCILL v.2.1.
10 // This file was originally licensed under the terms of the CeCILL v2.1,
11 // and continues to be available under such terms.
12 // For more information, see the COPYING file which you should have received
13 // along with this program.
14
15 function[m,den]=nlev(a,z,rmax)
16     //[num,den]=nlev(a,z [,rmax])  calcule (z*eye-a)**(-1) par une version
17     //modifiee de l'algorithme de leverrier numeriquement plus stable.
18     //
19     //z     chaine de caracteres donnant le nom de la variable formelle
20     //rmax  parametre optionnel utilise pour bloc diagonaliser a (voir la
21     //      fonction bdiag)
22     //
23
24     rhs=argn(2);
25     if rhs < 2 then
26         msg = gettext("%s: Wrong number of input arguments: %d or %d expected.\n")
27         error(msprintf(msg, "nlev", 2, 3));
28     end
29
30     z=poly(0,z);
31
32     if rhs==3 then
33         [a,x,bs]=bdiag(a,rmax),
34     else
35         [a,x,bs]=bdiag(a),
36     end
37
38     [m1 n1]=size(a)
39     if m1<>n1 then
40         msg = _("%s: Argument #%d: Square matrix expected.\n")
41         error(msprintf(msg, "nlev", 1))
42     end
43     k=1;
44     m=[];
45     v=ones(1,n1);
46     den=1;
47     for n=bs';k1=k:k-1+n;
48         //       algorithme de leverrier
49         h=z*eye(n,n)-a(k1,k1)
50         f=eye(n,n)
51         for kl=1:n-1,
52             b=h*f,
53             d=-sum(diag(b))/kl,
54             f=b+eye()*d,
55         end
56         d=sum(diag(h*f))/n
57         //
58         den=den*d;
59         l=[1:k-1,k+n:n1] ,
60         if l<>[] then
61             v(l)=v(l)*d;
62         end
63         m=[m,x(:,k1)*f];
64         k=k+n;
65     end;
66     m=m*diag(v)*inv(x);
67 endfunction
68
69
70