Update of the localization templates
[scilab.git] / scilab / modules / differential_equations / macros / integrate.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 %x=integrate(%expr,%var,%x0,%x1,%ea,%er)
11 // x=integrate(expr,v,x0,x1 [,ea [,er]])  computes
12 //                      /x1
13 //                     [
14 //                 x = I  f(v)dv
15 //                     ]
16 //                    /x0
17 //
18 //
19 //examples:
20 //integrate('sin(x)','x',0,%pi)
21 //integrate(['if x==0 then 1,';
22 //           'else sin(x)/x,end'],'x',0,%pi)
23   select argn(2)
24     case 4 then
25       %ea=1d-14;%er=1.d-8 
26     case 5 then
27       %er=1d-14;
28     case 6 then
29   else
30     error(msprintf(gettext("%s: Wrong number of input argument(s): At least %d expected.\n"),"integrate",4));
31   end
32
33   if size(%x0,'*')<>1 then
34     error(msprintf(gettext("%s: Wrong size for input argument #%d: A real expected.\n"),"integrate",3));
35   end
36
37   if size(%ea,'*')<>1 then
38     error(msprintf(gettext("%s: Wrong size for input argument #%d: A real expected.\n"),"integrate",5));
39   end
40
41   if size(%er,'*')<>1 then
42     error(msprintf(gettext("%s: Wrong size for input argument #%d: A real expected.\n"),"integrate",6));
43   end
44
45   if imag(%x0)<>0 then
46     error(msprintf(gettext("%s: Wrong type for input argument #%d: A real expected.\n"),"integrate",3));
47   end
48
49   if norm(imag(%x1),1)<>0 then
50     error(msprintf(gettext("%s: Wrong type for input argument #%d: A real expected.\n"),"integrate",4));
51   else
52     %x1=real(%x1)
53   end
54   //
55
56   try
57     if %expr==%var then 
58       deff(%var+'=%func('+%var+')',%expr)
59     else
60       deff('ans=%func('+%var+')',%expr)
61     end
62   catch
63     error(msprintf(gettext("%s: Wrong value for input argument #%d: syntax error in given expression\n"),"integrate",1));
64   end
65
66   [%x1,%ks]=gsort(%x1,'g','i')
67   %x=zeros(%x1)
68
69   %kkk=find((%x1(1:$-1)<%x0) & (%x1(2:$)>=%x0))
70   if %kkk <>[] then
71     %xx0=%x0;
72     for %kk=1:%kkk
73       %x(%kk)=-intg(%xx0,%x1(%kk),%func,%ea,%er);
74       %xx0=%x1(%kk);
75     end
76   end
77   %xx0=%x0;
78   for %kk=1:size(%x1,'*')
79     %x(%kk)=intg(%xx0,%x1(%kk),%func,%ea,%er);
80     %xx0=%x1(%kk);
81   end
82   %x=cumsum(%x)
83   %x=matrix(%x(%ks),size(%x1));
84
85 endfunction