]> AND Private Git Repository - cours-mesi.git/blob - tel/TPmatlab/equation_nonlineaire/TP4a/iteration_dichotomie.m
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
quelques typos
[cours-mesi.git] / tel / TPmatlab / equation_nonlineaire / TP4a / iteration_dichotomie.m
1 function [n,X]=iteration_dichotomie(a,b,nmax,epsilon,fcn)\r
2 \r
3 \r
4 %       iteration_dichotomie : calcul d'une racine d'une fonction par dichotomie\r
5 %\r
6 % *********************************************************\r
7 %\r
8 %       [n,X]=iteration_dichotomie(a,b,nmax,epsilon,fcn) renvoie\r
9 %  les itérés de la méthode de dichotomie\r
10 %\r
11 %       variables d'entrées : \r
12 %     * a,b : borne de l'intervalle (avec f(a)f(b)<=0) \r
13 %               * nmax : nombre maximal d'itérations\r
14 %     * epsilon : précision souhaitée\r
15 %     * fcn est une chaîne de caractère représentant la fonction \r
16 %      (de type inline, builtin ou par fichier M-file);\r
17 %\r
18 %       variables de sortie :\r
19 %     * n est l'indice tel que (1/2^n)(b-a)<epsilon\r
20 %     * X est une vecteur qui contient les valeurs de x_0 à x_n\r
21 %\r
22\r
23\r
24 % ************ Fonctions auxiliaires utilisées ************\r
25 %\r
26 %       aucune\r
27 %\r
28 % *********************************************************\r
29 %\r
30 \r
31 \r
32 \r
33 % Contrôles d'entrée\r
34 if (a>=b)\r
35    error('il faut a<b');\r
36 end\r
37 qs=exist(fcn);\r
38 if (qs~=2) & (qs~=5) & (qs~=1)\r
39    error('fcn doit être le nom d''une fonction (built-in, M-file ou inline)');\r
40 end\r
41 if (feval(fcn,a)*feval(fcn,b)>0)\r
42    error('il faut f(a)f(b)<=0');\r
43 end\r
44 \r
45 % corps d'algorithme\r
46 X=(a+b)/2;\r
47 n=fix(-log(epsilon/(b-a))/log(2))+1;\r
48 if (n>nmax)\r
49    error('il faut n plus petit que nmax');\r
50 end\r
51 for k=1:n\r
52    x=(a+b)/2;\r
53    X=[X x];\r
54    auxif=feval(fcn,a)*feval(fcn,x);\r
55    if (auxif<=0) \r
56       b=x;\r
57    else\r
58       a=x;\r
59    end   \r
60 end\r