
# ricerca degli zeri mediante il metodo di Newton

pausa <- function() readline(prompt="\nDai Enter per continuare")

fun <- function(x) x^2 - N  

N <- as.numeric(readline(
     prompt="Dai il numero del quale si vuol trovare la radice ") )

x    <- seq(-sqrt(N)*1.5, sqrt(N)*3, len=101)
xtxt = sqrt(N)*0.1
ytxt = max(fun(x))
dy   = ytxt/15 
ylab <- sprintf("x^2 - %f", N)
main <- sprintf("Algoritmo di Newton per trovare Sqrt(%f)", N)
plot(x, fun(x), ty='l', col='blue', ylab=ylab, main=main,
     ylim=c(min(fun(x))*1.5, max(fun(x))))
abline(h=0, col='gray')
abline(v=0, col='gray')

cat(sprintf("Clicca su un punto delle ascisse con x positiva"))
p0 = locator(1)
x  = p0$x


x0 = Inf
while( abs(x-x0) > 0.000001 ) {
  testo = sprintf("x = %.6f", x)  
  text(xtxt, ytxt, testo, cex=2, pos=4, col='blue')  
  points(x, 0, pch=19)
    
  pausa()
  points(x, fun(x), pch=19, col='blue')
  lines(c(x,x), c(0,fun(x)), lty=2, col='orange')

  pausa()
  m = 2*x
  c = fun(x) - m*x
  abline(c, m, col='red', lty=2)
  x0 = x
  x=-c/m
  points(x, 0, pch=19)
  ytxt = ytxt - dy
}

