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);