#
# Classe QUINTA    (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 un problema di formazione dei costi.
# In alcune produzioni i costi totali aumentano in proporzione all'aumento 
# del n. di pezzi prodotti:  Ct = Cf+Ci*n, dove n = "n. di pezzi prodotti
# nell'anno", Ct = "costi totali annui", Cf = "costi fissi annui",
# Ci = "costi incorporati in un pezzo".
# Supponiamo Ct = 30 000 + 0.05 n (una piccola tipografia che stampa fogli
# in un solo formato con 0.05€ di costi incorporati in ogni foglio stampato
# – per carta, inchiostro, energia elettrica, ... – e 30 mila € di spese fisse
# annue – per un addetto alle macchine, l'affitto, ...
# Dunque, supponendo che la produzione arrivi a 1 milione di fogli:
Ct <- function(n) 30*10^3 + 0.05*n
plot(Ct,0,10^6)
# Non vedo l'asse x. Scelgo un box che verticalmente contenga sia
# 0 che il valore massimo, 80 mila
plot(c(0,1e6), c(0,80e3), type="n")
plot(Ct,0,1e6, add=TRUE); abline(h=0,v=0, col="blue")
# traccio un reticolo per vedere meglio ("e" è un modo di introdurre
# la notazione esponenziale)
abline(h=c(2e4,4e4,6e4,8e4),v=c(2e5,4e5,6e5,8e5,10e5),col="red")
# I costi fissi sono indipendenti da n. Per tracciare il grafico devo
# comunque definirli in funzione di n (aggiungo n-n che vale 0):
Cf <- function(n) 30e3 +n-n
plot(Cf,0,1e6,add=TRUE,col="green")
# Sono costanti, quindi ho ottenuto una retta orizzontale.
# I costi unitari:
Cu <- function(n) Ct(n)/n
# (evidenemente potevo anche definirli come 30*10^3/n+0.05)
# e i costi incoporati
Ci <- function(n) 0.05 +n-n
# traccio i grafici (l'asse verticale lo faccio arrivare a 0.5)
plot(c(0,1e6),c(0,0.5),type="n")
abline(h=c(0.1,0.2,0.3,0.4,0.5),v=c(2e5,4e5,6e5,8e5,10e5),col="red")
plot(Cu,0,1e6,add=TRUE); abline(h=0,v=0,col="blue")
plot(Ci,0,1e6,add=TRUE,col="green")
#
# Se vendo ogni tappo a 0.18 € per quali valori di n non sono in perdita?
# Posso fare il grafico "unitario" o quello "totale".
# Facciamo il secondo.
# Il Guadagno totale è l'incasso - 0.18*n - meno i costi - Ct(n)
Gt <- function(n) 0.18*n-Ct(n)
# Il minimo e il massimo guadagno sono:
Gt(0); Gt(1e6)
# Faccio il grafico facendo variare y tra questi valori;
plot(Gt, 0,1e6, ylim=c(-3e4,1e5)); abline(v=0,h=0,col="blue")
abline(h=c(-2e4,2e4,4e4,6e4,8e4),v=c(2e5,4e5,6e5,8e5,10e5,-2e5),col="red")
# Traccio il grafico dei costi
plot(Ct, 0,1e6, add=TRUE)
# Il "guadagno" è nullo per:
uniroot(Gt, c(2e5, 4e5))$root
# per n=230769 si è in perdita, per n=230770 si è in attivo
plot(Gt, 0,230769, col="orange", type="b", add=TRUE)
plot(Gt, 230770,1e6, col="brown", type="b", add=TRUE)
abline(v=230769.2, lty=3)
#
# (4)
#
# Un problema di tipo alimentare:
# La tabella seguente indica le % di proteine, grassi, glucidi del pane, dei
# gamberetti, della maionese usati da una azienda per produrre tramezzini.
# Essa vuole combinare gli ingredienti così che un tramezzino contenga 12, 15,
# 40 g di proteine, grassi, glucidi. Quanto deve prendere di ogni ingrediente?
# Una tabella viene chiamata "matrice".
# Volendo possiamo specificare i nomi delle righe e delle colonne; si
# mettono in una "lista"; sono i "nomi" delle due "dimensioni":
nomi <- list(c("proteine","grassi","glucidi"),c("pane","gamberetti","maionese"))
MA <- matrix(data=c(8,1,55,14,1,3,1,80,3), nrow=3, ncol=3, dimnames=nomi); MA
# Per esprimere questi valori come rapporti invece che come % divido per 100:
MA <- MA/100; MA
# Mettiamo in una tabella anche ciò che vogliamo ottenere:
nomi2 <- list( c("proteine","grassi","glucidi"), "g")
Tram <- matrix(data = c(12,15,40), nrow=3, ncol=1, dimnames=nomi2); Tram
# Devo risolvere  MA*X = Tram, ossia moltiplicare a sinsitra per (MA)^(-1)
# ossia fare  (MA)^(-1) *  Tram
# L'inversa si trova con ginv; il prodotto tra matrici con %*%
ginv(MA) %*% Tram
# Questo è il peso in grammi dei tre ingredienti.
#
#
# (5)
#
# Vediamo, quasi a "scatola nera" un altro esempio:
#
u <- c(0,0,0,0); z <- array(u,dim=c(2,2)); x <- c(-1,1); y <- c(-1,1)
F <- persp(x,y,z,theta=-30,phi=25,scale=TRUE,zlim=c(0,2),xlim=c(-2,2),ylim=c(-2,2))
# Abbiamo rappresentato un quadrato sul piano x,y nello spazio
# tridimensionale x,y,z. Estendiamo il disegno per ottenere una casa
# (pmat=F serve per aggiungere elementi alla figura F)
lines(trans3d(c(-1,-1),c(-1,-1),c(0,1),pmat=F))
lines(trans3d(c(1,1),c(-1,-1),c(0,1),pmat=F))
lines(trans3d(c(1,1),c(1,1),c(0,1),pmat=F))
lines(trans3d(c(-1,-1),c(1,1),c(0,1),pmat=F))
lines(trans3d(c(-1,-1),c(-1,1),c(1,1),pmat=F))
lines(trans3d(c(1,1),c(-1,1),c(1,1),pmat=F))
lines(trans3d(c(1,0),c(1,1),c(1,1.5),pmat=F))
lines(trans3d(c(-1,0),c(1,1),c(1,1.5),pmat=F))
lines(trans3d(c(-1,0),c(-1,-1),c(1,1.5),pmat=F))
lines(trans3d(c(1,0),c(-1,-1),c(1,1.5),pmat=F))
lines(trans3d(c(0,0),c(1,-1),c(1.5,1.5),pmat=F))
lines(trans3d(c(0,0),c(1,-1),c(1.5,1.5),pmat=F))
lines(trans3d(c(-0.5,-0.5),c(-1,-1),c(0,0.5),pmat=F))
lines(trans3d(c(0.5,0.5),c(-1,-1),c(0,0.5),pmat=F))
lines(trans3d(c(-0.5,0.5),c(-1,-1),c(0.5,0.5),pmat=F))
#
# Vogliamo cambiare punto di vista; ci conviene costruire una "funzione"
# della direzione dello sguardo:
thph <- function(t,p) {
F <- persp(x,y,z,theta=t,phi=p,scale=TRUE,zlim=c(0,2),xlim=c(-2,2),ylim=c(-2,2))
lines(trans3d(c(-1,-1),c(-1,-1),c(0,1),pmat=F))
lines(trans3d(c(1,1),c(-1,-1),c(0,1),pmat=F))
lines(trans3d(c(1,1),c(1,1),c(0,1),pmat=F))
lines(trans3d(c(-1,-1),c(1,1),c(0,1),pmat=F))
lines(trans3d(c(-1,-1),c(-1,1),c(1,1),pmat=F))
lines(trans3d(c(1,1),c(-1,1),c(1,1),pmat=F))
lines(trans3d(c(1,0),c(1,1),c(1,1.5),pmat=F))
lines(trans3d(c(-1,0),c(1,1),c(1,1.5),pmat=F))
lines(trans3d(c(-1,0),c(-1,-1),c(1,1.5),pmat=F))
lines(trans3d(c(1,0),c(-1,-1),c(1,1.5),pmat=F))
lines(trans3d(c(0,0),c(1,-1),c(1.5,1.5),pmat=F))
lines(trans3d(c(0,0),c(1,-1),c(1.5,1.5),pmat=F))
lines(trans3d(c(-0.5,-0.5),c(-1,-1),c(0,0.5),pmat=F))
lines(trans3d(c(0.5,0.5),c(-1,-1),c(0,0.5),pmat=F))
lines(trans3d(c(-0.5,0.5),c(-1,-1),c(0.5,0.5),pmat=F)) }
#
# Con:
thph(-30,25)
# riottengo la precedente vista; proviamo con altre:
thph(-10,25)
# ancora:
thph(-30,45)
# come vederla d'alto?
thph(-30,70)
#
#
# (6)
#
# Per finire in "bellezza" ...
#
f <- function(x,y) ifelse (x^2+y^2>1, 0, sqrt(abs(1-x^2-y^2)))
x <- y <- seq(-1.2, 1.2,0.1)
z <- outer(x, y, f)
persp(x, y, z, theta = 30, phi = 45, expand = 0.5, col = "lightblue")
for(a in -90:90) persp(x,y,z, theta=30, phi = a, expand=0.5, col="green")
for(a in 0:85) persp(x,y,z, theta=30, phi = 90-a, expand=0.5, col="green")
#
# Provate a capire che cosa abbiamo generato ...
#
# Buona "fine scuola" a tutti ...