* Bugs #5728 10229 invalid - Differential_equations: Quadpack update
[scilab.git] / scilab / modules / differential_equations / help / fr_FR / intg.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="intg" xml:lang="fr">
3     <refnamediv>
4         <refname>intg</refname>
5         <refpurpose>intégration numérique adaptative</refpurpose>
6     </refnamediv>
7     <refsynopsisdiv>
8         <title>Séquence d'appel</title>
9         <synopsis>[v,err [,ierr]]=intg(a,b,f [,ea [,er])</synopsis>
10     </refsynopsisdiv>
11     <refsection>
12         <title>Paramètres</title>
13         <variablelist>
14             <varlistentry>
15                 <term>a, b</term>
16                 <listitem>
17                     <para>nombres réels.</para>
18                 </listitem>
19             </varlistentry>
20             <varlistentry>
21                 <term>f</term>
22                 <listitem>
23                     <para>fonction externe (fonction Scilab ou chaîne de caractères ou
24                         liste).
25                     </para>
26                 </listitem>
27             </varlistentry>
28             <varlistentry>
29                 <term>ea, er</term>
30                 <listitem>
31                     <para>nombres réels.</para>
32                 </listitem>
33             </varlistentry>
34             <varlistentry>
35                 <term>ea</term>
36                 <listitem>
37                     <para>erreur absolue désirée (1.d-14 par défaut).</para>
38                 </listitem>
39             </varlistentry>
40             <varlistentry>
41                 <term>er</term>
42                 <listitem>
43                     <para>erreur relative (1.d-8 par défaut).</para>
44                 </listitem>
45             </varlistentry>
46             <varlistentry>
47                 <term>err</term>
48                 <listitem>
49                     <para>estimation de l'erreur absolue sur le résultat.</para>
50                 </listitem>
51             </varlistentry>
52             <varlistentry>
53                 <term>ierr</term>
54                 <listitem>
55                     <para>numéro d'erreur (= 0 si absence d'erreur).</para>
56                 </listitem>
57             </varlistentry>
58         </variablelist>
59     </refsection>
60     <refsection>
61         <title>Description</title>
62         <para>
63             <literal>intg(a,b,f)</literal> approche l'intégrale de
64             <literal>a</literal> à <literal>b</literal> de <literal>f(t)dt</literal>.
65             La fonction <literal>f</literal> doit être continue.
66         </para>
67         <para>
68             L'évaluation satisfait si possible <literal>abs(I-v)&lt;=
69                 max(ea,er*abs(I))
70             </literal>
71             où <literal>I</literal> représente la valeur exacte de
72             l'intégrale.
73         </para>
74         <para>
75             <literal>f</literal> est une fonction externe :
76         </para>
77         <para>
78             Si <literal>f</literal> est une fonction Scilab elle doit avoir la
79             liste d'appel : <literal>y = f(t)</literal>
80         </para>
81         <para>
82             Si <literal>f</literal> est une liste, cette liste doit avoir la
83             structure suivante : <literal> list(f,x1,x2,...)</literal> où
84             <literal>f</literal> est une fonction Scilab avec la liste d'appel :
85             <literal>f(t,x1,x2,...)</literal>.
86         </para>
87         <para>
88             Si <literal>f</literal> est une chaîne de caractères, ce paramètre
89             désigne le nom d'un fonction Fortran ou d'une procédure C ayant une liste
90             d'appel fixée:
91         </para>
92         <para>
93             Dans le cas Fortran la liste d'appel doit être: <literal>double
94                 precision function f(x)
95             </literal>
96             où <literal>x</literal> est aussi un
97             nombre double precision.
98         </para>
99         <para>
100             Dans la cas C la liste d'appel doit être: <literal>double f(double
101                 *x)
102             </literal>
103             .
104         </para>
105     </refsection>
106     <refsection>
107         <title>Limitation connue</title>
108         <para>
109             Comme tous les intégrateurs, <literal>intg</literal> est susceptible de manquer des pics.
110         </para>
111         <para>
112             Une fonction plate contenant un pic sera considérée totalement plate si le pic est suffisamment raide.
113         </para>
114         <para>
115             Cela ne peut pas être évité, on comprend facilement pourquoi dès que l'on comprend comment l'intégrateur opère.
116             En effet, <literal>intg</literal> utilise la méthode des 21 points de Gauss-Kronrod,
117             donc s'il y a un pic entre deux points d'intégration consécutifs,
118             il ne sera pas détecté, la fonction sera considérée lisse.
119         </para>
120         <para>
121             Cependant, un warning s'affichera si la fonction est considérée très lisse,
122             qui suggèrera à l'utilisateur de réduire l'intervalle d'intégration,
123             s'il pense que des pics ont été manqués.
124         </para>
125         <para>
126             Les graphes suivants illustrent ce phénomène.
127         </para>
128         <scilab:image>
129             x = 0:.1:22;
130             y = zeros(1,221); y(1) = 3; y(96) = 1;
131             plot(x, y);
132             xtitle("Pic manqué");
133         </scilab:image>
134         <para>
135             Se situant entre les 9è and 10è points d'intégration, le pic n'est pas détecté et
136             <literal>intg</literal> considère la fonction comme plate.
137             Dans l'image suivante, le pic est suffisamment large pour être détecté.
138         </para>
139         <scilab:image>
140             x = 0:21;
141             y = zeros(1,22); y(1) = 3; y(10) = 1;
142             plot(x, y);
143             xtitle("Pic détecté");
144         </scilab:image>
145         <para>
146             Si l'utilisateur veut afficher la solution même si le solveur a rencontré une erreur,
147             il doit ajouter le troisième argument de sortie <literal>ierr</literal>, ce qui transformera
148             les erreurs en warnings. Ceci est surtout utilisé dans les cas d'erreurs d'arrondi.
149         </para>
150     </refsection>
151     <refsection>
152         <title>Exemples</title>
153         <programlisting role="example"><![CDATA[ 
154 //External écrit en Scilab
155 function y=f(x),y=x*sin(30*x)/sqrt(1-((x/(2*%pi))^2)),endfunction
156 exact=-2.5432596188;
157 I=intg(0,2*%pi,f)
158 abs(exact-I)
159
160 //External écrit en Scilab avec un argument
161 function y=f1(x,w),y=x*sin(w*x)/sqrt(1-((x/(2*%pi))^2)),endfunction
162 I=intg(0,2*%pi,list(f1,30))
163 abs(exact-I)
164
165
166 // External écrit en Fortran (un compilateur Fortran est nécessaire)
167 // Ecriture du code fortran
168 cd TMPDIR;
169 F=['      double precision function ffun(x)'
170    '      double precision x,pi'
171    '      pi=3.14159265358979312d+0'
172    '      ffun=x*sin(30.0d+0*x)/sqrt(1.0d+0-(x/(2.0d+0*pi))**2)'
173    '      return'
174    '      end'];
175 mputl(F,fullfile(TMPDIR,'ffun.f'))
176
177 // compilation du code Fortran
178 l=ilib_for_link('ffun',fullfile(TMPDIR,'ffun.f'),[],'f');
179
180 // link incrémental
181 link(l,'ffun','f')
182
183 // integration de la fonction
184 I=intg(0,2*%pi,'ffun')
185 abs(exact-I)
186
187 // External écrit en C (un compilateur C est nécessaire)
188 // Ecriture du code C
189 C=['#include <math.h>'
190    'double cfun(double *x)'
191    '{'
192    '  double y,pi=3.14159265358979312;'
193    '  y=*x/(2.0e0*pi);'
194    '  return *x*sin(30.0e0**x)/sqrt(1.0e0-y*y);'
195    '}'];
196 mputl(C,fullfile(TMPDIR,'cfun.c'))
197
198 // compilation du code C
199 l=ilib_for_link('cfun',fullfile(TMPDIR,'cfun.c'),[],'c');
200
201 // incremental linking
202 link(l,'cfun','c')
203
204 // integration de la fonction
205 I=intg(0,2*%pi,'cfun')
206 abs(exact-I)
207  ]]></programlisting>
208     </refsection>
209     <refsection role="see also">
210         <title>Voir aussi</title>
211         <simplelist type="inline">
212             <member>
213                 <link linkend="intc">intc</link>
214             </member>
215             <member>
216                 <link linkend="intl">intl</link>
217             </member>
218             <member>
219                 <link linkend="inttrap">inttrap</link>
220             </member>
221             <member>
222                 <link linkend="intsplin">intsplin</link>
223             </member>
224             <member>
225                 <link linkend="ode">ode</link>
226             </member>
227         </simplelist>
228     </refsection>
229     <refsection>
230         <title>Fonctions Utilisées</title>
231         <para>Les programmes correspondants (dqags.f et dqagse.f de quadpack) se
232             trouvent dans le répertoire SCI/modules/differential_equations/src/fortran/.
233         </para>
234     </refsection>
235 </refentry>