next up previous
suivant: Deuxième exemple d'application en monter: Découverte de MuPAD précédent: Des solutions

Premier exemple d'application en terminale : méthode de Newton et dichotomie

Vous savez de quoi il s'agit, donc je me contente de donner le résultat :

On construit un programme dépendant de la donnée d'une fonction f, d'une précision e et d'un premier terme u0.

$ »$ Newton:=proc(f,e,u0)

$ »$ local un,aun,fp,k;

$ »$ begin

$ »$ fp:=D(f);# fp est la dérivée de f

$ »$ k:=0; # On règle le compteur des itérations à zéro

$ »$ aun:=u0; # l'ancien un vaut au départ u0

$ »$ un:=u0-f(u0)/fp(u0);# calcul du terme suivant

$ »$ while abs(un-aun)>e do # tant que la précision n'est pas atteinte, on réitère

$ »$ aun:=un; un:=un-f(un)/fp(un);

$ »$ k:=k+1;# un tour de plus au compteur

$ »$ end_while;

$ »$ print(Unquoted,expr2text(float(un))." est la solution trouvée à ".expr2text(e)." près après ".expr2text(k)." itérations");

$ »$ end_proc:

On regarde ce que cela donne

$ »$ Newton(x->x^2-2,10^(-4),2);

Pour la dichotomie, la procédure dépend toujours de f et e et aussi des bornes a et b de l'intervalle

$ »$ dicho:=proc(f,e,a,b)

$ »$ local aa,bb,k;

$ »$ begin

$ »$ aa:=a;bb:=b; # les anciennes bornes valent au départ a et b

$ »$ k:=0; # le compteur est mis à zéro

$ »$ while (bb-aa)>e do

$ »$ if sign((f((bb+aa)/2)))=sign((f(bb))) then bb:=((aa+bb)/2):

$ »$ else aa:=((aa+bb)/2):

$ »$ end_if:

$ »$ k:=k+1;

$ »$ end_while;

$ »$ print(expr2text(float((bb+aa)/2))." est la solution trouvée à ".expr2text(e)." près après ".expr2text(k)." itérations");

$ »$ end_proc:

Il ne reste plus qu'à appliquer et à comparer

$ »$ dicho(x->x^2-2,10^(-4),1,2);


next up previous
suivant: Deuxième exemple d'application en monter: Découverte de MuPAD précédent: Des solutions
moi 2005-06-08