#
# Classe SECONDA    (uscite)
#
# (1)
#
# Vedremo come usare un semplice programma, R, che potete scaricare
# sul computer collegandovi a  http://macosa.dima.unige.it/prog.htm
#
# Si possono copiare le righe di comandi come le seguenti e poi
# incollarle (azionando il comando col mouse o con Crtl+V) in R.
# Nel programma i comandi appaiono preceduti da >.
# Il cancelletto precede un commento: la riga non viene eseguita dal
# computer
# Nel seguito le parti separate da # sono da eseguire una dopo l'altra:
# le parti tra un # e il successivo possono essere copiate e incollate
# in R (R le esegue automaticamente).
#
3+100*7^2
# Per separare parte intera e parte frazionaria si usa ".", non ",".
#
24; 24*60; 24*60*60; 24*60*60*100
#
2/3+1/5
#
# Come eseguire i calcoli tra frazioni in modo esatto?
library(MASS)
fractions(2/3+1/5)
#
# il simbolo "c" indica una collezione di oggetti, su cui si
# possono eseguire le stesse operazioni fatte sui singoli oggetti
#
c(24, 24*60, 24*60*60, 24*60*60*100)
3 + c(24, 24*60, 24*60*60, 24*60*60*100) * 100
#
# per indicare la notazione esponenziale viene usata "e"
2^2; 2^3; 2^20; 2^30; 2^40; 2^-2; 2^-20
#
# Schiacciando il tasto freccia ^ [v] si rivedono preced. [segu.] comandi:
# cosa COMODA per rivedere, correggere o modificare precedenti comandi.
#
# (2)
#
# Vediamo alcune semplici attività statistiche.
# Esiti delle prime 9 partite di un campionato (3 vittoria, 1 pareggio,
# 0 sconfitta)
lazio <- c(3,1,0,0,1,3,0,0,1)
juve  <- c(3,3,1,1,0,3,1,1,3)
# La freccia <- serve per assegnare dei valori ad una variabile
#
# Vediamo la somma dei punti e il punteggio medio
sum(lazio); mean(lazio)
sum(juve); mean(juve)
# Predisponiamoci a tracciare il grafico selezionando una scatola
# da x=0 a x=10 e da y=-1 a y=4; non la tracciamo (type="n") 
plot(c(0,10),c(-1,4),type="n")
#
# Tracciamo delle linee con dei pallini (b) corrispondenti ai punteggi
lines(lazio,type="b",col="blue")
lines(juve,type="b",col="red")
#
# Calcoliamo i punteggi cumulati:
cumsum(lazio)
cumsum(juve)
#
# e rappresentiamoli graficamente:
plot(c(0,10),c(-1,17),type="n")
lines(cumsum(lazio),type="b",col="blue")
lines(cumsum(juve),type="b",col="red")
# Traccio una coppia di assi, verticale per x=0 ed orizzontale per y=0
abline(v=0,h=0)
# Mettiamo una "legenda"
text(1,15,"Juve",col="red")
text(1,13,"Lazio",col="blue")
#
# Abbiamo visto alcune, prime, semplici elaborazioni, grafiche e numeriche.
#
# (3)
#
# Esaminiamo le altezze degli alunni maschi di due classi
# Capite questi comandi:
al1 <- c(159,168,162,150,167,157,170,157,156,164,157,165,163,165,166,160,163,162,155)
al2 <- c(157,164,170,154,170,161,175,159,167,160,171,165,168,170,165,166,167,159,164)
length(al1): length(al2)
# Ordiniamoli, calcoliamone media e mediana:
sort(al1); mean(al1); median(al1)
sort(al2); mean(al2); median(al2)
#
# Che cosa ottengo con questi comandi:
stem(al1); stem(al2)
# E con questi:
hist(al1, seq(145,185,5), right=FALSE)
#
hist(al2, seq(145,185,5), right=FALSE)
# E con questo:
boxplot(al1,al2)
# E con questa variante:
boxplot(al1,al2, horizontal=TRUE, col="yellow")
# Ecco una sintesi numerica:
summary(al1); summary(al2)
#
# (4)
#
# Le funzioni sono degli oggetti matematici il cui valore dipende
# esattamente da altri oggetti matematici.
# Un esempio (583 sono gli alunni di una scuola), in cui le percentuali
# sono calcolate in funzioni dei singoli dati:
totale <- 583; perc <- function(dato) dato/totale*100
perc(27)
# Vogliamo vedere le percentuali degli alunni delle 1e, 2e,..., 5e.
# Controlliamo il totale:
sum((c(121,109,117,126,110)))
# OK
perc(c(121,109,117,126,110))
#
# Un confronto visivo, con un diagramma a barre
barplot(perc(c(121,109,117,126,110)))
#
# Vediamo un tipo di funzione che conoscete:
f <- function(x) 1.5*x^2+2*x-2
# Ne tracciamo il grafico col comando plot:
plot(f,-5,5)
abline(h=0,v=0)
#
# Cerchiamo le intersezioni con l'asse x, ossia i valori di x per cui
# f(x)=0; questi valori vengono anche chiamati "radici", in inglese
# "root". Sappiamo risolvere l'equazione "a mano", ma ora facciamolo col
# computer.  Dobbiamo dargli in input un intervallo in cui il grafico
# attraversa l'asse x:
uniroot(f, c(-2,0))$root
uniroot(f, c(0,1))$root
# troviamo con più esattezza la frazione
fractions(uniroot(f, c(0,1))$root)
# Dunque -2 e 0.666… = 2/3 sono le soluzioni. Verifichiamolo:
f(-2); f(2/3)
#
# Vediamo ora, senza soffermarci troppo, come tracciare più grafici
# al variare di un parametro (k in questo caso):
f <- function(x) k*x^2+2*x-2
plot(c(-5,5), c(-10,10), type="n",xlab="", ylab="")
axis(1, pos=0, label=FALSE, col="brown")
axis(2, pos=0,label=FALSE, col="brown")
c <- 0
for (k in -4:0) {print(k); c <- c+1; curve(f, add=TRUE,col=c)}
#
for (k in 1:4) {print(k); c <- c+1; curve(f, add=TRUE,col=c)}
# Il significato dei colori:
for (i in 1:9) text(-5+i,9,i-5,col=i)
# A voi i commenti ...
#
# (5)
#
# Finiamo con un rapidissimo cenno ai sistemi lineari.
# Risolviamo il sistema:
#  x+2/3y-z = 1,  2x-y = 3,  3x+y+z/5 = 5.   Mettiamo
# in una matrice i coefficienti e in un'altra i termini noti:
ma <- matrix(data=c(1,2,3, 2/3,-1,1, -1,0,1/5), nrow=3, ncol=3); ma
noti <- matrix(data = c(1,3,5), nrow=3, ncol=1); noti
# Conviene vedere i coefficienti in forma frazionaria:
fractions(ma)
# Il calcolo del determinante della matrice ci dice che c'e' una
# sola soluzione
det(ma); fractions(det(ma))
# Eccola, usando ginv che dà la matrice inversa:
ginv(ma) %*% noti
# In forma frazionaria:
fractions(ginv(ma) %*% noti)
# Facciamo la verifica:
ma %*% (fractions(ginv(ma) %*% noti))
# OK
#
# Buon lavoro per gli anni futuri ...!