#           Su quanto fatto ieri:
# Ho fatto un po' di prove col mio dado, ho aggiunto gli esiti a quelli
# trovati insieme e ho ottenuto:
dati <- c(
1,4,6,6,3,3,5,6,2,4,6,2,4,4,2,3,5,2,1,1,5,6,6,1,4,5,4,6,6,5,6,6,4,5,1,2,1,6,
5,3,6,2,6,5,1,6,4,5,5,6,5,2,6,6,6,3,1,4,6,4,2,6,1,6,6,5,4,4,5,5,2,4,6,3,4,2,
5,6,4,3,6,6,1,3,6,2,6,3,6,1,2,2,6,6,3,4,4,2,3,1,4,1,6,4,2,3,1,6,5,1,6,3,5,3,
4,3,2,2,4,4,3,6,3,4,6,6,2,6,6,5,5,5,2,6,1,2,1,4,6,1,4,4,5,3,1,5,4,5,1,2,3,6,
2,2,6,3,3,6,2,6,5,5,1,2,2,4,5,4,5,5,6,1,6,2,5,6,4,4,2,3,5,1,2,2,2,5,4,6,4,5,
1,2,3,2,4,6,3,5,5,6,2,3,2,3,2,6,2,3,6,2,4,6,2,5,3,3,2,2,3,6,5,5,6,5,2,1,4,6,
6,1,1,6,5,2,2,4,4,6,4,3,5,6,3,6,2,4,6,4,5,1,4,2,1,4,2,3,2,1,1,1,4,4,6,5,5,2,
5,1,3,5,1,4,6,3,2,6,1,4,6,3,5,1,6,1,4,6,4,1,2,5,6,4,2,1,2,2,3,1,1,4,3,1,4,5,
2,5,6,6,5,2,5,5,3,2,2,6,5,2,5,1,1,5,6,4,2,3,4,3,3,2,4,6,2,2,5,5,2,5,2,6,3,2,
4,5,1,4,3,1,4,1,2,5,1,3,1,3,4,2,3,1,4,4,6,5,5,1,5,2,3,5,2,1,5,6,5,2,2,2,2,5,
6,2,2,3,6,2,1,6,3,3,2,1,1,4,3,3,5,6,5,5,5,6,2,5,1,6,3,6,2,3,6,2,2,2,3,4,2,2,
6,5,4,2,3,1,4,5,6,4,2,3,5,5,3,3,4,3,6,3,2,6,5,2,1,6,5,2,4,4,3,5,3,6,5,6,2,5,
2,5,1,4,4,3,4,5,1,2,2,2,2,1,5,6,4,4,6,3,3,6,1,6,6,6,6,3,6,2,1,1,1,1,2,1,5,6,
2,3,3,2,3,3,1,5,6,2,2,3,1,3,4,4,5,1,5,5,1,1,2,3,5,6,3,3,6,3,1,5,3,4,6,4,2,3,
1,1,2,3,3,4,4,6,5,4,4,4,1,3,5,4,3,2,5,5,5,4,4,2,5,2,6,2,3,6,4,5,2,5,6,1,5,4,
5,4,2,6,3,3,3,6,2,2,4,4,4,3,5,2,5,6,6,6,4,1,6,1,2,2,4,3,1,1,5,4,5,2,4,1,5,6,
2,6,6,3,5,3,1,1,3,6,4,2,4,4,1,5,6,6,5,6,5,3,1,2,2,1,6,2,4,4,1,2,5,2,6,1,2,6,
6,2,4,4,5,5,2,6,6,4,6,4,1,4,3,2,3,6,2,2,3,4,2,6,2,6,6,5,6,4,2,3,5,4,2,5,1,6,
4,1,6,4,6,5,6,5,2,6,6,5,3,6,2,6,6,3,1,4,6,5,2,6,1,6,5,2,4,6,3,4,2,6,5,4,6,5,
5,6,1,4,1,2,6,1,4,3,2,3,6,6,6,6,2,4,2,1,5,6,3,3,1,2,6,5,6,4,6,3,2,5,2,6,5,4
)
length(dati)
hist(dati,seq(0.5,6.5,1))
#
# Ecco la simulazione degli esiti del lancio di un dado simile a quello
# costruito: 1,2,3,4,5,6 con prob. 8.5%, 19.5%, 12%, 12%, 17.5%, 30.5%
# Controllo la somma:
a <- c(9,19.5,12,12,17.5,30.5); sum(a)
# OK
# Genero 10^n numeri a caso, con distribuzione uniforme, in [0,1)
# e associo ad ogni uscita 1,2,3,4,5,6 a seconda che l'uscita sia
# nel primo intervallo ampio 0.085, nel secondo ampio 0.195, ...
# Metto in v le probabilita' cumulate:
v <- c(0.085, 0.085+0.195, 0.085+0.195+0.12, 0.085+0.195+0.12+0.12,
       0.085+0.195+0.12+0.12+0.175)
v
# Simulo il fenomeno per n = 1, 2, ..., 5
# Uso l'orologio per far trascorrere un tot di sec tra le uscite
tic <- function(x) {sec <-proc.time()[3]; while(proc.time()[3] < sec+x) sec<-sec}
for (n in 1:5) { x <- runif(10^n); if(n > 1) tic(5)
  y <- ifelse(x < v[1],1,ifelse(x < v[2],2,ifelse(x < v[3],3,
       ifelse(x < v[4],4,ifelse(x < v[5],5,6)))));
  hist(y,seq(0.5,6.5,1),probability=TRUE,col="yellow",main=10^n);
  abline(h=axTicks(2), col="blue",lty=3)}

Attività con R - 2
[righe da eseguire, tra un "#" e l'altro]

# Schiacciando il tasto freccia ^ [v] si rivedono preced. [segu.] comandi.
# Quanto fatto può essere memorizzato usando il comando Save History
# e dandogli un nome (con estensione ".Rhistory"). Il file può essere
# ricaricato con Load History e può essere esaminato o caricato con i
# tasti freccia, come detto sopra.
#
# Per esamiare alcune funzioni incorporate si puo' guardare uno dei vari
# help; ad es. selezionare "R functions (text)" [o "Funzioni di R (testo)],
# mettere "sqrt" come parola da cercare; si apre "MathFun {base}" e da qui
# si seleziona "Math".  Si può usare anche "Search Engine & Keywords"
# attivabile da "Html Help" ("Guida Html"), e, soprattutto, sempre da
# "Html Help", aprire "Packages" e, quindi, "Base" e "Graphics".
# Si tratta, comunque, di help non "facili".     Battendo il comando
# help(sqrt)  si entra direttamente nell'help di sqrt (se non sei in rete
# potrebbe essere azionabile solo "Search Help" - "Cerca nella Guida").
#
# I grafici di tre funzioni a 1 input e 1 output con curve (con cui non è
# necessario - ma è possibile - specificare il dominio) e l'opzione add (ci
# sono anche altri modi per ottenerli) e plot (qui solo) per scegliere la scala:
# la 2ª riga riserva lo spazio per il rettangolo con ascissa da -5 a 5 e
# ordinata da -5 ad 8 e non lo traccia (type="n"), e non mette etichette agli
# assi (xlab="", ylab=""); con fg="white" non traccio il box, con xaxt="n",
# yaxt="n" ascisse/ordinate. I comandi sono copiabili facilmente e modificabili.
f <- function(x) x*2-1; g <- function(x) x^2-1; h <- function(x) x/2-1
plot(c(-5,5),c(-5,8),type="n",xlab="", ylab="")
abline(h=0,v=0,col="brown"); abline(v=axTicks(1), h=axTicks(2), col="brown",lty=3)
curve(f, add=TRUE,col="red"); curve(g, add=TRUE,col="blue"); curve(h,add=TRUE)
#
plot(c(-5,5),c(-5,8),type="n",xlab="", ylab="",fg="white")
abline(h=0,v=0,col="brown"); abline(v=axTicks(1), h=axTicks(2), col="brown",lty=3)
#
plot(c(-5,5),c(-5,8),type="n",xlab="", ylab="",fg="white",xaxt="n",yaxt="n")
abline(h=0,v=0,col="brown"); abline(v=axTicks(1), h=axTicks(2), col="brown",lty=3)
#
# Una definizione per ricorsione:
A <- 90000
F <- function(n) if (n==0) 1 else (Recall(n-1)+A/Recall(n-1))/2
# ovvero: F <- function(n) if (n==1) 1 else (Recall(n-1)+A/Recall(n-1))/2
F(1); F(2); F(10); F(11); F(12)
A <- 1024; F(9); F(10)
# Che cosa calcola F?
# x(0)=1, x(n+1) = ( x(n) + A/x(n) ) / 2 (che converge a ...)
#
# Se un comando e' lungo si puo' scriverlo tutto su una stessa riga fino
# a qualche migliaio di caratteri o si puo' andare a capo: la riga seguente
# è interpretata come continuazione (sullo schermo è aggiunto automaticamente
# un "+" all'inizio della nuova riga). Un esempio:
dati <- c(1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,
         21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40)
mean(dati)
#
# generazione di alcune sequenze di numeri interi:
s <- 5:11; s; 5:11-1; 5:(11-1); 11:5; s/2
# più in generale:
seq(6); seq(3,9); seq(3,10,0.8); seq(3,10,len=4); seq(3,by=0.8,len=6)
# modi per ripetere più volte dei dati:
x <- c(3.1, 6.4, 21.7); c(7,rep(x, 4)); c(7,rep(x, each=4))
#
# analisi dei dati relativi ad un gruppo di alunne quindicenni (altezze in cm)
alu <- c(156,168,162,150,167,157,170,157,159,164,157,165,163,165,166,160,163,162,155)
length(alu); sort(alu); mean(alu); median(alu)
# Stem-and-leaf plot (o, in breve, stem plot). La cifra indicata nella
# prima colonna è il "gambo" (stem) del singolo dato, la cifra rimanente
# è la "foglia" (leaf); per ogni gambo ci possono essere più foglie
# (dati classificati nella stessa classe).
stem(alu)
# un modo per contare le lunghezze delle colonne, anche parziali
stem(alu, width = 0); stem(alu, width = 2)
# come scegliere intervalli diversi (lo standard equivale a scale=1)
stem(alu,scale=0.5); stem(alu,scale=3)
#
# [continua]

Si può dimostrare che la successione  A(0)=1, A(n+1) = (A(n) + k/A(n)) / 2, con k > 0, convege a √k. Questo è un efficientissimo algoritmo per calcolare la radice quadrata di un numero che risale agli antichi babilonesi. Ha come idea originale la seguente osservazione: se A è una approssimazione per eccesso [difetto] di √k allora k/A ne è una approssimazione per difetto [eccesso] (da A > √k segue che k/A < √k), e quindi come migliore approssimazione si può prendere la media artitmetica, (A+k/A)/2, di tali approssimazioni.