vuoi
o PayPal
tutte le volte che vuoi
Ci possono essere due possibili soluzioni per questo primo punto:
1) creo una funzione
fun_dens_norm<-function(x,mu=1,sigma2=2){
y=(1/(sqrt(2*pi*sigma2))*exp(-1/(2*sigma2)*(x-mu)^2))
return(y)
} <- 1
fun_dens_norm(-1)mu
2)alternativa
mu<-1
sigma2 <- 2
x <- -1
f_x <- (2*pi*sigma2)^(-1/2)*exp(-1/(2*sigma2)*(x-mu)^2); f_x
᛫ Nel secondo punto invece ci viene chiesto di rappresentare graficamente la
densità di X nel range (-5,5)
curve(fun_dens_norm(x),xlim = c(-5,5),
main="funzione di densità della normale",
ylab="f(x)",xlab="x")
᛫ il terzo punto mi chiede di sovraimporre al grafico una linea verticale e una
orizzontale in -1 e in f(-1)
fun_dens_norm(-1)
abline(v=-1,h=fun_dens_norm(-1),col="red",lty=2)
points(-1,fun_dens_norm(-1),pch=20,col="red")
ESERCIZIO 1.2
᛫ Il primo punto mi chiede di sommare i primi 600 numeri
n<-600
x<-1:n
sum(x)
᛫ Il secondo punto mi chiede di sommare i primi 600 numeri seguendo la
formula di Gauss
n<-600
somma<-n*(n+1)/2;somma
ESERCIZIO 1.3
᛫ Il primo punto mi chiede di estrarre gli elementi in posizione pari del vettore v
che contiene i numeri pari da 1 a 250 e si calcoli la loro somma.
Anche qui abbiamo due alternative:
1)v<-1:250
pari<-v[seq(0,250,2)]
sum(pari)
2)v <- 1:250
sum(v[2*(1:floor(length(v)/2))])
᛫ Il secondo punto mi chiede di determinare il numero di interi tra 1 e 250 che
risultano maggiori di 97 e dispari.
v<-1:250
booleani<-v>97 & (v%%2 == 1) #Se il numero è dispari, il resto è 1, altrimenti è 0.
sum(booleani)
ESERCIZIO 1.4
᛫ Il primo punto mi chiede di scrivere una funzione che, senza utilizzare la
funzione t(), restituisca la trasposta di una matrice mat ricevuta come
argomento.
che cos’è però la trasposta di una matrice?
La matrice trasposta è una trasformazione di una matrice che si ottiene
scambiando le sue righe con le sue colonne. Se hai una matrice T
A di dimensione m×n (con m righe e n colonne), la matrice trasposta A avrà
dimensione ×
R I S O L U Z I O N E
my_trasp<-function(mat){
ncol_mat<-ncol(mat)
nrow_mat<-nrow(mat)
trasp<-matrix(NA,ncol=nrow_mat,nrow = ncol_mat)
for(r in 1:nrow_mat){
trasp[,r]<-mat[r,]
}
return(trasp)
}
Nel ciclo for avviene la trasposizione vera e propria:Il ciclo scorre ogni riga della
matrice originale (mat), indicata da r, che varia da 1 a nrow_mat (numero di
righe della matrice originale).Ad ogni iterazione: mat[r, ] estrae la riga r della
matrice originale. trasp[, r] assegna questa riga alla colonna r della matrice trasp.
In pratica, ogni riga della matrice originale diventa una colonna nella matrice
trasposta.
᛫ Il primo punto mi chiede di fare un esempio
A<-matrix(c(1:12),nrow = 2,ncol=3)
A
my_trasp(A)
ESERCIZIO 1.5
᛫ Il primo punto mi chiede di scrivere una funzione che permetta di calcolare il
prodotto scalare tra due vettori di stessa lunghezza. Qualora i due vettori dati in
input non dovessero avere la stessa lunghezza, la funzione deve portare ad un
messaggio di errore.
prod_scal <- function(a,b){
if(length(a) != length(b)){
print("Errore: i due vettori devono avere la stessa dimensione")
} else {
somma <- 0
for(i in 1:length(a)){
somma <- somma + (a[i]*b[i])
}
return(somma)
}
}
a <- c(10, 2, 7)
b <- 4:6
c <- c(1, 1, 1, 1)
prod_scal(a, b)
prod_scal(a, c)
ESERCIZIO 1.6
᛫ una funzione che riceva come
Il primo punto mi chiede di scrivere
argomento un numero intero e restituisca se il numero è primo e
TRUE FALSE
altrimenti
is.primo <- function(x){
divisori <- 2:(x-1)
if(any(x%%divisori == 0)) {
return(FALSE)
} else {
return(TRUE)
}
}
is.primo(9)
is.primo(13)
ESERCIZIO 1.7
᛫ Il primo punto mi chiede di scrivere una funzione che riceva come argomenti
voti ed un vettore CFU. La funzione deve restituire una lista, avente
un vettore
come primo elemento la media aritmetica dei voti e come secondo elemento la
media aritmetica ponderata degli stessi.
medie <- function(voti, CFU){
output <- list()
output$media <- sum(voti)/length(voti)
output$media_ponderata <- sum(voti*CFU)/sum(CFU)
return(output)
} Il secondo punto mi chiede di utilizzare la funzione appena scritta per calcolare
᛫
le medie dei propri voti, verificando la correttezza dei risultati tramite il proprio
libretto online.
miei_voti2 <- c(27, 30, 18, 25, 30, 23, 30)
miei_CFU2 <- c(6, 9, 9, 6, 9, 6, 6)
medie(miei_voti2, miei_CFU2)
ESERCIZIO 1.8
᛫ Il primo punto mi chiede di scrivere una funzione che restituisca il vettore
standardizzato.
x <- seq(5, 271.2, by=.86)
stand <- function(v) {
s <- (v-mean(v))/sd(v)
return(s)
}
s <- stand(x)
c(mean(s), sd(s))
Il secondo punto mi chiede di scrivere una funzione che normalizzi il vettore
᛫
(cioè che scali il vettore in modo tale che i suoi elementi assumano valori in
[0,1])
C O D I C E
x <- seq(5, 271.2, by=.86)
norm <- function(v) {
n <- (v-min(v))/(max(v)-min(v))
return(n)
}
n <- norm(x)
c(min(n), max(n))
ESERCIZIO 1.9
᛫ Il primo punto mi chiede di scrivere una funzione che riceva due interi n
e k e restituisca una tavola pitagorica di dimensione nxk
.pitag <- function(n, k){
out <- matrix(NA, nrow=n, ncol=k)
for(i in 1:n){
for(j in 1:k){
out[i,j] <- i*j
}
}
return(out)
}
pitag(5,4)