La sucesión de variaciones es
variacion<-read.table("~/Documentos/8voSemestre/AMultivariado/input.txt", quote="\"", comment.char="")
variacion<-variacion$V1
head(variacion)
## [1] 16 -15 -2 -6 -6 -17
Por tanto el precio es
0+sum(variacion)
## [1] 439
Por ejemplo si las variaciones fueran c(+1,-2,+3,+1), se tendría:
¿Cuál es primer precio que ocurre dos veces dada esta lista de variaciones?
variacion<-read.table("~/Documentos/8voSemestre/AMultivariado/input2.txt", quote="\"", comment.char="")
head(variacion$V1)
## [1] 16 -15 -2 -6 -6 -17
Note que la lista de variaciones puede repetirse a si misma muchas veces antes de encontrar el precio duplicado; además, el precio duplicado debe ser encontrado en medio del proceso de búsqueda y detenerlo.
Solución
Vea que
Precios<-0+cumsum(variacion$V1)
alcanzado<-0
for(i in 2:length(Precios)){
precio<-Precios[i]
paro<-sum(Precios[1:(i-1)]==precio)
if(paro){
print(paste("El precio es",precio))
print(paste("Se alcanza en la iteración",i))
alcanzado<-1
break()
}
}
if(! alcanzado)
print(paste("No hay repeticiones"))
## [1] "No hay repeticiones"
Si hacemos una lista de los números naturales menores a 10 que son multiplos de 3 o 5 obtendremos c(3, 5, 6, 9), la suma de esos multiplos es 23.
Encuentre la suma de todos los multiplos de 3 o 5 menores a 1000.
Solución
Lista<-1:1000
indices<-(Lista%%3 ==0)|(Lista%%5 ==0)
Lista<-Lista[indices]
print(paste("La suma es",sum(Lista)))
## [1] "La suma es 234168"
Como bien sabe, cada término de la sucesión de Fibonacci se obtiene sumando los dos elementos anteriores.
Considere los elementos de la sucesión de Fibonacci menores a 1,000,000,000. Sea \(x\) la suma de los elementos impares, \(y\) la suma de los elementos pares. Encuentre \(z=\dfrac{x}{y}\)
Solución
Fibonacci<-c(1,1) # primeros términos
i<-2 # índice en la sucesión
fib<-0
# Lo siguiente genera los elementos de la sucesión
# menores o iguales a 10^9
while(fib<=10^9){
fib<-sum(Fibonacci[c(i-1,i)])
Fibonacci<-append(Fibonacci,fib)
i<-i+1
}
x<-sum(Fibonacci[Fibonacci%%2==1])
y<-sum(Fibonacci)-x
x/y
## [1] 1
Ahora considere los primeros \(10n\) elementos de la sucesión de Fibonacci con \(n \in [1,200]\) sea \(x\) el número de elementos impares, \(y\) el número de elementos pares y \(z=\dfrac{x}{y}\). Haga un gráfico interactivo del vector de \(z\)′s. Explique un par de insights interesantes sobre el ejercicio.
Solución
require(dygraphs)
Fibo_par<-function(n){
if(n == 1|n==2){
res<-rep(0,n)
}else{
res<-c(0,0)
for(i in 3:n){
res<-c(res,(1+(-1)^(res[i-2]+res[i-1]))/2)
}
}
return(res)
}
Proporcion<-function(n){
sucesion.n<-Fibo_par(n)
y<-sum(sucesion.n)
x<-n-y
return(x/y)
}
z<-10*1:200
w<-sapply(z,Proporcion)
Valores<-cbind(z,w);colnames(Valores)<-c("Término","Razón")
Valores<-data.frame(Valores)
dygraph(Valores,main = "Razón impar/par",xlab = "Término",ylab = "Razón")
Escriba una función que encuentre los números primos entre 1 y \(n\). Haga un gráfico animado de la proporción de números primos en los primeros \(10k\) naturales con \(k\in (1:n)\).
Solución
primes<-function(n){
if(n==1)
lista<-c()
if(n==2)
lista<-c(2)
if(n==3)
lista<-c(2,3)
else{
lista<-c(2,3)
for(k in 4:n){
maximo<-floor(sqrt(k))
indices<-lista<=maximo
primos<-lista[indices]
if(prod(k%%primos!=0)){
lista<-c(lista,k)
}
}
}
return(lista)
}
dprimes<-function(n) length(primes(n))/n
z<-10*1:100
w<-sapply(z,dprimes)
Valores<-cbind(z,w);colnames(Valores)<-c("Término","Proporción")
Valores<-data.frame(Valores)
dygraph(Valores,main = "Densidad de los primos",xlab = "Término",ylab = "Proporción")
Usted trabaja en un casino donde existe el siguiente juego: un jugador lanza tres dados y gana 20 pesos por cada 6 que aparece, el costo de jugar es de 10 pesos.
Escriba una función que simule el juego y regrese la cantidad que se gana en cada juego i.e. ganancia - costo. Calcule la media y varianza al simular 100, 1000 y 10000 juegos. Explique sus hallazgos al dueño del casino.
Adapte su función para que tome los argumentos: numero de juegos, dinero inicial, costo del juego, apuesta del juego y que devuelva una lista con:
Explore y explique las siguientes combinaciones para dinero inicial, costo del juego, apuesta del juego: (10,10,10), (10,2,5), (100, 10, 20), (1000, 5, 10). Explique.
Solución
Es claro que para el apostador, los eventos de interés son \[y_j=\begin{cases} 1&\text{el dado $j$ cae en 6}\\ 0& \text{e.o.c} \end{cases}\] para \(j\in 1:3\). Cada uno de estos es un ensayo Bernoulli, independiente de los demás, con probabilidad \(\dfrac{1}{6}\) de ocurrir, la suma los mismos determina la ganancia bruta del jugador que es \(20\sum_{j=1}^3y_j\). Note que \(x=\sum_{j=1}^3y_j\sim \text{Binom}(3,1/6)\). Luego, una forma de simular el resultado de \(n\) juegos es:
ganancia.neta<-function(n){
res<-20*rbinom(n,3,1/6)-10
return(res)
}
med.var<-function(n){
muestra<-ganancia.neta(n)
c(mean(muestra),var(muestra))
}
juegos<-c(100,1000,10000);juegos<-cbind(juegos)
resultados<-apply(juegos,1,med.var)
rownames(resultados)<-c("Media","Var")
colnames(resultados)<-c("100 juegos","1000 juegos", "10000 juegos")
knitr::kable(resultados,format = "markdown",align = "c",digits = 3)
| 100 juegos | 1000 juegos | 10000 juegos | |
|---|---|---|---|
| Media | 1.800 | 0.020 | 0.034 |
| Var | 218.949 | 173.773 | 165.615 |
Los resultados de la tabla anterior es consecuencia de la ley de los grandes números; al aumentar el número de ensayos, los estimadores de la media y la varianza tienden a sus valores teóricos que son: \[\mathbb{E}[20x-10]=20(1/2)-10=0\] \[Var(20x-10)=400Var(x)=400(\dfrac{1}{2}\dfrac{5}{6})=2000/12=166.666\]
Ganancia.neta<-function(n,d.ini,costo,apuesta){
muestra<-apuesta*rbinom(n,3,1/6)-costo
acumulado<-d.ini+cumsum(muestra)
matriz<-cbind(muestra,acumulado)
colnames(matriz)<-c("ganancia.juego","acumulado")
res<-list(
d.f=data.frame(matriz),
grafico=plot(acumulado,xlab = "Juego",ylab = "Acumulado",type = "l",col="darkcyan")
)
return(res)
}
Las combinaciones para dinero inicial, costo del juego, apuesta del juego, (10,10,10), (10,2,5), (100, 10, 20), (1000, 5, 10), producen:
n<-1000
# 1
Grafica<-Ganancia.neta(n,10,10,10)
# 2
Grafica<-Ganancia.neta(n,10,2,5)
# 3
Grafica<-Ganancia.neta(n,100,10,20)
# 4
Grafica<-Ganancia.neta(n,1000,5,10)