| > | restart;with(plots):secu:=1000:secu une valeur de sécurité pour éviter les boucles trop longues |
Warning, the name changecoords has been redefined
Exercice 1
| > |
Question a)
| > | Dichotomie:=proc(f,a,b,epsilon)
local aa,bb,compteur,milieu; aa:=a;bb:=b; avant d'amorcer la boucle assurons-nous que nous sommes dans un cas particulier if is(f(a)*f(b)>0) then return([infinity,infinity]); si f(a) et f(b) sont de même signe on renvoie une solution erronnée elif is(f(a)=0) then return([0,a]); si f(a)=0 alors a est solution elif is(f(b)=0) then return([0,b]); si f(b)=0 alors b est solution fi; compteur:=0; while is(abs(bb-aa)>epsilon) and is(compteur<secu) do compteur:=compteur+1;milieu:=(aa+bb)/2; if is(f(milieu)=0) then aa:=bb au cas où milieu soit une solution on sort de la boucle en posant [an,b_n] de diametre nul elif is(f(milieu)*f(bb)<0) then aa:=milieu; else bb:=milieu; fi; od; [compteur,milieu]; end: |
| > |
Question b)
| > |
| > |
| > | Premier exemple |
| > |
| > | f:=x->exp(-x/2)-1;a:=-4;b:=4;epsilon:=10^(-8); |
| > | sol:=Dichotomie(f,a,b,epsilon);solution proposé par la procédure Dichotomie |
| > | 'f'(sol[2])=evalf(f(sol[2])); valeur de f en ce point |
| > |
| > | Deuxième exemple |
| > |
| > | f:=x->x^3-4*x+1;a:=-2.5;b:=-2;epsilon:=10^(-8); |
| > | sol:=Dichotomie(f,a,b,epsilon);solution proposé par la procédure Dichotomie |
| > | 'f'(sol[2])=evalf(f(sol[2])); valeur de f en ce point |
| > |
| > | Troisième exemple |
| > |
| > | f:=x->x^3-4*x+1;a:=0;b:=0.5;epsilon:=10^(-8); |
| > | sol:=Dichotomie(f,a,b,epsilon);solution proposé par la procédure Dichotomie |
| > | 'f'(sol[2])=evalf(f(sol[2])); valeur de f en ce point |
| > |
| > | Quatrième exemple |
| > |
| > | f:=x->x^3-4*x+1;a:=1.5;b:=2;epsilon:=10^(-8); |
| > | sol:=Dichotomie(f,a,b,epsilon);solution proposé par la procédure Dichotomie |
| > | 'f'(sol[2])=evalf(f(sol[2])); valeur de f en ce point |
| > |
| > |
Illustration Graphique
| > | f:=x->x^3-4*x+1; |
| > |
| > | sol:=SDichotomie(f,a,b,epsilon): |
| > | N:=sol[1]:s:=sol[2..N+1]: |
| > | Graphique(f,a,b,N,s); |
![[Plot]](images/Dichotomie_26.gif)
| > | sur l'axe des abbscissdes apparaissent les points milieu xn de la suite de segments [an,bn] construits par dichotomie
la courbe est cell de f |
| > | points:=seq([i,s[i]],i=1..N): |
| > | plot([points],color=black,thickness=2,style=point); |
![[Plot]](images/Dichotomie_27.gif)
| > | Les points tracés sont ceux de coordonnées (n,xn) |