AJO_1819_Practica2

140 days ago by sevillad1819

Práctica 2 de AJO 2018-19

Límite de entrega de esta práctica: ver tarea en Moodle o calendario de la asignatura. Hasta una semana de retraso: vale hasta el 50%. Más de una semana de retraso: no cuenta para la nota.

Instrucciones:

  1. Haz una copia de la hoja pública y renómbrala: si tu correo es usuario@alumnos.unex.es añade al final del título _usuario, por ejemplo CAv_1314_Practica7_sevillad.
    • Para cambiar el nombre pulsa en el título de la hoja (arriba del todo, entre el logo de Sage y el menú "File...")
  2. Comparte la hoja de trabajo con el usuario sevillad1819 mediante el botón Share de arriba a la derecha.
  3. Trabaja la práctica.
  4. Cuando hayas terminado, haz una copia en un fichero PDF y ponlo en el campus virtual. Esa será la versión que se evaluará. La hoja no se considera entregada si no se ha compartido (punto 2).
    • Para generar el PDF lo más sencillo es usar Print arriba e imprimir la nueva página a fichero.
    • Una alternativa es hacer capturas de pantalla (JPG, PNG...) y convertirlas a un único fichero PDF.

 

Con Sage podemos calcular los indicadores estadísticos más habituales, pues ya existen funciones que lo hacen. Vamos a ver algo más útil: cómo manipular listas de datos. Una lista no es más que un conjunto ordenado de datos (números o no), separados por comas y rodeados por corchetes.

lista = [2,3,4,5,6] lista 
       
[2, 3, 4, 5, 6]
[2, 3, 4, 5, 6]

La función len nos devuelve la longitud de una lista.

len(lista) 
       
5
5

La función sum nos devuelve la suma de los elementos de una lista. Las funciones max y min nos dan lo que indican sus nombres.

sum(lista) 
       
20
20
max(lista) 
       
6
6
min(lista) 
       
2
2

Sage también nos permite, de manera muy sencilla, aplicar una función a todos los elementos de una lista. La sintaxis es

[f(n) for n in L]

donde L es el nombre de la lista que nos interesa y f es la función a aplicar a cada elemento. A continuación un ejemplo donde calculamos los cuadrados de unos números.

datos = [3, 6, 7, 4, 5, 4] cuadrados = [n^2 for n in datos] cuadrados 
       
[9, 36, 49, 16, 25, 16]
[9, 36, 49, 16, 25, 16]

Ejercicio 7 (opcional, 4 puntos). Calcula la varianza de los datos siguientes usando la definición: a cada elemento réstale la media y eleva al cuadrado, luego suma todo y divide.

d = [15,8,18,13,20,7,19,10,11,19,12,17,11,7,8,15,7,17,5,17,16,16,15,11,11,19,13,8,8,9,12,8,19,7,12,19,10,12,5,7,10,13,12,10,7] 
       
 
       
 
       

Puedes comprobar los resultados anteriores usando las funciones que tiene sage para la media y la varianza, que se llaman mean y variance. Ojo, el segundo no devuelve la varianza que hemos aprendido a calcular en clase sino otra relacionada; tienes que añadirle la opción bias=True para que nos devuelva la nuestra. En clase hablaremos de por qué hay dos valores distintos de la varianza.

 

Podemos extraer un elemento de una lista indicando su posición entre corchetes. Importante: en Sage se empieza a contar desde cero, es decir, el primer elemento de una lista tiene índice cero, el segundo tiene índice uno, etc.

lista = [2,3,4,5,6] lista[0]; lista[1] 
       
2
3
2
3

Fíjate en lo siguiente: si una lista L tiene 5 elementos, el último es L[4]. Pero Sage nos permite salirnos de ese rango: simplemente vuelve al principio de la lista, luego en este caso sería L[5]=L[0], así como L[6]=L[1], etc. Y también al revés: L[1] es el último elemento de la lista (significa algo así como "el primero contando al revés").

En la siguiente celda mostraremos el último elemento de la lista anterior de dos maneras. Por cierto, como ves, para mostrar dos resultados en una celda se ponen en la última línea separados por ";".

l = len(lista) lista[l-1]; lista[-1] 
       
6
6
6
6

Para ordenar un conjunto de datos usamos su propiedad .sort() (las propiedades de un objeto de Sage se usan con un punto después de su nombre). Ojo, al aplicarlo perdemos el orden original. Esto puede afectar a cálculos posteriores...

Asegúrate de entender bien el ejemplo siguiente.

datos = [13, 8, 17, 12, 16, 20, 7, 19, 17, 14] datos; datos[0] 
       
[13, 8, 17, 12, 16, 20, 7, 19, 17, 14]
13
[13, 8, 17, 12, 16, 20, 7, 19, 17, 14]
13
datos.sort() datos; datos[0] 
       
[7, 8, 12, 13, 14, 16, 17, 17, 19, 20]
7
[7, 8, 12, 13, 14, 16, 17, 17, 19, 20]
7

Como dijimos al principio, Sage tiene funciones que calculan los indicadores estadísticos más conocidos.

l = [5, 3, 6, 7, 4, 5, 4, 8] l 
       
[5, 3, 6, 7, 4, 5, 4, 8]
[5, 3, 6, 7, 4, 5, 4, 8]
mean(l); median(l); variance(l); std(l) 
       
21/4
5
39/14
sqrt(39/14)
21/4
5
39/14
sqrt(39/14)
r.summary(l,digits=10) 
       
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   3.00    4.00    5.00    5.25    6.25    8.00 
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   3.00    4.00    5.00    5.25    6.25    8.00 
 
       

Ejercicio 8 (opcional, 4 puntos). Escribe conjuntos de cuatro datos con las siguientes propiedades:

  1. Su media es 3 y su mediana es 5.
  2. Su media es 8 y tres de los cuatro datos están por encima de ella.
  3. Su media y su mediana coinciden, y la distancia entre el mayor y el menor de los datos es 10.
  4. Dos de los datos son 1 y 5, y su mediana es 4.
 
       
 
       
 
       
 
       

 

 

A continuación viene una (larga) descripción de cálculo integral con Sage; puedes pasar directamente al último ejercicio y volver para atrás según lo necesites.

Recordemos cómo integrar con Sage. Para calcular primitivas (integrales indefinidas) e integrales definidas, en ambos casos usaremos integrate.

f(x) = x^4-x^3 f 
       
x |--> x^4 - x^3
x |--> x^4 - x^3
g(x) = integrate(f,x) g; g(3)-g(1) 
       
x |--> 1/5*x^5 - 1/4*x^4
142/5
x |--> 1/5*x^5 - 1/4*x^4
142/5
integrate(f,x,1,3) 
       
142/5
142/5

 

 

A continuación viene una descripción de cálculo integral con Sage; puedes pasar directamente al último ejercicio y volver para atrás según lo necesites.

Para calcular primitivas (integrales indefinidas) e integrales definidas, en ambos casos usaremos integrate.

f = exp(-x) plot(f,0,10).show(figsize=3) integrate(exp(-x),x,0,oo) 
       
1
1

Si necesitas hacer integrales con límites indeterminados $a,b,...$ tienes que decirle a Sage antes de usarlos que esas letras son variables, si no habrá un error.

integral(x^2,x,a,b) 
       
Traceback (click to the left of this block for traceback)
...
NameError: name 'a' is not defined
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "_sage_input_19.py", line 10, in <module>
    exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("aW50ZWdyYWwoeF4yLHgsYSxiKQ=="),globals())+"\\n"); execfile(os.path.abspath("___code___.py"))
  File "", line 1, in <module>
    
  File "/tmp/tmpB8EsAe/___code___.py", line 3, in <module>
    exec compile(u'integral(x**_sage_const_2 ,x,a,b)
  File "", line 1, in <module>
    
NameError: name 'a' is not defined
var('a,b') integral(x^2,x,a,b) 
       
-1/3*a^3 + 1/3*b^3
-1/3*a^3 + 1/3*b^3

Finalmente, veamos una manera de extraer y operar con las soluciones de una ecuación.

Para empezar, es posible decirle a Sage que una cierta indeterminada es positiva. Resolvamos una ecuación, de la que queremos solo las soluciones positivas; salen soluciones que no nos interesan. La segunda vez le decimos que la variable es positiva usando assume. Finalmente le decimos que olvide lo que ha aprendido antes con forget.

var('z') solve(z^2==1,z) 
       
[z == -1, z == 1]
[z == -1, z == 1]
assume(z>0) solve(z^2==1,z) 
       
[z == 1]
[z == 1]
forget() solve(z^2==1,z) 
       
[z == -1, z == 1]
[z == -1, z == 1]

Más interesante es manipular directamente las soluciones. Le diremos a Sage que las soluciones nos las dé en un formato del que sea fácil extraerlas, añadiendo una opción a solve. La salida es una lista de soluciones. A continuación tomamos la segunda solución (recuerda que en las listas se empieza a contar desde cero).

s = solve(x^3==16*x,x,solution_dict=True) s; s[1] 
       
[{x: -4}, {x: 4}, {x: 0}]
{x: 4}
[{x: -4}, {x: 4}, {x: 0}]
{x: 4}

Podemos tener acceso a los valores usando corchetes con la variable. Con eso podemos operar directamente o bien guardar ese valor en una variable para luego.

s[1][x] 
       
4
4

Para terminar, combinando resolución de ecuaciones y manejo de listas, un ejemplo: resolvemos una ecuación y aplicamos un par de operaciones a las soluciones.

f(x) = x^3-5*x-2 plot(f,(x,-3,3),figsize=3) 
       
s = solve(f,x,solution_dict=True) s 
       
[{x: -sqrt(2) + 1}, {x: sqrt(2) + 1}, {x: -2}]
[{x: -sqrt(2) + 1}, {x: sqrt(2) + 1}, {x: -2}]
[sol[x].n() for sol in s] 
       
[-0.414213562373095, 2.41421356237309, -2.00000000000000]
[-0.414213562373095, 2.41421356237309, -2.00000000000000]
[f(sol[x]) for sol in s] 
       
[-(sqrt(2) - 1)^3 + 5*sqrt(2) - 7, (sqrt(2) + 1)^3 - 5*sqrt(2) - 7, 0]
[-(sqrt(2) - 1)^3 + 5*sqrt(2) - 7, (sqrt(2) + 1)^3 - 5*sqrt(2) - 7, 0]
[expand(f(sol[x])) for sol in s] 
       
[0, 0, 0]
[0, 0, 0]

Ejercicio 9 (4 puntos). Consideremos la variable aleatoria $X$ cuya función de densidad $f(x)$ es igual a $c\cdot(240-(x-3)^3)$ en el intervalo $[1,9]$, para un cierto valor de $c$.

  • Calcula $c$.
  • Calcula la media y la desviación típica de $X$.
 
       
 
       
 
       

Ejercicio 10 (4 puntos). Para la variable aleatoria del ejercicio anterior:

  • Calcula la mediana de $X$.
  • Calcula el intervalo de confianza de $X$ al 99%. Calcula otro intervalo al 99%.