# [analisi discussa in "Curve Approssimanti" negli Oggetti Matematici]
# Posizionati nella cartella in cui c'e' il file; se e' il caso
# cambia la riga seguente
dove <- "http://macosa.dima.unige.it/om/voci/curvap"
# ovvero usa  dove <- "C:/.." con l'indicazione della cartella in cui
# hai salvato il file "bilog.txt"
# Carica ed esamina il file
nome <- paste(dove,"bilog.txt",sep="/")
readLines(nome,n=3)
[1] "# punti del grafico di una f.polinomiale da analizzare con scala bilog"
[2] "# e pendenza (con R)"                                                  
[3] "-1,1.2153126692E-10"
# I dati sono separati da ","; le righe di commento sono saltate automaticamente
dati <- read.table(nome,sep=",")
dim(dati)
[1] 21  2
# 21 righe di coppie di dati
# Un'occhiata ai dati
str(dati)
'data.frame':   21 obs. of  2 variables:
 $ V1: num  -1 -0.2 0.6 1.4 2.2 3 3.8 4.6 5.4 6.2 ...
 $ V2: num  1.22e-10 4.86 4.35 4.61 1.18e+01 ...
min(dati$V1); max(dati$V1); min(dati$V2); max(dati$V2)
[1] -1
[1] 15
[1] 1.215313e-10
[1] 6080
x1 <- -1; x2 <- 15; y1 <- 0; y2 <- 6500
plot(c(x1,x2), c(y1,y2), type="n",xlab="",ylab="")
points(dati)
abline(v=0,h=0,col="red")

# Sembrano dati con andamento polinomiale. Provo ad analizzarli trasformandoli
# in scala bilogaritmica. Prima aumento x e y in modo da avere tutti i
# dati > 1 (traslando, l'andamento polinomiale si mantiene)
dati3 <- dati
dati3$V1 <- dati3$V1+1.5; dati3$V2 <- dati3$V2+1
min(dati3$V1); max(dati3$V1); min(dati3$V2); max(dati3$V2)
[1] 0.5
[1] 16.5
[1] 1
[1] 6081
x1 <- -1; x2 <- 17; y1 <- -1; y2 <- 6500
plot(c(x1,x2), c(y1,y2), type="n",xlab="",ylab="")
points(dati3)
abline(v=0,h=0,col="red")
# Abbiamo tracciato il grafico traslato. Ora tarsformo in scala logaritmica
dati4 <- log(dati3)
min(dati4$V1); max(dati4$V1); min(dati4$V2); max(dati4$V2)
[1] -0.6931472
[1] 2.80336
[1] 1.215312e-10
[1] 8.712924
windows()
x1 <- -1; x2 <- 3; y1 <- -1; y2 <- 9
plot(c(x1,x2), c(y1,y2), type="n",xlab="",ylab="")
points(dati4)
abline(h=seq(-1,9,1),v=seq(-1,3,1/2),lty=3)

# Ho ottenuto il grafico sopra a sinistra. Vedo che tende ad avere
# andamento rettilineo. Cerco la pendenza con uno zoom
plot(c(2,3), c(6.5,9.5), type="n",xlab="",ylab="")
points(dati4, col="blue")
abline(h=seq(-1,9.5,1/2),v=seq(-1,3,1/10),lty=3)
lines(c(2,3), c(7.5,9.5), col="red",lty=3)
lines(c(2,3), c(6.5,9.5), col="red")
# Sapendo che l'andamento è polinomiale, e che quindi con una
# trasformazione bilogaritmica tende ad avere andamento rettilineo
# con pendenza pari al grado, traccio delle rette e osservo che i
# dati così trasformati tendono a disporsi lungo una retta con
# pendenza 2. Osservo meglio la cosa facendo il grafico delle
# pendenze dei tratti di grafico.
windows()
i <- seq( 1:(dim(dati)[1]-1) )
dati5 <- array(dim=c(20,2))
dati5[i,1] <- dati4[i,1]
dati5[i,2] <- (dati4[i+1,2]-dati4[i,2])/(dati4[i+1,1]-dati4[i,1])
x1 <- -1; x2 <- 3; y1 <- -1; y2 <- 5
plot(c(x1,x2), c(y1,y2), type="n",xlab="",ylab="")
abline(h=seq(-1,5,1),v=seq(-1,3,1/2),lty=3)
points(dati5); lines(dati5)

# Ho la conferma che la pendenza del grafico dei dati trasformati
# bilogaritmicamente tende a 3.