"""metodo di Newton o delle tangenti per la ricerca degli zeri di una funzione; la stessa funzione puo' essere utilizzata sia con i numeri normali che con i decimal (basta cambiare l'input) bisogna pero' scrivere f f' ed f'' procedure corde2(a,b,e:extended); var c, x0, x1, er :extended; q : string; n: longint; begin n:=0; if D2p(a)*p(a)>0 then begin c:=a; x0:=b end else begin c:=b; x0:=a end; repeat x1:=x0-p(x0)*(c-x0)/(p(c)-p(x0)); form1.linea(c,p(c),x0,p(x0)); er:=abs(x0-x1); x0:=x1; n:=n+1; until er -3 #z**3-2*z**2-z+2 #2*z+logaritmo.ln(z) #z**3-3*z**2-z+3 gr.grafico(f,-4.0,4.0,0.02) def corda(a,b,e): n=0 if f(a)*D2f(a)>0: c=a x0=b else: c=b x0=a x1=x0-f(x0)*(c-x0)/(f(c)-f(x0)) while abs(x0-x1)>e: x0=x1 x1=x0-f(x0)/Df(x0) n=n+1 #print x0, x1 h=x0.__float__() #per il grafico bisogna passare ai float k=c.__float__() L1=Line(Point(k,f(k)),Point(h,f(h))) L1.draw(gr) return x1,n d=decimal.Decimal c=decimal.getcontext().prec-3 a=input('inserisci a ') b=input('inserisci b ') m,n= corda(d(str(a)),d(str(b)),d(str(10**-c))) #m,n=corda(a,b,0.00000001) print m,n print f(m)