Está en la página 1de 2

Electiva I

Tarea # 5. Entrega Febrero 11, 2020 a las 11:00 pm

Debe entregar un archivo llamado ApellidoNombreTarea5.py. El no enviar este archivo con este nombre
incurre en una penalidad de 5 puntos. Además, las funciones solicitadas deben tener el nombre y argumentos
especificados en el enunciado de cada problema. Por cada función que no tenga el nombre correcto y
argumentos correctos se penaliza con 5 puntos. Recuerde que por cada hora de entrega tarde se recibe una
penalidad de 10 puntos. Finalmente, se espera que se use la librería NumPy siempre que sea posible.

1. (35 Puntos) Considere N bolas enumeradas del 1 a N distribuidas en dos cajas, G y H. El número de
bolas en la caja G determina el estado del sistema, es decir, si hay i bolas en G se dice que el sistema
está en estado i. El sistema evoluciona de la siguiente forma: un número aleatorio entero entre 1 y N
es seleccionado y la bola marcada con el número seleccionado cambia de caja. Note que el estado en
el tiempo t + 1 solo depende del estado del sistema en el estado t, sin importar lo que sucedió antes.
(a) (10 Puntos) Sea Estado un arreglo NumPy unidimensional con forma (N,) que representa el estado
actual del sistema. El arreglo Estado contiene ceros y unos; tal que si la i-ésima posición es uno, se
sabe que la bola marcada con el número i está en la caja G. Escriba una función en Python llamada
Paso() que tome como argumento el arreglo Estado y actualice el estado del sistema, es decir,
se debe simular un paso del proceso. La función debe retornar un arreglo NumPy unidimensional
con forma (N,) que representa el nuevo estado del sistema
(b) (10 Puntos) Escriba una función en Python llamada Pasos(), con argumentos Estado, un entero
positivo m y un parámetro booleano con un valor por defecto igual a False llamado grafica, que
simule el proceso m veces a partir del estado inicial representado por el arreglo Estado. La función
debe retornar un arreglo NumPy bidimensional con forma (N,m) que representa los m estados del
sistema simulados. Si grafica es True, se debe presentar un gráfico que muestre el número de
bolas en la caja G a medida que avanza el proceso.
(c) (10 Puntos) Escriba una función en Python llamada CM(), con argumentos Estado y dos enteros
positivos m y T, que use la función Pasos() para simular T veces el proceso. Almacene los estados
simulados del proceso en un arreglo NumPy tridimensional de forma (T, N, m) llamado sim. La
función CM() debe retornar el arreglo sim y un arreglo NumPy unidimensional con forma (N,) en
el que se almacene la frecuencia relativa en que la i-ésima bola terminó en la caja G después de
m pasos.
(d) (5 Puntos) Ejecute el siguiente código
1 import numpy as np
2 np . random . seed (0)
3 inicial = np . random . randint (0 ,2 ,10)
4 p1 = CM ( Estado = inicial , m = 30 , T = 1000)
5 inicial = np . random . randint (0 ,2 ,10)
6 p2 = CM ( Estado = inicial , m = 30 , T = 1000)

Compare en una gráfica las proporciones en p1 y p2.

2. (10 Puntos) Cree en una sola línea de código un arreglo NumPy con forma (12, 15) donde la i-ésima
fila contiene todos los elementos iguales a cero, excepto por la primera posición y las posiciones que
son múltiplos de i + 2, donde los elementos son iguales a 1. Por ejemplo, la cuarta fila del arreglo es
[1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0].
Electiva I
Tarea # 5. Entrega Febrero 11, 2020 a las 11:00 pm

3. (30 Puntos) El propósito de este ejercicio es escribir una función en Python llamada Lagrange() que
use el método de Lagrange para interpolación usando arreglos NumPy. Los argumento de esta función
son datos y x, donde datos es un arreglo NumPy bidimensional con forma (n+1,2) y x es un arreglo
unidimensional de nuevos valores x∗ con forma (m,). La interpolación usando el método de Lagrange
para un conjunto de n + 1 puntos (x0 , y0 ), . . . , (xn , yn ) está dada por

n
X
Pn (x) = yi li (x), (1)
i=0

donde

n
Y x − xj
li (x) = , i = 0, 1, . . . , n.
xi − xj
j=0
j6=i

Dado el arreglo Numpy bidimensional datos, cuyas filas corresponden al conjunto de observaciones

(x0 , y0 ), (x1 , y1 ), . . . , (xn , yn ),

calcule las diferencias dij = xi − xj , i, j = 0, 1, . . . , n usando broadcasting para obtener un arreglo


bidimensional D = {dij }(n+1)×(n+1) . Reemplace los valores de la diagonal de D con el valor uno.
Luego, usando agregaciones, multiplique los elementos de D por filas para obtener el denominador de
li (x), i = 0, 1, . . . , n. Denote los valores en el arreglo x con x∗ , calcule la matriz de diferencias Dx∗ =
{d∗ik }(n+1)×m , donde cada celda corresponde a d∗ik = x∗k − xi para i = 0, 1, . . . , n y k = 1, 2, . . . , m. El
arreglo bidimensional debe tener la forma (n+1,m). Use la función np.tile() para crear un arreglo
tridimensional con forma (n+1,n+1,m), tal que el arreglo bidimensional Dx∗ se repite a través del eje
cero. Use este arreglo tridimensional para calcular el numerador de li (x), i = 0, 1, . . . , n. Finalmente,
encuentre los valores interpolados usando la fórmula dada en la Ecuación (1).

4. (25 Puntos) Escriba una función llamada ExpansionP() que calcule la expansión de un número entero
positivo n en base p, donde p es un número primo, es decir, se deben encontrar a0 , a1 , . . . , al tal que:

n = a0 + a1 · p + a2 · p2 + · · · + al · pl .

La función ExpansionP() debe tener tres argumentos n, p y formula, donde formula toma por defecto
el valor False. Como resultado esta función debe devolver un lista con los coeficientes de la expansión,
es decir, [al , al−1 , . . . , a1 , a0 ]. Además, si el argumento formula es True, debe imprimirse la expansión
en formato LATEX. Asegúrese que al correr el siguiente código
1 ExpansionP (1742 , 7 , formula = True )

obtiene la siguiente salida


1 [5 ,0 ,3 ,6]

y en pantalla se imprime

$$1742 = 6 + 3\cdot 7 + 0\cdot 7^2 + 5\cdot 7^3.$$

Página 2

También podría gustarte