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

Private GIT Repository
j
[cours-mesi.git] / tel / TPmatlab / equation_nonlineaire / TP4a / iteration_regula_falsi.m
1 function [n,X]=iteration_regula_falsi(xm1,x0,nmax,epsilon,fcn)\r
2 \r
3 \r
4 %       iteration_regula_falsi : calcul d'une racine par regula falsi\r
5 %\r
6 % *********************************************************\r
7 %\r
8 %       [n,X]=iteration_regula_falsi(x0,xm1,nmax,epsilon,fcn) renvoie\r
9 %  les itérés de la méthode de la la fausse position\r
10 %\r
11 %       variables d'entrées : \r
12 %               * nmax : nombre maximal d'itérations\r
13 %               * xm1 et x0 : les deux premiers termes (x_{-1} et x_0)\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 correspondant à x_n avec f(x_n)=0 ou |x_n-x_{n-1}|<epsilon \r
20 %                                         ou n>=nmax\r
21 %     * X est une vecteur qui contient les valeurs de x_0 à x_n\r
22 %\r
23\r
24\r
25 % ************ Fonctions auxiliaires utilisées ************\r
26 %\r
27 %       aucune\r
28 %\r
29 % *********************************************************\r
30 %\r
31 \r
32 \r
33 \r
34 % Contrôles d'entrée\r
35 qs=exist(fcn);\r
36 if (feval(fcn,x0)*feval(fcn,xm1)>0)\r
37    error('il faut f(x0)f(x_(-1))<0');\r
38 end\r
39 if (qs~=2) & (qs~=5) & (qs~=1)\r
40    error('fcn doit être le nom d''une fonction (built-in, M-file ou inline)');\r
41 end\r
42 \r
43 % corps d'algorithme\r
44 p=-1;\r
45 n=0;\r
46 test=(feval(fcn,x0)~=0);\r
47 x=x0;\r
48 xp=xm1;\r
49 fxp=feval(fcn,xm1);\r
50 fx=feval(fcn,x);\r
51 xmm1=xm1;\r
52 X=x0;\r
53 while(test)\r
54    xnp1=x-((x-xp)/(fx-fxp))*fx;\r
55    fxnp1=feval(fcn,xnp1);\r
56    test=~((fxnp1==0)|(n>=nmax)|(abs(x-xmm1)<=epsilon));\r
57    xmm1=x;\r
58    x=xnp1;\r
59    fx=feval(fcn,x);\r
60    X=[X x];\r
61    if (test)\r
62       if (feval(fcn,xmm1)*fx<0) \r
63          p=n;\r
64          xp=xmm1;\r
65          fxp=feval(fcn,xp);\r
66       end\r
67    end\r
68    n=n+1;\r
69 end   \r
70 if (n>=nmax)\r
71    disp('attention, n>nmax');\r
72 end\r
73 \r
74 \r