> |
> | dicho:=proc(E,a,b,p)
local aa,bb,m,n,k,f; f:=unapply(E,x); n:=length(convert(floor((b+a)*0.5),string)); Digits:=p+n; aa:=evalf(a); bb:=evalf(b); k:=0; while evalf(bb-aa)>evalf(10^(-p)) do m:=(bb+aa)*0.5; if sign(evalf(f(m)))=sign(evalf(f(aa))) then aa:=m; else bb:=m; fi; k:=k+1; od; return(evalf((bb+aa)*0.5),k); end: |
> |
> | dicho(x^2-2,1,2,300); |
1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641572735013846230912297024924836055850737212644121497099935831413222665927505592755799950501152782060571470109559971605970274534596862014728517418640889198609552329230484308714321450839762603627995251407990, 997 |
> | newt:=proc(E,uo,p,N)
local f,k,fp,n,un; f:=unapply(E,x); fp:=D(f); k:=0; n:=length(convert(floor(evalf(uo)),string)); Digits:=n+p; un:=evalf(uo-f(uo)/fp(uo)); while evalf(abs(f(un)/fp(un)))>evalf(10^(-p)) and k<N do if fp(un)=0 then return("probleme"); fi; un:=un-f(un)/fp(un); k:=k+1; od; return(un,k); end: |
> | newt(x^2-2,1,300,50); |
1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641572735013846230912297024924836055850737212644121497099935831413222665927505592755799950501152782060571470109559971605970274534596862014728517418640889198609552329230484308714321450839762603627995251407990, 8 |
> |