ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 06 Nov 2006 13:10 Sujet du message: |
|
|
Il fallait passer une fonction x->f(x) à la procédure.
Exemple: bissection(x->x-sqrt(2),0,2,10^(-6));
Code: |
> bissection:=proc(f,a,b,e)
> local a1,b1,m;
> a1:=evalf(a);
> b1:=evalf(b);
> while evalf(abs(b1-a1))>=e do
> m:=evalf(f((a1+b1)/2)):
> if evalf(f(a1))*m<0 then b1:=evalf(((a1+b1)/2))
> elif evalf(f(a1))*m>0 then a1:=evalf(((a1+b1)/2));
> end if ;
> print(`x entre `, a1,` et `, b1);
> end do;
> return(x=evalf((a1+b1)/2))
> end proc:
> bissection(x->x-sqrt(2),0,2,10^(-6));
x entre , 1.000000000, et , 2.
x entre , 1.000000000, et , 1.500000000
x entre , 1.250000000, et , 1.500000000
x entre , 1.375000000, et , 1.500000000
x entre , 1.375000000, et , 1.437500000
x entre , 1.406250000, et , 1.437500000
x entre , 1.406250000, et , 1.421875000
x entre , 1.414062500, et , 1.421875000
x entre , 1.414062500, et , 1.417968750
x entre , 1.414062500, et , 1.416015625
x entre , 1.414062500, et , 1.415039062
x entre , 1.414062500, et , 1.414550781
x entre , 1.414062500, et , 1.414306640
x entre , 1.414184570, et , 1.414306640
x entre , 1.414184570, et , 1.414245605
x entre , 1.414184570, et , 1.414215088
x entre , 1.414199829, et , 1.414215088
x entre , 1.414207458, et , 1.414215088
x entre , 1.414211273, et , 1.414215088
x entre , 1.414213180, et , 1.414215088
x entre , 1.414213180, et , 1.414214134
x = 1.414213657
|
|
|