I am working on the file "Practicas/P1/.ipynb_checkpoints/Practica 1 - Introduccion a Jupyter-checkpoint.ipynb".
The first task is:
ó agregarlo en una lista nueva:
Can you write Python code for it?

B = []
for dato in A:
    B.append(dato*2)

B


I am working on the file "Practicas/P1/Practica 1 - Introduccion a Jupyter.ipynb".
The first task is:
Ejecuta las pruebas de abajo
Can you write Python code for it?

from pruebas_1 import prueba_1_3
prueba_1_3(C, D)


I am working on the file "Practicas/P1/Practica 1 - Introduccion a Jupyter.ipynb".
The first task is:
Ejercicio
Define una función que convierta grados Celsius a grados Farenheit, de acuerdo a la siguiente formula:
$$
F = \frac{9}{5} C + 32
$$
Can you write Python code for it?

def cel_a_faren(grados_cel):

    grados_faren = # Escribe el codigo para hacer el calculo aqui

    return grados_faren


I am working on the file "Practicas/P1/Practica 1 - Introduccion a Jupyter.ipynb".
The first task is:
Ejercicio
Ejecuta el siguiente calculo y guardalo en una variable:
$$
c = \pi *10^2
$$

Nota: Una vez que hayas concluido el calculo y guardado el valor en una variable, puedes desplegar el valor de cualquier variable al ejecutar en una celda el nombre de la variable
Can you write Python code for it?


I am working on the file "Practicas/P1/Practica 1 - Introduccion a Jupyter.ipynb".
The first task is:
Es decir, $n = 10$.
Can you write Python code for it?

def metodo_biseccion(funcion, x1, x2, n):
    xs = []
    for i in range(n):
        xs.append(biseccion(x1, x2))
        if funcion(x2)*funcion(xs[-1]) > 0:
            x2 = xs[-1]
        else:
            x1 = xs[-1]
    return xs[-1]

metodo_biseccion(f, 1.0, 2.0, 10)


I am working on the file "Practicas/P1/Practica 1 - Introduccion a Jupyter.ipynb".
The first task is:
Esta notación que introducimos es muy util para funciones matemáticas, pero esto nos obliga a pensar en las definiciones de una manera funcional, lo cual no siempre es la solución (sobre todo en un lenguaje con un paradigma de programación orientado a objetos).
Esta función tambien puede ser escrita de la siguiente manera:
Can you write Python code for it?


I am working on the file "Practicas/P1/Practica 1 - Introduccion a Jupyter.ipynb".
The first task is:
Listas
Las listas son una manera de guardar varios datos en un mismo arreglo. Podemos tener por ejemplo:
Can you write Python code for it?


I am working on the file "Practicas/P1/Practica 1 - Introduccion a Jupyter.ipynb".
The first task is:
Pero si intentamos multiplicar estos datos por un numero, no tendrá el comportamiento esperado.
Can you write Python code for it?


I am working on the file "Practicas/P1/Practica 1 - Introduccion a Jupyter.ipynb".
The first task is:
Si, yo se que parece raro, pero si lo revisas con calma te daras cuenta que funciona.
Ya casi llegamos, tan solo tenemos que ir guardando cada una de las aproximaciones en un arreglo, y calcularemos el numero de aproximaciones necesarias para llegar a la precisión requerida. Tomemos en cuenta $\varepsilon = 0.001$. La formula para el numero de aproximaciones necesarias es:
$$n = \frac{\ln{a} - \ln{\varepsilon}}{\ln{2}}$$
donde $a$ es el tamaño del intervalo original.
Can you write Python code for it?


I am working on the file "Practicas/P1/Practica 1 - Introduccion a Jupyter.ipynb".
The first task is:
Variables
Las variables pueden ser utilizadas en cualquier momento, sin necesidad de declararlas, tan solo usalas!
Can you write Python code for it?


I am working on the file "Practicas/P1/Practica 1 - Introduccion a Jupyter.ipynb".
The first task is:
Y de aqui podemos notar que el resultado que nos dio esto es positivo, es decir que la raiz tiene que estar entre $x_1$ y $x_M$. Por lo que para nuestra siguiente iteración usaremos el nuevo intervalo $x_1 = 1$ y $x_2 = 2.875$, es decir que ahora asignaremos el valor de $x_M$ a $x_2$.
Can you write Python code for it?


I am working on the file "Practicas/P1/Practica 1 - Introduccion a Jupyter.ipynb".
The first task is:
Y podriamos seguir haciendo esto hasta que tengamos la exactitud que queremos, pero esa no seria una manera muy inteligente de hacerlo (tenemos una maquina a la que le gusta hacer tareas repetitivas y no la aprovechamos?).
En vez de eso, notemos que la formula no cambia absolutamente en nada, por lo que la podemos hacer una funcion y olvidarnos de ella.
Can you write Python code for it?

def biseccion(x1, x2):
    return (x1 + x2)/2.0


I am working on the file "Practicas/P1/Practica 1 - Introduccion a Jupyter.ipynb".
The first task is:
y aun muchas cosas mas, pero por ahora es momento de empezar con la práctica.
Ejercicio

Crea una lista C con los enteros positivos de un solo digito, es decir: $\left{ x \in \mathbb{Z} \mid 0 \leq x < 10\right}$
Crea una segunda lista D con los cuadrados de cada elemento de C
Can you write Python code for it?

C = [] # Escribe el codigo para declarar el primer arreglo adentro de los corchetes

C

D = []

# Escribe el codigo de tu ciclo for aqui

D


I am working on the file "Practicas/P1/Practica 1 - Introduccion a Jupyter.ipynb".
The first task is:
ó agregarlo en una lista nueva:
Can you write Python code for it?


I am working on the file "Practicas/P2/Practica 2 - Metodos de punto fijo.ipynb".
The first task is:
Como podemos ver, aun falta mucho... pero podemos decirle a la computadora que lo siga haciendo sin notsotros. Primero creamos una funcion que itere la funcion g hasta que la diferencia de las ultimas iteraciones sea menor al error.
Can you write Python code for it?

def aprox_sucesivas(g, x0, error):
    xs = [x0]
    while True:
        xs.append(g(xs[-1]))
        if abs(xs[-1] - xs[-2]) <= error:
            return xs[-1]


I am working on the file "Practicas/P2/Practica 2 - Metodos de punto fijo.ipynb".
The first task is:
Creamos una funcion en codigo, que contiene la función original, para evaluar que tan bien se aproximo la raiz.
Can you write Python code for it?


I am working on the file "Practicas/P2/Practica 2 - Metodos de punto fijo.ipynb".
The first task is:
Entonces ya tenemos una formula para iterar a través:
$$x_1 = g(x_0)$$
es decir:
$$x_1 = \sqrt{\frac{x_0 + 5}{2}}$$
Can you write Python code for it?


I am working on the file "Practicas/P2/Practica 2 - Metodos de punto fijo.ipynb".
The first task is:
Y ahora le damos a esta funcion nuestra $g(x)$, el punto donde queremos que inicie $x_0$ y el error maximo permitido.
Can you write Python code for it?

r = aprox_sucesivas(g, 0, 0.001)
r

from numpy import sin


I am working on the file "Practicas/P4/Practica 4 - Sistemas de ecuaciones lineales II.ipynb".
The first task is:
Con lo que, trivialmente, podemos ver su solución por medio de la implementación mas simple:
Can you write Python code for it?


I am working on the file "Practicas/P4/Practica 4 - Sistemas de ecuaciones lineales II.ipynb".
The first task is:
Lo siguiente que voy a necesitar es un arreglo con todos los elementos de la diagonal principal, para dividir cada una de las formulas de la aproximación con estos elementos:
Can you write Python code for it?

A.diagonal()

divisores = copy(A.diagonal().T)
divisores


I am working on the file "Practicas/P4/Practica 4 - Sistemas de ecuaciones lineales II.ipynb".
The first task is:
Por ultimo tenemos que restar cada uno de estos elementos a la division del vector $b$ con la diagonal, de tal manera que tengamos:
$$
\frac{b}{a_{11}} -\frac{0 x_1 + a_{12}x_2 + a_{13}x_3+\ldots+a_{1n}x_n}{a_{11}}
$$
Can you write Python code for it?

x1 = divide(b, divisores) - divide(A*x0, divisores)
x1


I am working on the file "Practicas/P4/Practica 4 - Sistemas de ecuaciones lineales II.ipynb".
The first task is:
Recordando el método de Jacobi, tenemos que empezar con una aproximación $0$ en todas las variables, por lo que definimos un arreglo de ceros, con la funcion zeros, y lo convertimos en un objeto de tipo matrix:
Can you write Python code for it?

from numpy import zeros, copy

x0 = matrix(zeros(A.shape[0])).T
x0


I am working on the file "Practicas/P4/Practica 4 - Sistemas de ecuaciones lineales II.ipynb".
The first task is:
Tomando en cuenta que nuestra primera aproximación es toda $0$, este vector es completamente correcto, ahora tenemos que dividir cada uno de estos elementos por el vector diagonal:
$$
\frac{0 x_1 + a_{12}x_2 + a_{13}x_3+\ldots+a_{1n}x_n}{a_{11}}
$$
Can you write Python code for it?

from numpy import divide

divide(-A*x0, divisores)


I am working on the file "Practicas/P4/Practica 4 - Sistemas de ecuaciones lineales II.ipynb".
The first task is:
Una vez que obtengo la diagonal, voy a sustituir todos los elementos de esta por $0$, de manera que cuando multiplique cada una de las filas de esta matriz, por el valor de la aproximación de $x$, $x_0$, obtendré la mayoría de los elementos de cada una de las formulas:
$$
0 x_1 + a_{12}x_2 + a_{13}x_3+\ldots+a_{1n}x_n
$$
Can you write Python code for it?

from numpy import fill_diagonal

fill_diagonal(A, 0)

A

-A*x0


I am working on the file "Practicas/P4/Practica 4 - Sistemas de ecuaciones lineales II.ipynb".
The first task is:
lo cual corresponde a nuestra primer aproximación, por lo que lo hemos guardado en x1.
Si ahora obtenemos la diferencia entre las primeras dos aproximaciones, y lo guardamos en la variable dif:
Can you write Python code for it?


I am working on the file "Practicas/P4/Practica 4 - Sistemas de ecuaciones lineales II.ipynb".
The first task is:
podemos obtener el cuadrado de cada una de estas diferencias con dif.T*dif, es  decir:
$$
(\bar{x}_1 - x_1)^2 + (\bar{x}_2 - x_2)^2 + \ldots + (\bar{x}_n - x_n)^2 =
\begin{pmatrix}
\bar{x}_1 - x_1 &
\bar{x}_2 - x_2 &
\ldots &
\bar{x}_n - x_n
\end{pmatrix}
\begin{pmatrix}
\bar{x}_1 - x_1 \
\bar{x}_2 - x_2 \
\vdots \
\bar{x}_n - x_n
\end{pmatrix}
$$
y a este valor, tan solo tenemos que sacarle la raiz cuadrada:
Can you write Python code for it?

from numpy import sqrt

e1 = sqrt((dif.T*dif)[0,0])
e1


I am working on the file "Practicas/P4/Practica 4 - Sistemas de ecuaciones lineales II.ipynb".
The first task is:
por lo que obtenemos nuestro error inicial. Ahora tan solo tenemos que seguir haciendo iteraciones hasta obtener una buena aproximación:
Can you write Python code for it?

x2 = divide(b, divisores) - divide(A*x1, divisores)
x2

dif = x2 - x1
e2 = sqrt((dif.T*dif)[0,0])
e2

x3 = divide(b, divisores) - divide(A*x2, divisores)
x3

dif = x3 - x2
e3 = sqrt((dif.T*dif)[0,0])
e3


I am working on the file "Practicas/P5/Practica 5 - Interpolacion.ipynb".
The first task is:
Ahora solo tenemos que meter estos datos a la función $\sin$:
Can you write Python code for it?


I am working on the file "Practicas/P5/Practica 5 - Interpolacion.ipynb".
The first task is:
Ahora solo tengo que multiplicar estas funciones, para obtener L0, utilizaré una función llamada reduce, la cual evaluará por pares, segun la regla que le doy (multiplicación):
Can you write Python code for it?

from functools import reduce

L0 = reduce(lambda x, y: lambda z :x(z)*y(z), L0s)

L0(5)


I am working on the file "Practicas/P5/Practica 5 - Interpolacion.ipynb".
The first task is:
Con lo que tenemos las funciones asociadas a cada uno de los polinomios de Lagrange, estos a su vez, tienen que se multiplicados por los datos_y, por lo que creamos para el primer polinomio:
Can you write Python code for it?

Lf0 = lambda x: Ls[0](x)*datos_y[0]
Lf0(5)


I am working on the file "Practicas/P5/Practica 5 - Interpolacion.ipynb".
The first task is:
Con lo que vemos que tenemos nuestros datos, pero lo principal es graficarlo, por lo que le damos estos dos arreglos a plot y obtendremos:
Can you write Python code for it?


I am working on the file "Practicas/P5/Practica 5 - Interpolacion.ipynb".
The first task is:
O bien, para todos de un solo jalón:
Can you write Python code for it?

Lfs = []
for j in range(len(datos_y)):
    Lfi = lambda x, j=j: Ls[j](x)*datos_y[j]
    Lfs.append(Lfi)


I am working on the file "Practicas/P5/Practica 5 - Interpolacion.ipynb".
The first task is:
Pero esto me obligaría a escribir código tantas veces como datos tenga, lo cual no es aceptable; de la misma manera en que los multiplicandos los metí en una lista, agregaré estos polinomios de Lagrange en una lista:
Can you write Python code for it?

Ls = []
for j in range(len(datos_x)):
    dato_xi = datos_x[j]
    datos_xi = datos_x[:j] + datos_x[j+1:]

    Lis = []
    for i in range(len(datos_xi)):
        Lis.append(lambda x, i=i, dato_xi=dato_xi, datos_xi=datos_xi: (x - datos_xi[i])/(dato_xi - datos_xi[i]))

    Li = reduce(lambda x, y: lambda z: x(z)*y(z), Lis)
    Ls.append(Li)

Ls


I am working on the file "Practicas/P5/Practica 5 - Interpolacion.ipynb".
The first task is:
Si ahora creamos un arreglo de datos desde $0$ hasta $10$, tan solo para asegurar que vemos todos los datos:
Can you write Python code for it?

xs = linspace(0, 10, 100)
ys = interp(xs)

plot(xs, ys)


I am working on the file "Practicas/P5/Practica 5 - Interpolacion.ipynb".
The first task is:
Sin embargo esta solución solo calcula uno de los polinomios de Lagrange y solo sirve para el caso de $4$ datos; el primer paso para crear una solución total, es separar estos polinomios en cada uno de los multiplicandos:
Can you write Python code for it?


I am working on the file "Practicas/P5/Practica 5 - Interpolacion.ipynb".
The first task is:
Tambien notar, que para la creación de estas funciones, utilice un subconjunto de estos datos, que excluia al primer elemento; crearé una lista que excluya justo a este primer elemento:
Can you write Python code for it?

dato_x0 = datos_x[0]
datos_x0 = datos_x[1:]

dato_x0

datos_x0


I am working on the file "Practicas/P5/Practica 5 - Interpolacion.ipynb".
The first task is:
Una opción que puedo utilizar para darle formato a mi gráfica es "o", con lo que nos mostrará los datos como puntos, en lugar de una linea que conecta a estos:
Can you write Python code for it?


I am working on the file "Practicas/P5/Practica 5 - Interpolacion.ipynb".
The first task is:
Una vez que tengo L0, puedo obtener los siguientes polinomios:
Can you write Python code for it?

dato_x1 = datos_x[1]
datos_x1 = datos_x[:1] + datos_x[2:]

L1s = []
for i in range(len(datos_x1)):
    L1s.append(lambda x, i=i: (x - datos_x1[i])/(dato_x1 - datos_x1[i]))

L1 = reduce(lambda x, y: lambda z :x(z)*y(z), L1s)

L1(5)


I am working on the file "Practicas/P5/Practica 5 - Interpolacion.ipynb".
The first task is:
Y al evaluarlo en un número real, se comporta como esperamos:
Can you write Python code for it?


I am working on the file "Practicas/P5/Practica 5 - Interpolacion.ipynb".
The first task is:
Y graficar esta función en conjunto con los datos originales es facil:
Can you write Python code for it?

plot(xs, ys)
plot(datos_x, datos_y, "o")


I am working on the file "Practicas/P5/Practica 5 - Interpolacion.ipynb".
The first task is:
y con un ciclo for, agregaré funciones en una lista, en la cual estarán cada uno de los multiplicandos del primer polinomio de Lagrange:
Can you write Python code for it?

L0s = []
for i in range(len(datos_x0)):
    L0s.append(lambda x, i=i: (x - datos_x0[i])/(dato_x0 - datos_x0[i]))


I am working on the file "Practicas/P5/Practica 5 - Interpolacion.ipynb".
The first task is:
y despues de esta breve introducción a la graficación en Python, empecemos con nuestro problema:
Lo que queremos es una función que pase exactamente por los siguientes puntos:
$i$      | 0|1|2|3
---------|--|-|-|-
$f(x_i)$ |-3|0|5|7
$x_i$    | 0|1|3|6
El primer paso será guardar estos datos en variables de Python, especificamente listas:
Can you write Python code for it?


I am working on the file "Practicas/P5/Practica 5 - Interpolacion.ipynb".
The first task is:
y la usamos como cualquier función, dandole dos listas, una con todos los valores de $x$, y otra con todos los valores de $y$:
Can you write Python code for it?


I am working on the file "Practicas/P5/Practica 5 - Interpolacion.ipynb".
The first task is:
y si graficamos ahora:
Can you write Python code for it?


I am working on the file "Practicas/P6/Practica 6 - Interpolacion II.ipynb".
The first task is:
Ahora, tan solo tenemos que obtener información de estos datos,
* $m$ será el número de datos a interpolar
* $\sum{x}$ se refiere a la sumatoria de todos los valores de la variable independiente
* $\sum{y}$ se refiere a la sumatoria de todos los valores de la variable dependiente
* $\sum{x^2}$ se refiere a la sumatoria de todos los valores de la variable independiente elevados al cuadrado
* $\sum{xy}$ se refiere a la sumatoria de todos los valores de la variable independiente multiplicados por el valor de la variable dependiente en ese punto
Can you write Python code for it?

m = len(xs)
Σx = sum(xs)
Σy = sum(ys)
Σx2 = sum(xs.T*xs)
Σxy = sum(xs.T*ys)

Σx, Σy, Σx2, Σxy


I am working on the file "Practicas/P6/Practica 6 - Interpolacion II.ipynb".
The first task is:
De la misma manera que en la práctica anterior, podemos obtener un espacio lineal y gráficarlo en conjunto con los datos originales como puntos:
Can you write Python code for it?

x = linspace(min(xs), max(xs), 100)
y = f(x)

from matplotlib.pyplot import plot, figure
%matplotlib inline

plot(xs, ys, "o")
plot(x, y)


I am working on the file "Practicas/P6/Practica 6 - Interpolacion II.ipynb".
The first task is:
y obtener la función de la interpolación:
Can you write Python code for it?


I am working on the file "Practicas/P7/Practica 7 - Diferenciacion numerica.ipynb".
The first task is:
De manera preliminar, podemos graficar unos cuantos puntos para darnos una idea de la forma general de la función, para esto definimos unos cuantos puntos:
Can you write Python code for it?


I am working on the file "Practicas/P7/Practica 7 - Diferenciacion numerica.ipynb".
The first task is:
Lo mas evidente de estos resultados es que no son exactos, mas aún, ni siquiera estan perfectamente centrados en el valor principal, podemos ver esto aun mas evidente con las formulas para la derivación con 3 puntos:
$$
f'(x_0) = \frac{-3f(x_0) + 4f(x_1) - f(x_2)}{2h}
$$
$$
f'(x_0) = \frac{3f(x_0) - 4f(x_{-1}) + f(x_{-2})}{2h}
$$
Can you write Python code for it?

def derivada_adelante_tres(func, x0, x1, x2):
    return (-3*func(x0) + 4*func(x1) - f(x2))/abs(x2-x0)

derivada_adelante_tres(f, 1, 1.2, 1.4)

def derivada_atras_tres(func, x0, x1, x2):
    return (3*func(x0) - 4*func(x1) + f(x2))/abs(x2-x0)

derivada_atras_tres(f, 1, 0.8, 0.6)


I am working on the file "Practicas/P7/Practica 7 - Diferenciacion numerica.ipynb".
The first task is:
Pero mas importante aun, este es un ejercicio del libro de texto, por lo que sabemos que en ese punto la derivada de esta función tiene un valor $f'(1) = 1$, por lo que estaremos viendo aproximaciones de este valor.
Can you write Python code for it?


I am working on the file "Practicas/P7/Practica 7 - Diferenciacion numerica.ipynb".
The first task is:
Por la gráfica podemos ver que para el valor de $x=1$, la grafica pasa aproximadamente por $0$, evaluando en este punto, vemos que realmente es:
Can you write Python code for it?


I am working on the file "Practicas/P7/Practica 7 - Diferenciacion numerica.ipynb".
The first task is:
Sin embargo, estas formulas utilizan una y otra vez la funcion original... y esto es adecuado si no te preocupa el poder de procesamiento del dispositivo en el que se calcula, esto es si tienes acceso a la función analítica.
En este ejemplo teniamos una formula para la función a derivar, sin embargo va a haber ocasiones en las que queremos saber la derivada de un conjunto de datos, en este caso, no sabremos la forma analítica de la función original y por lo tanto, este enfoque es inutil.
Introduciremos el concepto de memoización, el cual consiste en calcular todo lo posible de antemano y utilizarlo cuando nos sea necesario.
En este caso, ya tenemos un conjunto de datos que calculamos anteriormente, datos_x y datos_y fueron calculados tomando en cuenta $h$ y $f(x)$, por lo que realmente no necesitamos estos valores para nuestras funciones.
Si definimos las funciones para las derivadas con dos puntos, tendremos lo siguiente:
Can you write Python code for it?

def dadel2(xs, ys, i):
    return (ys[i+1] - ys[i])/abs(xs[i+1]-xs[i])

dadel2(datos_x, datos_y, 4)

def datr2(xs, ys, i):
    return (ys[i] - ys[i-1])/abs(xs[i] - xs[i-1])

datr2(datos_x, datos_y, 4)


I am working on the file "Practicas/P7/Practica 7 - Diferenciacion numerica.ipynb".
The first task is:
Una vez que tenemos claro nuestro objetivo, empezamos a escribir las funciones que calcularán el valor de la derivada en cierto punto, por ejemplo, podemos empezar con las funciones que calculan las derivadas de dos puntos:
$$
f'(x_0) = \frac{f(x_1) - f(x_ 0)}{h}
$$
$$
f'(x_0) = \frac{f(x_0) - f(x_{-1})}{h}
$$
en donde el valor de $h$ es calculado con el paso de los datos, o bien la diferencia entre $x_0$ y $x_1$, por facilidad de implementación, estas las calcularemos con $h= \left| x_1 - x_0 \right|$

Note que el conjunto de valores que hemos utilizado, tiene un valor constante de $h$, es importante que los datos en diferenciación numérica sean siempre calculados asi.
Can you write Python code for it?

def derivada_adelante_dos(func, x0, x1):
    return (func(x1) - func(x0))/abs(x1-x0)

derivada_adelante_dos(f, 1, 1.2)

def derivada_atras_dos(func, x0, x1):
    return (func(x0) - func(x1))/abs(x1-x0)

derivada_atras_dos(f, 1, 0.8)


I am working on the file "Practicas/P7/Practica 7 - Diferenciacion numerica.ipynb".
The first task is:
y obtenemos el valor de estos datos en la función a derivar:
Can you write Python code for it?

datos_y = f(datos_x)

from matplotlib.pyplot import plot
%matplotlib inline

plot(datos_x, datos_y)


I am working on the file "Practicas/practica1/Practica.ipynb".
The first task is:
Ciclos de control
Cuando queremos ejecutar código varias veces tenemos varias opciones, vamos a explorar rapidamente el ciclo for.
python
    for paso in pasos:
        ...
        codigo_a_ejecutar(paso)
        ...
En este caso el codigo se ejecutará tantas veces sean necesarias para usar todos los elementos que hay en pasos.
Por ejemplo, pordemos ejecutar la multiplicacion por 2 en cada uno de los datos:
Can you write Python code for it?


I am working on the file "Practicas/practica1/Practica.ipynb".
The first task is:
Ejecuta la prueba de abajo para saber si has creado el codigo correcto
Can you write Python code for it?

from nose.tools import assert_equal
assert_equal(_, c)
print("Sin errores")


I am working on the file "Practicas/practica1/Practica.ipynb".
The first task is:
Ejercicio

Crea una lista C con los enteros positivos de un solo digito, es decir: $\left{ x \in \mathbb{Z} \mid 0 \leq x < 10\right}$
Crea una segunda lista D con los cuadrados de cada elemento de C
Can you write Python code for it?

# YOUR CODE HERE
raise NotImplementedError()
C

# YOUR CODE HERE
raise NotImplementedError()
D


I am working on the file "Practicas/practica1/Practica.ipynb".
The first task is:
Ejercicio
Define una función que convierta grados Celsius a grados Farenheit, de acuerdo a la siguiente formula:
$$
F = \frac{9}{5} C + 32
$$
Can you write Python code for it?

def cel_a_faren(grados_cel):
    # YOUR CODE HERE
    raise NotImplementedError()
    return grados_faren


I am working on the file "Practicas/practica1/Practica.ipynb".
The first task is:
Ejercicio
Ejecuta el siguiente calculo y guardalo en una variable c:
$$
c = \pi *10^2
$$

Nota: Una vez que hayas concluido el calculo y guardado el valor en una variable, despliega el valor de la variable al ejecutar en una celda el nombre de la variable
Can you write Python code for it?

# YOUR CODE HERE
raise NotImplementedError()

# YOUR CODE HERE
raise NotImplementedError()


I am working on the file "Practicas/practica1/Practica.ipynb".
The first task is:
Esta linea de codigo es equivalente a definir una función matemática de la siguiente manera:
$$
f(x) = x^2 + 1
$$
Por lo que si la evaluamos con $x = 2$, obviamente obtendremos como resultado $5$.
Can you write Python code for it?


I am working on the file "Practicas/practica1/Practica.ipynb".
The first task is:
Esta notación que introducimos es muy util para funciones matemáticas, pero esto nos obliga a pensar en las definiciones de una manera funcional, lo cual no siempre es la solución (sobre todo en un lenguaje con un paradigma de programación orientado a objetos).
Esta función tambien puede ser escrita de la siguiente manera:
Can you write Python code for it?


I am working on the file "Practicas/practica1/Practica.ipynb".
The first task is:
Funciones
Podemos definir funciones propias de la siguiente manera:
Can you write Python code for it?


I am working on the file "Practicas/practica1/Practica.ipynb".
The first task is:
Listas
Las listas son una manera de guardar varios datos en un mismo arreglo. Podemos tener por ejemplo:
Can you write Python code for it?


I am working on the file "Practicas/practica1/Practica.ipynb".
The first task is:
Matrices
Para trabajar con matrices el flujo de trabajo es un poco diferente, ya que los arreglos manejan un conjunto diferente de operaciones; afortunadamente la librería numpy ya tiene definido un objeto de tipo matriz, con el cual podemos hacer las operaciones que queramos:
Can you write Python code for it?

from numpy import matrix

A = matrix([[1, 2], [3, 4]])
A

v1 = matrix([[1], [2]])
v1

# Dependiendo de la version de python que exista en tu computadora,
# esta operacion pudiera no funcionar, en dado caso solo hay que
# cambiar @ por *
A@v1

# La siguiente linea no va a funcionar, porque?
v1@A


I am working on the file "Practicas/practica1/Practica.ipynb".
The first task is:
Pero si intentamos multiplicar estos datos por un numero, no tendrá el comportamiento esperado.
Can you write Python code for it?


I am working on the file "Practicas/practica1/Practica.ipynb".
The first task is:
Sin embargo no existen funciones trigonométricas cargadas por default. Para esto tenemos que importarlas de la libreria math:
Can you write Python code for it?


I am working on the file "Practicas/practica1/Practica.ipynb".
The first task is:
Variables
Las variables pueden ser utilizadas en cualquier momento, sin necesidad de declararlas, tan solo usalas!
Can you write Python code for it?


I am working on the file "Practicas/practica1/Practica.ipynb".
The first task is:
ó agregarlo en una lista nueva:
Can you write Python code for it?

B = []
for dato in A:
    B.append(dato*2)

B


I am working on the file "Practicas/practica1/Problemas.ipynb".
The first task is:
Aplique las matrices de rotación de 30º, 100º y 50º al vector $\begin{pmatrix} 2 \ 2\end{pmatrix}$ y guarde el resultado en la variable res1.
Can you write Python code for it?

# YOUR CODE HERE
raise NotImplementedError()

from numpy.testing import assert_allclose


I am working on the file "Practicas/practica1/Problemas.ipynb".
The first task is:
Calcule la matriz de rotación en un plano, con un angulo de 30º, 50º y 100º, y guardalos en las variables A1, A2, A3.
Can you write Python code for it?

from numpy import pi
τ = 2*pi
# YOUR CODE HERE
raise NotImplementedError()

from numpy.testing import assert_allclose


I am working on the file "Practicas/practica1/inicio.ipynb".
The first task is:
Ejecuta la prueba de abajo para saber si has creado el codigo correcto
Can you write Python code for it?


I am working on the file "Practicas/practica1/inicio.ipynb".
The first task is:
Ejecuta las pruebas de abajo
Can you write Python code for it?

from numpy.testing import assert_array_equal
print("Sin errores")


I am working on the file "Practicas/practica1/inicio.ipynb".
The first task is:
Ejercicio

Crea una lista C con los enteros positivos de un solo digito, es decir: $\left{ x \in \mathbb{Z} \mid 0 \leq x < 10\right}$
Crea una segunda lista D con los cuadrados de cada elemento de C
Can you write Python code for it?

# ESCRIBE TU CODIGO AQUI
raise NotImplementedError
C

# ESCRIBE TU CODIGO AQUI
raise NotImplementedError
D


I am working on the file "Practicas/practica1/inicio.ipynb".
The first task is:
Ejercicio

Declara una matriz de rotación rot, en dos dimensiones con un angulo de 30º
Aplica esta matriz de rotación al vector vec definido como $\begin{pmatrix} 2 \ 2\end{pmatrix}$
Can you write Python code for it?

from numpy import sin, cos, pi
τ = 2*pi
# ESCRIBE TU CODIGO AQUI
raise NotImplementedError
vec_rot

from numpy.testing import assert_array_equal
assert_array_equal(vec_rot, matrix([[2*(cos(τ/12)-sin(τ/12))], [2*(cos(τ/12)+sin(τ/12))]]))
print("Sin errores")


I am working on the file "Practicas/practica1/inicio.ipynb".
The first task is:
Ejercicio
Define una función que convierta grados Celsius a grados Farenheit, de acuerdo a la siguiente formula:
$$
F = \frac{9}{5} C + 32
$$
Can you write Python code for it?

def cel_a_faren(grados_cel):
    # ESCRIBE TU CODIGO AQUI
    raise NotImplementedError
    return grados_faren


I am working on the file "Practicas/practica1/inicio.ipynb".
The first task is:
Esta linea de codigo es equivalente a definir una función matemática de la siguiente manera:
$$
f(x) = x^2 + 1
$$
Por lo que si la evaluamos con $x = 2$, obviamente obtendremos como resultado $5$.
Can you write Python code for it?


I am working on the file "Practicas/practica1/inicio.ipynb".
The first task is:
Matrices
Para trabajar con matrices el flujo de trabajo es un poco diferente, ya que los arreglos manejan un conjunto diferente de operaciones; afortunadamente la librería numpy ya tiene definido un objeto de tipo matriz, con el cual podemos hacer las operaciones que queramos:
Can you write Python code for it?


I am working on the file "Practicas/practica1/inicio.ipynb".
The first task is:
Pero si intentamos multiplicar estos datos por un numero, no tendrá el comportamiento esperado.
Can you write Python code for it?


I am working on the file "Practicas/practica1/inicio.ipynb".
The first task is:
Variables
Las variables pueden ser utilizadas en cualquier momento, sin necesidad de declararlas, tan solo usalas!
Can you write Python code for it?


I am working on the file "Practicas/practica1/inicio.ipynb".
The first task is:
ó agregarlo en una lista nueva:
Can you write Python code for it?


I am working on the file "Practicas/practica1/numerico.ipynb".
The first task is:
Definimos los tiempos como $0s$ hasta $10s$ con mil datos en total, y la condición inicial de nuestro sistema:
$$
x_0 = \begin{pmatrix} 0 \ 0 \end{pmatrix} = \begin{pmatrix} q_1 \ \dot{q}_1 \end{pmatrix}
$$
Can you write Python code for it?


I am working on the file "Practicas/practica1/numerico.ipynb".
The first task is:
Esta función implementará un método numérico para integrar el estado del sistema a traves del tiempo, definiremos tambien un vector con todos los tiempos en los que nos interesa saber el estado del sistema, para esto importamos linspace.
Can you write Python code for it?


I am working on the file "Practicas/practica1/numerico.ipynb".
The first task is:
Para visualizar estos datos importamos la libreria matplotlib para graficación:
Can you write Python code for it?

from matplotlib.pyplot import plot, legend
%matplotlib widget


I am working on the file "Practicas/practica1/numerico.ipynb".
The first task is:
Sin embargo, en esta clase utilizaremos un sistema de simulación a medida, el cual nos quita la responsabilidad del codigo de graficación y nos brindará algunas ventajas en practicas posteriores. A continuación importamos la función simulador de la librería simuladores del paquete robots:
Can you write Python code for it?

from robots.simuladores import simulador


I am working on the file "Practicas/practica1/numerico.ipynb".
The first task is:
Una vez que tenemos la función f, tenemos que importar la función odeint de la librería integrate de scipy.
Can you write Python code for it?


I am working on the file "Practicas/practica1/numerico.ipynb".
The first task is:
Y graficamos:
Can you write Python code for it?

graf_pos, graf_vel = plot(xs)
legend([graf_pos, graf_vel], ["posicion", "velocidad"])


I am working on the file "Practicas/practica1/visualizacion.ipynb".
The first task is:
Se definen los parametros DH del manipulador a visualizar, se le da un nombre, se define el tipo de articulaciones que tiene el manipulador, las longitudes, angulos en dos arreglos y el modo de graficación.
Can you write Python code for it?

params = [[ "l1", 0, 0, "q1"]]

robot1 = Robot("Pendulo simple", "R", [0.4], [0], params, "cinematico")


I am working on the file "Practicas/practica1/visualizacion.ipynb".
The first task is:
Se inicializan los puertos en los que tiene que escuchar los mensajes
Can you write Python code for it?


I am working on the file "Practicas/practica2/Practica.ipynb".
The first task is:
Agregamos un $1$ al final, debido a que  las matrices de transformación homogenea son de dimensión $\Re^{4\times 4}$ y de otra manera no concordarian las dimensiones.
De manera similar vamos a definir el punto origen, el cual nos va a permitir definir una trayectoria para dibujar nuestro vector:
Can you write Python code for it?


I am working on the file "Practicas/practica2/Practica.ipynb".
The first task is:
Ahora podemos graficar en tres dimensiones de la siguiente manera:
Can you write Python code for it?

# Define el cuadro general en donde se diuja la gráfica
f1 = figure(figsize=(6, 6))
# Agrega el area para graficar a nuestra figura
a1 = f1.add_subplot(111, projection='3d')

# Utiliza los datos en xs, ys y zs para graficar una linea con bolitas en cada extremo
a1.plot(xs, ys, zs, "-o")
# Define los limites de la grafica en cada eje
a1.set_xlim(-0.1, 1.1)
a1.set_ylim(-0.1, 1.1)
a1.set_zlim(-0.1, 1.1);


I am working on the file "Practicas/practica2/Practica.ipynb".
The first task is:
Con lo que podemos usar esta función para crear la matriz de rotación necesaria:
Can you write Python code for it?


I am working on the file "Practicas/practica2/Practica.ipynb".
The first task is:
Ejercicio
Dibuja un triangulo que tenga vertices en los puntos $p_1 = (1,1)$, $p_2 = (1,2)$ y $p_3 = (2,2)$, en el plano $xy$ (con una elevación $z=0$).
Can you write Python code for it?

fig = figure(figsize=(6, 6))
ax = fig.add_subplot(111, projection='3d')

# YOUR CODE HERE
raise NotImplementedError()
ax.set_xlim(-0.1, 2.1)
ax.set_ylim(-0.1, 2.1)
ax.set_zlim(-0.1, 1.1);

from numpy.testing import assert_allclose
ls = ax.get_lines()
assert_allclose(ls[0].get_xdata(), [0,  0.02154399], rtol=1e-05, atol=1e-05)
assert_allclose(ls[1].get_xdata(), [0.02154399, 0.05997832], rtol=1e-05, atol=1e-05)
assert_allclose(ls[2].get_xdata(), [0.05997832, 0], rtol=1e-05, atol=1e-05)


I am working on the file "Practicas/practica2/Practica.ipynb".
The first task is:
Para empezar definiremos nuestra posición de inicio, como la coordenada:
$$
P_1 =
\begin{pmatrix}
1 \
0 \
0
\end{pmatrix}
$$
Can you write Python code for it?


I am working on the file "Practicas/practica2/Practica.ipynb".
The first task is:
Podemos definir matrices de la siguiente manera, y ver que el resultado es lo que esperariamos si quisieramos rotar el vector unitario $\hat{i}$ , con $30^o$ es decir $\frac{\tau}{12}$.
Can you write Python code for it?


I am working on the file "Practicas/practica2/Practica.ipynb".
The first task is:
Una vez que tenemos estos puntos, juntamos los elementos de $x$, $y$ y $z$ de cada uno para poderlos graficar:
Can you write Python code for it?

xs = [o.item(0), pos_1.item(0)]
ys = [o.item(1), pos_1.item(1)]
zs = [o.item(2), pos_1.item(2)]


I am working on the file "Practicas/practica2/Practica.ipynb".
The first task is:
Y usamos el mismo codigo para separar las coordenadas $x$, $y$ y $z$:
Can you write Python code for it?


I am working on the file "Practicas/practica2/Problemas.ipynb".
The first task is:
Implemente el código para las funciones que devuelvan matrices de traslación en $x$, $y$ y $z$.
Can you write Python code for it?

def traslacion_x(x):
    # YOUR CODE HERE
    raise NotImplementedError()

def traslacion_y(y):
    # YOUR CODE HERE
    raise NotImplementedError()

def traslacion_z(z):
    # YOUR CODE HERE
    raise NotImplementedError()

from numpy.testing import assert_allclose
from numpy import eye, pi, matrix, array
assert_allclose(traslacion_x(0), eye(4), rtol=1e-05, atol=1e-05)
assert_allclose(traslacion_x(1), matrix([[1, 0, 0, 1], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]), rtol=1e-05, atol=1e-05)
assert_allclose(traslacion_y(0), eye(4), rtol=1e-05, atol=1e-05)
assert_allclose(traslacion_y(1), matrix([[1, 0, 0, 0], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]), rtol=1e-05, atol=1e-05)
assert_allclose(traslacion_z(0), eye(4), rtol=1e-05, atol=1e-05)
assert_allclose(traslacion_z(1), matrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 1], [0, 0, 0, 1]]), rtol=1e-05, atol=1e-05)


I am working on the file "Practicas/practica2/inicio.ipynb".
The first task is:
Ejecuta la prueba de abajo para saber si has creado el codigo correcto
Can you write Python code for it?

from nose.tools import assert_almost_equal
pizza_de_prueba = Pizza("Hawaiiana individual", "H", "individual")
assert_almost_equal(pizza_de_prueba.area, 19.6349, 3)
print("Sin errores")


I am working on the file "Practicas/practica2/inicio.ipynb".
The first task is:
Ejecuta las pruebas de abajo
Can you write Python code for it?

from nose.tools import assert_equal
assert_equal(pizza4.receta, "Para preparar una pizza del tipo Pepperoni individual es necesario:\nPepperoni: 6 piezas")
print("Sin errores")


I am working on the file "Practicas/practica2/inicio.ipynb".
The first task is:
Ejercicio
Actualiza el código para que pueda imprimir la receta de una pizza de pepperoni e imprime la receta de una pizza de pepperoni individual.
Can you write Python code for it?

class Pizza:
    def __init__(self, nombre, configuracion, tamaño):
        from numpy import pi, round
        self.nombre = nombre
        self.conf = configuracion
        if tamaño == "individual":
            self.diam = 5
        if tamaño == "mediana":
            self.diam = 8
        if tamaño == "grande":
            self.diam = 11
        if tamaño == "jumbo":
            self.diam = 15

        self.area = pi*(self.diam/2)**2

        if self.conf == "H":
            self.npiñas = int(round(self.area/3.3))
            self.njamon = int(round(self.area/2.1))
        if self.conf == "P":
            self.npepperoni = int(round(self.area/3.1))

    def imp_receta(self):
        if self.conf == "H":
            self.receta = "Para preparar una pizza del tipo "
            self.receta += self.nombre + " es necesario:\n" + "Piña: "
            self.receta += str(self.npiñas) + " piezas\n" + "Jamón: "
            self.receta += str(self.njamon) + " piezas"
            print(self.receta)
        # ESCRIBE TU CODIGO AQUI
        raise NotImplementedError

# ESCRIBE TU CODIGO AQUI
raise NotImplementedError
pizza4.imp_receta()


I am working on the file "Practicas/practica2/inicio.ipynb".
The first task is:
Ejercicio
Actualiza la clase definida anteriormente, de tal manera que despues de definirse el diametro de la pizza se calcule el area de la misma.
Can you write Python code for it?

class Pizza:
    def __init__(self, nombre, configuracion, tamaño):
        self.nombre = nombre
        if tamaño == "individual":
            self.diam = 5
        if tamaño == "mediana":
            self.diam = 8
        if tamaño == "grande":
            self.diam = 11
        if tamaño == "jumbo":
            self.diam = 15
        # ESCRIBE TU CODIGO AQUI
        raise NotImplementedError


I am working on the file "Practicas/practica2/simbolico.ipynb".
The first task is:
Ejercicio
Define una función ener_cin, la cual tome los parametros m, v, J y ω y devuelva la energía cinética del eslabon.
Can you write Python code for it?

def ener_cin(params):
    from sympy import Rational
    m, v, J, ω = params
    # ESCRIBE TU CODIGO AQUI
    raise NotImplementedError
    return K

from nose.tools import assert_equal
from sympy import var, Matrix, sin, cos, Rational
var("m1 J1 l1 ω1")
q1 = Function("q1")(t)
v1 = Matrix([[l1*cos(q1)], [l1*sin(q1)], [0]])
assert_equal(ener_cin([m1, v1, J1, ω1]), Rational(1,2)*m1*l1**2 + Rational(1,2)*J1*ω1**2)
assert_equal(ener_cin([0, Matrix([[0],[0],[0]]), 0, 0]), 0)
print("Sin errores")


I am working on the file "Practicas/practica2/simbolico.ipynb".
The first task is:
Para la posición de la segunda articulación necesitamos multiplicar las primeras dos matrices:
Can you write Python code for it?


I am working on the file "Practicas/practica2/simbolico.ipynb".
The first task is:
Recordemos que la posición de cada articulación se obtendrá por medio del ultimo vector de esta matriz, por lo que podemos:
Can you write Python code for it?


I am working on the file "Practicas/practica2/simbolico.ipynb".
The first task is:
Y calculando las energías potenciales:
Can you write Python code for it?


I am working on the file "Practicas/practica2/simbolico.ipynb".
The first task is:
Y definimos las variables que dependen de otra variable, especificamente en este calculo, todo lo anterior es constante y solo $q_1$ es una variable dependiente del tiempo:
Can you write Python code for it?

q1 = Function("q1")(t)
q2 = Function("q2")(t)


I am working on the file "Practicas/practica2/visualizacion.ipynb".
The first task is:
Se definen los parametros DH del manipulador a visualizar, se le da un nombre, se define el tipo de articulaciones que tiene el manipulador, las longitudes, angulos en dos arreglos y el modo de graficación.
Can you write Python code for it?


I am working on the file "Practicas/practica3/Practica.ipynb".
The first task is:
Ejercicio
Utiliza la función interact para descubrir el valor aproximado, entre $0$ y $2$, en el que la función $g(x) = 3x^3 + x^2  - 2x + 5$ cruza por $0$.
Can you write Python code for it?

# YOUR CODE HERE
raise NotImplementedError()
i3 = interact(g, x=(0.0, 2.0))

from nose.tools import assert_almost_equal
assert_almost_equal(i3.widget.result, 0, 0)


I am working on the file "Practicas/practica3/Practica.ipynb".
The first task is:
En este caso utilizo los rangos de valores (0, τ) ya que es toda la vuelta completa.
Can you write Python code for it?


I am working on the file "Practicas/practica3/Practica.ipynb".
The first task is:
En este caso voy a utilizar una rotación alrededor de $z$ y una traslación en el eje $x$, asi que defino estas funciones:
Can you write Python code for it?

def r_z(θ):
    # Se importan funciones necesarias de la libreria numpy
    from numpy import matrix, sin, cos
    # Se calcula la matriz de transformación a devolver
    A = matrix([[cos(θ), -sin(θ), 0, 0],
                [sin(θ), cos(θ), 0, 0],
                [0, 0, 1, 0],
                [0, 0, 0, 1]])
    return A

def t_x(x):
    # Se importan funciones necesarias de la libreria numpy
    from numpy import matrix, sin, cos
    # Se calcula la matriz de transformación a devolver
    A = matrix([[1, 0, 0, x],
                [0, 1, 0, 0],
                [0, 0, 1, 0],
                [0, 0, 0, 1]])

    return A


I am working on the file "Practicas/practica3/Practica.ipynb".
The first task is:
Interactividad de gráficas
Muy bien, empecemos con el ejemplo del pendulo doble, lo primero que hacemos es importar la libreria de graficación:
Can you write Python code for it?

%matplotlib inline
from matplotlib.pyplot import figure, plot, style
from mpl_toolkits.mplot3d import Axes3D
style.use("ggplot")


I am working on the file "Practicas/practica3/Practica.ipynb".
The first task is:
Nota que el deslizador empieza en el valor que le dimos y en el punto medio. Ademas, si solo le damos valores enteros, el programa va a suponer que no nos interesan los valores flotantes.

Para dar un rango de valores que queremos revisar, los damos en forma de tupla:
(valor_1, valor_2)
Can you write Python code for it?


I am working on the file "Practicas/practica3/Practica.ipynb".
The first task is:
Sin embargo es muy aburrido ¿Que pasa si queremos sondear la función por valores interesantes?
La sintaxis de la función interact es como sigue:
interact(funcion, valores_a_variar)
asi pues, empezando conla función podemos hacer lo siguiente:
Can you write Python code for it?


I am working on the file "Practicas/practica3/Practica.ipynb".
The first task is:
Y voy a escribir una función robot, la cual va a tomar como argumentos mis variables, es decir los grados de libertad, y con estos valores calcular las transformaciones necesarias para obtener las posiciones de cada articulación y del actuador final. Una vez que tengo todas las posiciones, tan solo tengo que graficarlas para poder manipular esta grafica:
Can you write Python code for it?

def robot(q1=0, q2=0):
    '''
    Esta función calcula y grafica la cinemática directa de un manipulador planar rotacional
    de dos grados de libertad (pendulo doble).

    Necesita que la libreria matplotlib sea inicializada, al menos importando la función figure.
    '''
    # Se importan funciones necesarias de la libreria numpy
    from numpy import matrix, sin, cos

    # Se definen constantes
    l1 = 1
    l2 = 1

    # Se define el punto origen
    o0 = matrix([[0], [0], [0], [1]])

    # Se calculas las trasnformaciones H1 y H2
    H1 = r_z(q1)*t_x(l1)
    H2 = r_z(q2)*t_x(l2)

    # Se calcula la cinematica directa
    o1 = H1*o0
    o2 = H1*H2*o0

    # Define arreglos con las coordenadas x, y, y z de cada punto
    xs = [o0.item(0), o1.item(0), o2.item(0)]
    ys = [o0.item(1), o1.item(1), o2.item(1)]
    zs = [o0.item(2), o1.item(2), o2.item(2)]

    # Define el cuadro general en donde se diuja la gráfica
    f1 = figure(figsize=(8, 8))
    # Agrega el area para graficar a nuestra figura, y la define como un espacio tridimensional
    a1 = f1.add_subplot(111, projection='3d')

    # Utiliza los datos en xs, ys y zs para graficar una linea con bolitas en cada extremo
    a1.plot(xs, ys, zs, "-o")

    # Define los limites de la grafica en cada eje
    a1.set_xlim(-2.1, 2.1)
    a1.set_ylim(-2.1, 2.1)
    a1.set_zlim(-0.1, 1.1);


I am working on the file "Practicas/practica3/Problemas.ipynb".
The first task is:
Cree una función que tome como argumentos los valores de posición (angular o lineal) de los grados de libertad de un manipulador Stanford, calcule la cinemática directa y grafique en tres dimensiones un esquema de los eslabones del manipulador.
Can you write Python code for it?

def grafica_stanford(q1, q2, q3):
    from numpy import matrix
    # YOUR CODE HERE
    raise NotImplementedError()
    fig = figure(figsize=(8, 8))
    ax = fig.add_subplot(111, projection='3d')

    ax.plot(xs, ys, zs, "-o")

    ax.set_xlim(-1.1, 1.1)
    ax.set_ylim(-1.1, 1.1)
    ax.set_zlim(-0.1, 2.1)
    return ax

%matplotlib inline
from matplotlib.pyplot import figure, plot, style
from mpl_toolkits.mplot3d import Axes3D
style.use("ggplot")
from numpy.testing import assert_allclose
ax = grafica_stanford(0,0.5,0.5)
ls = ax.get_lines()
assert_allclose(ls[0].get_xdata(), array([0, 0, 0,  0.0290876490]), rtol=1e-01, atol=1e-01)
assert_allclose(ls[0].get_ydata(), array([-0.0384900179, 0, 0,  1.316]), rtol=1e-01, atol=1e-01)


I am working on the file "Practicas/practica3/Problemas.ipynb".
The first task is:
Implemente una función que devuelva las matrices de transformación homogeneas, que describen la cinemática directa de un manipulador Stanford.
Can you write Python code for it?

def cinematica_stanford(q1, q2, q3):
    # Tomamos en cuenta que la longitudes son 1
    l1, l2 = 1, 1
    # YOUR CODE HERE
    raise NotImplementedError()
    return A1, A2, A3

cinematica_stanford(0,0,0)

from numpy.testing import assert_allclose
from numpy import eye, pi, matrix, array
A1, A2, A3 = cinematica_stanford(0, 0, 0)
assert_allclose(A1, matrix([[1,0,0,0], [0,1,0,0], [0,0,1,1], [0,0,0,1]]), rtol=1e-05, atol=1e-5)
assert_allclose(A2, eye(4), rtol=1e-05, atol=1e-5)
assert_allclose(A3, matrix([[1,0,0,0], [0,1,0,1], [0,0,1,0], [0,0,0,1]]), rtol=1e-05, atol=1e-5)


I am working on the file "Practicas/practica3/inicio.ipynb".
The first task is:
La segunda parte de este código,
Python
[i for i in range(5)]
es el for, esta es la razon por la que usamos i anteriormente, da lo mismo escribir:
Can you write Python code for it?


I am working on the file "Practicas/practica3/inicio.ipynb".
The first task is:
Mmmm..., realmente no hizo nada... bueno, el objetivo de esta función de la libreria standard de Python es crear un arreglo de enteros desde $0$ hasta el numero que le demos como argumento:
Can you write Python code for it?


I am working on the file "Practicas/practica3/inicio.ipynb".
The first task is:
Pero regresemos por un momento al primer pedazo de código que escribimos:
Can you write Python code for it?


I am working on the file "Practicas/practica3/inicio.ipynb".
The first task is:
Si recuerdas la práctica 1, para crear un arreglo con numeros adentro, podiamos utilizar el siguiente código:
Can you write Python code for it?

A = []
for i in range(5):
    A.append(i)

A


I am working on the file "Practicas/practica3/inicio.ipynb".
The first task is:
y por supuesto no funcionará si:
Can you write Python code for it?


I am working on the file "Practicas/practica3/numerico.ipynb".
The first task is:
Mandamos llamar al simulador
Can you write Python code for it?

from robots.simuladores import simulador

%matplotlib widget
ts, xs = simulador(puerto_zmq="5551", f=f, x0=[0, 0, 0, 0.1, 0, 0], dt=0.04)


I am working on the file "Practicas/practica3/simbolico.ipynb".
The first task is:
De tal manera que podamos hacer una función que tome estas, los jacobianos y los tensores de inercia,para calcular la matriz de masas:
Can you write Python code for it?

def matriz_masas(ms, Jvs, Is, Jωs):
    from sympy import zeros, expand, simplify
    M = zeros(len(ms))
    for m, Jv, I, Jω in zip(ms, Jvs, Is, Jωs):
        M += simplify(expand(m*Jv.T*Jv + Jω.T*I*Jω))
    return M

M = matriz_masas(ms, Jvs, Is, Jωs)
M


I am working on the file "Practicas/practica3/simbolico.ipynb".
The first task is:
Ejercicio

Genera una lista con los Jacobianos rotacionales
Can you write Python code for it?

# ESCRIBE TU CODIGO AQUI
raise NotImplementedError
Jωs

from nose.tools import assert_equal
assert_equal(Jωs[0], os[0].jacobian(q))
assert_equal(Jωs[1], os[1].jacobian(q))
assert_equal(Jωs[2], os[2].jacobian(q))


I am working on the file "Practicas/practica3/simbolico.ipynb".
The first task is:
Ejercicio

Genera una lista con los Jacobianos traslacionales
Can you write Python code for it?

# ESCRIBE TU CODIGO AQUI
raise NotImplementedError
Jvs

from nose.tools import assert_equal
assert_equal(Jvs[0], ps[0].jacobian(q))
assert_equal(Jvs[1], ps[1].jacobian(q))
assert_equal(Jvs[2], ps[2].jacobian(q))


I am working on the file "Practicas/practica3/simbolico.ipynb".
The first task is:
Ejercicio

Genera una lista que contenga todas las matrices de rotación de cada articulación usando list comprehensions
Can you write Python code for it?

# ESCRIBE TU CODIGO AQUI
raise NotImplementedError
Rs

from nose.tools import assert_equal
from sympy import Matrix, sin, cos, var

R1 = Matrix([[cos(q1), 0, sin(q1)],
             [sin(q1), 0, -cos(q1)],
             [0, 1, 0]])
R2 = Matrix([[cos(q1)*cos(q2), -sin(q2)*cos(q1), sin(q1)],
             [sin(q1)*cos(q2), -sin(q2)*sin(q1), -cos(q1)],
             [sin(q2), cos(q2), 0]])
R3 = Matrix([[cos(q1)*cos(q2+q3), -sin(q2+q3)*cos(q1), sin(q1)],
             [sin(q1)*cos(q2+q3), -sin(q2+q3)*sin(q1), -cos(q1)],
             [sin(q2+q3), cos(q2+q3), 0]])

assert_equal(Rs[0], R1)
assert_equal(Rs[1], R2)
assert_equal(Rs[2], R3)


I am working on the file "Practicas/practica3/simbolico.ipynb".
The first task is:
He guardado todas las matrices de transformación homgénea en un solo arreglo, de tal manera que puedo hacer una función que tome todas las transformaciones de cada eslabon, y me devuelva las transformaciones a cada articulacion:
Can you write Python code for it?

def transf_art(transformaciones):
    from sympy import eye, simplify
    Hs = [eye(4)]
    for trans in transformaciones:
        Hs.append(simplify(Hs[-1]*trans))

    return Hs[1:]

Hs = transf_art(As)
Hs


I am working on the file "Practicas/practica3/simbolico.ipynb".
The first task is:
Otra cosa que podemos hacer en automatico es definir los tensores de inercia necesarios para el manipulador, ya que esto solo depende del numero de grados de libertad, defino la función que va a tomar el vector con el estado del sistema, $q$, y va a calcular una lista con los tensores:
Can you write Python code for it?

def tens_iner(q):
    from sympy import Matrix
    Is = []
    for i in range(len(q)):
        Js = [var("J_{" + str(i+1) + "_" + eje + "}") for eje in "xyz"]
        I = Matrix([[Js[0], 0, 0], [0, Js[1], 0], [0, 0, Js[2]]])
        Is.append(I)
    return Is

Is = tens_iner(q)
Is


I am working on the file "Practicas/practica3/simbolico.ipynb".
The first task is:
Si ahora declaramos un vector con todos los grados de libertad:
Can you write Python code for it?


I am working on the file "Practicas/practica3/simbolico.ipynb".
The first task is:
Y calculando las energías potenciales:
Can you write Python code for it?

h1, h2, h3 = ps[0][2], ps[1][2], ps[2][2]

U1 = ener_pot([m1, h1])
U2 = ener_pot([m2, h2])
U3 = ener_pot([m3, h3])

U = U1 + U2 + U3

def vector_grav(U, q):
    from sympy import Matrix
    return Matrix([[U]]).jacobian(q).T

G = vector_grav(U, q)
G


I am working on the file "Practicas/practica3/simbolico.ipynb".
The first task is:
Y copiando la función para generar matrices de transformación homogéneas a partir de los parametros DH:
Can you write Python code for it?

def DH(params):
    from sympy import Matrix, sin, cos
    a, d, α, θ = params
    A = Matrix([[cos(θ), -sin(θ)*cos(α), sin(θ)*sin(α), a*cos(θ)],
                [sin(θ), cos(θ)*cos(α), -cos(θ)*sin(α), a*sin(θ)],
                [0, sin(α), cos(α), d],
                [0, 0, 0, 1]])
    return A

A1 = DH([0, l1, pi/2, q1])
A2 = DH([l2, 0, 0, q2])
A3 = DH([l3, 0, 0, q3])

As = [A1, A2, A3]
As


I am working on the file "Practicas/practica3/simbolico.ipynb".
The first task is:
Y ya con los simbolos de Christoffel, calcular la matriz de Coriolis:
Can you write Python code for it?

def matriz_coriolis(simbolos, q̇):
    from sympy import Matrix
    coriolis = []
    for k in range(len(simbolos)):
        cor = []
        for j in range(len(simbolos)):
            c=0
            for i in range(len(simbolos)):
                c+= simbolos[i][j][k]*q̇[i]
            cor.append(c)
        coriolis.append(cor)
    return Matrix(coriolis)

C = simplify(matriz_coriolis(simbolos_christoffel, q̇))
C


I am working on the file "Practicas/practica3/simbolico.ipynb".
The first task is:
definiré una lista con todas las masas de los eslabones:
Can you write Python code for it?


I am working on the file "Practicas/practica3/simbolico.ipynb".
The first task is:
esto se ve aceptable, apliquemoslo a toda la matriz:
Can you write Python code for it?

M = simplify(M.applyfunc(lambda M: collect(M, l2**2)).applyfunc(lambda M: collect(M, l3**2)).applyfunc(lambda M: collect(M, m3)))
M


I am working on the file "Practicas/practica3/simbolico.ipynb".
The first task is:
y si se guarda una lista con cada uno de estos vectores, se puede obtener el jacobiano rotacional de la misma manera que el traslacional:
Can you write Python code for it?


I am working on the file "Practicas/practica3/visualizacion.ipynb".
The first task is:
Se inicializan los puertos en los que tiene que escuchar los mensajes
Can you write Python code for it?


I am working on the file "Practicas/practica3/visualizacion.ipynb".
The first task is:
Se manda llamar al visualizador del robot.
Can you write Python code for it?


I am working on the file "Practicas/practica4/Practica.ipynb".
The first task is:
Convención Denavit - Hartenberg
Sabemos que la conveción Denavit - Hartenberg es una manera de obtener las transformaciones homogéneas necesarias para cada eslabon de un manipulador, sin embargo las multiplicaciones de matrices resultantes de este algorimto por lo general consumen demasiado tiempo, por lo que en esta práctica aprenderemos a definir una función que calcule cada matriz de transformación y poder multiplicarlas con la computadora.
Lo primero que necesitamos es la matriz general del algoritmo Denavit - Hartenberg:
$$
A_i =
\begin{pmatrix}
    c_{\theta_i} & -s_{\theta_i} c_{\alpha_i} & s_{\theta_i} s_{\alpha_i} & a_i c_{\theta_i} \
    s_{\theta_i} & c_{\theta_i} c_{\alpha_i} & -c_{\theta_i} s_{\alpha_i} & a_i s_{\theta_i} \
    0 & s_{\alpha_i} & c_{\alpha_i} & d_i \
    0 & 0 & 0 & 1
\end{pmatrix}
$$
Si escribimos esta matriz dando valores aleatorios a $\theta$, $\alpha$, $d$ y $a$, tendremos:
Can you write Python code for it?


I am working on the file "Practicas/practica4/Practica.ipynb".
The first task is:
Nota que cualquiera de estas dos notaciones es valida para importar variables de sympy

Si ahora creamos una matriz con nuestros datos es posible utilizar las operaciones de matrices conocidas por nosotros, por ejemplo vamos hacer una transformación de movimientos rígidos, definida por la siguiente ecuación:
$$ p_1^0 = R_1 p_0^0 + d_1^0 $$
Can you write Python code for it?

# Defino el punto origen, la rotación y traslación aplicados
p0 = Matrix([[2],
             [3],
             [0]])
R1 = Matrix([[cos(q1), -sin(q1), 0],
             [sin(q1), cos(q1), 0],
             [0, 0, 1]])
d1 = Matrix([[l1],
             [0],
             [0]])

p1 = R1*p0 + d1
p1


I am working on the file "Practicas/practica4/Practica.ipynb".
The first task is:
Y de la misma manera que en cualquier motor de algebra, si queremos multiplicar, tan solo tenemos que hacerlo:
Can you write Python code for it?


I am working on the file "Practicas/practica4/Problemas.ipynb".
The first task is:
Cree una función que tome como argumentos los parametros de los grados de libertad de un manipulador tipo PUMA y devuelva las matrices de transformación homogénea asociadas a cada eslabon.
Can you write Python code for it?


I am working on the file "Practicas/practica4/Problemas.ipynb".
The first task is:
Utilice la función interact para manipular la posición del manipulador, de tal manera que su posición sea aproximadamente $q_1=0.6rad$, $q_2=0.2rad$ y $q_3 = -0.8rad$
Can you write Python code for it?

%matplotlib inline
from matplotlib.pyplot import figure, plot, style
from mpl_toolkits.mplot3d import Axes3D
style.use("ggplot")
from ipywidgets import interact
from numpy import pi
τ = 2*pi
# YOUR CODE HERE
raise NotImplementedError()

from nose.tools import assert_almost_equal
from numpy import pi
τ = 2*pi


I am working on the file "Practicas/practica4/inicio.ipynb".
The first task is:
Ahora definiremos nuestro controlador PID, el cual tiene la siguiente formula:
$$
C(s) = K_P + s K_D + \frac{1}{s} K_I
$$
Can you write Python code for it?

kp, kd, ki = 10, 2, 1
Con = kp + kd*s + ki/s
Con


I am working on the file "Practicas/practica4/inicio.ipynb".
The first task is:
Ejercicio
Basado en la función de transferencia de un sistema masa resorte amortiguador:

Define una función de transferencia $G_3$ con comportamiento estable, subamortiguado.
Define una función de transferencia $G_4$ con comportamiento estable, sobreamortiguado.
Define una función de transferencia $G_5$ con comportamiento criticamente estable.
Define una función de transferencia $G_6$ con comportamiento inestable
Can you write Python code for it?

# ESCRIBE TU CODIGO AQUI
raise NotImplementedError
t, y = step_response(G3)
fig = figure(figsize=(12,3))
ax = fig.gca()
ax.plot(t, y);

from numpy import sqrt
num = G3.num[0][0]/G3.den[0][0][0]
denom = (G3.den[0][0])/G3.den[0][0][0]
assert len(denom) is 3, "¿Estas usando la función del sistema masa resorte amortiguador?"
ωn = sqrt(denom[2])
ζ = denom[1]/(2*ωn)
assert 0 < ζ < 1, "Este sistema no es subamortiguado"

# ESCRIBE TU CODIGO AQUI
raise NotImplementedError
t, y = step_response(G4)
fig = figure(figsize=(12,3))
ax = fig.gca()
ax.plot(t, y);

from numpy import sqrt
num = G4.num[0][0]/G4.den[0][0][0]
denom = (G4.den[0][0])/G4.den[0][0][0]
assert len(denom) is 3, "¿Estas usando la función del sistema masa resorte amortiguador?"
ωn = sqrt(denom[2])
ζ = denom[1]/(2*ωn)
assert ζ > 1, "Este sistema no es sobreamortiguado"

# ESCRIBE TU CODIGO AQUI
raise NotImplementedError
t, y = step_response(G5)
fig = figure(figsize=(12,3))
ax = fig.gca()
ax.plot(t, y);

from numpy.testing import assert_array_equal
from numpy import array
polos = G5.pole()
polos_real = [p.real for p in polos]
polos_crit = array([p == 0 for p in polos_real])
polos_ines = array([p > 0 for p in polos_real])
assert polos_crit.any() and not polos_ines.any(), "Este sistema no es criticamente estable"

# ESCRIBE TU CODIGO AQUI
raise NotImplementedError
t, y = step_response(G5)
fig = figure(figsize=(12,3))
ax = fig.gca()
ax.plot(t, y);

from numpy.testing import assert_array_equal
from numpy import array
polos = G6.pole()
polos_real = [p.real for p in polos]
polos_crit = array([p == 0 for p in polos_real])
polos_ines = array([p > 0 for p in polos_real])
assert polos_ines.any(), "Este sistema no es inestable"


I am working on the file "Practicas/practica4/inicio.ipynb".
The first task is:
Este controlador PD funciona para estabilizar el sistema, sin embargo aun no tiene las propiedades que deseo, por lo que tengo que sintonizar el sistema, para este proceso necesito cambiar $K_P$ y $K_D$ hasta obtener un comportamiento adecuado, propondré una notación alternativa para ayudarnos a escribir una ley de control mas compleja, primero analicemos el siguiente ejemplo:
$$
\frac{1}{s} + \frac{1}{s+1} = \frac{(s+1)}{s(s+1)} + \frac{s}{(s+1)s} = \frac{(s+1)+s}{s(s+1)} = \frac{2s+1}{s^2+s}
$$
Can you write Python code for it?


I am working on the file "Practicas/practica4/inicio.ipynb".
The first task is:
Para asegurar que todas las simulaciones se harán con los mismos tiempos iniciales y finales, definiremos un arreglo desde $0$ hasta $10$ con $1000$ puntos para simular:
Can you write Python code for it?

from numpy import linspace
ts = linspace(0, 10, 1000)


I am working on the file "Practicas/practica4/inicio.ipynb".
The first task is:
Para utilizar esta función, le damos un arreglo con los coeficientes del numerador y denominador de la función de transferencia, de tal manera que:
Can you write Python code for it?


I am working on the file "Practicas/practica4/inicio.ipynb".
The first task is:
Sin embargo un sistema tan sencillo no tiene el comportamiento que necesitamos para este analisis; podemos utilizar el sistema masa resorte amortiguador para el siguiente ejemplo, recordemos que su función de transferencia es:
$$
G(s) = \frac{1}{ms^2 + cs + k}
$$
por lo que definimos su función de tranferencia, simulamos y graficamos:
Can you write Python code for it?

m = 1000
c = 1500
k = 15000
G2 = tf([1], [m, c, k])

t, y = step_response(G2)

fig = figure(figsize=(12,3))
ax = fig.gca()
ax.plot(t, y)


I am working on the file "Practicas/practica4/inicio.ipynb".
The first task is:
Y una vez simulado, graficar los datos:
Can you write Python code for it?

%matplotlib inline

from matplotlib.pyplot import figure, close, style
style.use("ggplot")

fig = figure(figsize=(12,3))
ax = fig.gca()
ax.plot(t, y)


I am working on the file "Practicas/practica4/inicio.ipynb".
The first task is:
Ya que tenemos definida la función de transferencia, podemos simular su comportamiento por medio de la función step_response:
Can you write Python code for it?

from control import step_response

t, y = step_response(G1)


I am working on the file "Practicas/practica4/inicio.ipynb".
The first task is:
podriamos pensar hasta en sumar gatitos, pero esto quedará para otra práctica... por ahora conformemonos con definir el simbolo $s$, de tal manera que:
Can you write Python code for it?


I am working on the file "Practicas/practica4/inicio.ipynb".
The first task is:
por ejemplo, podemos proponer el controlador
$$
C(s) = K_P + s K_D
$$
en donde $K_P = 1$ y $K_D = 1$ como valores iniciales:
Can you write Python code for it?

ts = linspace(0, 10, 1000)
Con = tf([1, 1], [1])
t, y = step_response((Con*Gs[3]).feedback(), ts)

fig = figure(figsize=(12,3))
ax = fig.gca()
ax.plot(t, y)


I am working on the file "Practicas/practica4/inicio.ipynb".
The first task is:
por lo que podemos concluir que si hacemos operaciones con las funciones de transferencia, el motor de algebra de las funciones de transferencia simplificará hasta el mínimo cualquier expresión, esto es resultado del hecho que las operaciones en Python, estan definidas como metodos de la clase que las define, por ejemplo, podemos preguntarle a un numero entero como se hace la suma en su clase:
Can you write Python code for it?


I am working on the file "Practicas/practica4/inicio.ipynb".
The first task is:
y graficar, tambien, con una list comprehension:
Can you write Python code for it?

fig = figure(figsize=(12,3))
ax = fig.gca()
ps = [ax.plot(resp[0], resp[1]) for resp in respuestas]
ax.set_ylim(-0.01, 0.16)
ax.legend([ ps[0][0],  ps[1][0],        ps[2][0],    ps[3][0],    ps[4][0]],
          ["Estable", "Estable", "Crit. estable", "Inestable", "Inestable"]);


I am working on the file "Practicas/practica4/inicio.ipynb".
The first task is:
y recordando que podemos interactuar con estas variables, podemos hacer modificar nuestro controlador hasta que obtengamos un comportamiento adecuado:
Can you write Python code for it?

from ipywidgets import interact

interact(sistema_controlado, kp=(0,20), ki=(0,20), kd=(0,20))


I am working on the file "Practicas/practica4/numerico.ipynb".
The first task is:
Despues, definimos una función que va a simular el comportamiento del sistema, usando como variables de entrada los valores que queremos variar:
Can you write Python code for it?

def sim_sist_cont(qd=0, kp=1, kd=1):
    sis = ode(f)
    sis.set_initial_value([0,0])
    sis.set_f_params([radians(qd), kp, kd])
    ts = linspace(0, 1, 100)
    ys = [sis.integrate(t) for t in ts[1:]]
    ys.insert(0,[0,0])
    fig = figure(figsize=(20,5))
    ax = fig.gca()
    ax.plot(ts, degrees(ys))
    ax.set_ylim(-200, 200)
    ax.legend([ps[0], ps[1]], [r"$q$", r"$\dot{q}$"])
    ax.set_title("Sistema con control $k_p="+str(kp)+"$, $k_d="+str(kd)+"$");


I am working on the file "Practicas/practica4/numerico.ipynb".
The first task is:
En este punto tenemos un sistema estable, el cual casi llega a la posición deseada, tan solo tenemos que sintonizar las ganancias $k_p$ y $k_d$. Para este procedimiento tenemos que modificar el valor de $k_p$ y $k_d$, por prueba y error, para mejorar el comportamiento del sistema. Sin embargo, con la ayuda de Jupyter podemos hacer algo mejor... primero defino la función de tal manera que los parametros de entrada me den no solo $q_d$, sino $k_p$ y $k_d$ tambien:
Can you write Python code for it?

def f(t, x, params):
    qd, kp, kd = params
    # Se importan funciones matematicas necesarias
    from numpy import cos
    # Se desenvuelven las variables que componen al estado
    q1, q̇1 = x
    # Se definen constantes del sistema
    g = 9.81
    m1, J1 = 0.3, 0.0005
    l1 = 0.4
    τ1 = kp*(qd - q1) + kd*(0 - q̇1)
    # Se calculan las variables a devolver por el sistema
    q1p = q̇1
    q1pp = 1/(m1*l1**2 + J1)*(τ1 - g*m1*l1*cos(q1))
    # Se devuelve la derivada de las variables de entrada
    return [q1p, q1pp]


I am working on the file "Practicas/practica4/numerico.ipynb".
The first task is:
Esta ley de control mejoró el comportamiento del sistema (en las primeras 2 simulaciones la amplitud es mayor, cada vez estamos limitando mas el error del sistema), pero aun oscila; el problema por el momento es que si llega a la posición deseada, pero cuando llega a esa posición, su velocidad es mayor que $0$, lo que queremos es que llegue a la posición deseada con velocidad $0$, es decir que llegue a la posición deseada y se quede ahi:
$$
\tau_1 = (q_d - q_1) + (\dot{q}_d - \dot{q}_1) = (q_d - q_1) + (0 - \dot{q}_1)
$$
Can you write Python code for it?

def f(t, x, params):
    qd = params[0]
    # Se importan funciones matematicas necesarias
    from numpy import cos
    # Se desenvuelven las variables que componen al estado
    q1, q̇1 = x
    # Se definen constantes del sistema
    g = 9.81
    m1, J1 = 0.3, 0.0005
    l1 = 0.4
    τ1 = (qd - q1) + (0 - q̇1)
    # Se calculan las variables a devolver por el sistema
    q1p = q̇1
    q1pp = 1/(m1*l1**2 + J1)*(τ1 - g*m1*l1*cos(q1))
    # Se devuelve la derivada de las variables de entrada
    return [q1p, q1pp]

sis = ode(f)
sis.set_initial_value([0,0])
sis.set_f_params([radians(20)])

ts = linspace(0, 5, 1000)
ys = [sis.integrate(t) for t in ts[1:]]
ys.insert(0,[0,0])

fig = figure(figsize=(20,5))
ax = fig.gca()
ax.plot(ts, degrees(ys))
ax.legend([ps[0], ps[1]], [r"$q$", r"$\dot{q}$"])
ax.set_title("Sistema con control $k_p=1$, $k_d=1$");


I am working on the file "Practicas/practica4/numerico.ipynb".
The first task is:
Por el momento utilizare la posición deseada como la función de control
$$
\tau_1 = q_d
$$
con lo que al simular y graficar, tenemos:
Can you write Python code for it?

sis = ode(f)
sis.set_initial_value([0,0])
sis.set_f_params([radians(20)])

ts = linspace(0, 5, 1000)
ys = [sis.integrate(t) for t in ts[1:]]
ys.insert(0,[0,0])

fig = figure(figsize=(20,5))
ax = fig.gca()
ps = ax.plot(ts, degrees(ys))
ax.legend([ps[0], ps[1]], [r"$q$", r"$\dot{q}$"])
ax.set_title("Sistema con control en lazo abierto");


I am working on the file "Practicas/practica4/numerico.ipynb".
The first task is:
Sin embargo esta ley de control no toma en cuenta la posición real del sistema, podemos definir una ley de control que se calcule con la diferencia de la posición deseada y la posición real:
$$
\tau_1 = q_d - q_1
$$
Can you write Python code for it?

def f(t, x, params):
    qd = params[0]
    # Se importan funciones matematicas necesarias
    from numpy import cos
    # Se desenvuelven las variables que componen al estado
    q1, q̇1 = x
    # Se definen constantes del sistema
    g = 9.81
    m1, J1 = 0.3, 0.0005
    l1 = 0.4
    τ1 = qd - q1
    # Se calculan las variables a devolver por el sistema
    q1p = q̇1
    q1pp = 1/(m1*l1**2 + J1)*(τ1 - g*m1*l1*cos(q1))
    # Se devuelve la derivada de las variables de entrada
    return [q1p, q1pp]

sis = ode(f)
sis.set_initial_value([0,0])
sis.set_f_params([radians(20)])

ts = linspace(0, 5, 1000)
ys = [sis.integrate(t) for t in ts[1:]]
ys.insert(0,[0,0])

fig = figure(figsize=(20,5))
ax = fig.gca()
ax.plot(ts, degrees(ys))
ax.legend([ps[0], ps[1]], [r"$q$", r"$\dot{q}$"])
ax.set_title(r"Sistema con control $k_p=1$");


I am working on the file "Practicas/practica4/numerico.ipynb".
The first task is:
Sin embargo, este es el comportamiento del sistema sin control, lo que en realidad queremos es que el sistema se mueva a una posición especifica, por lo que necesitamos darle a la función a simular este valor como un parametro extra:
Can you write Python code for it?

def f(t, x, params):
    qd = params[0]
    # Se importan funciones matematicas necesarias
    from numpy import cos
    # Se desenvuelven las variables que componen al estado
    q1, q̇1 = x
    # Se definen constantes del sistema
    g = 9.81
    m1, J1 = 0.3, 0.0005
    l1 = 0.4
    τ1 = qd
    # Se calculan las variables a devolver por el sistema
    q1p = q̇1
    q1pp = 1/(m1*l1**2 + J1)*(τ1 - g*m1*l1*cos(q1))
    # Se devuelve la derivada de las variables de entrada
    return [q1p, q1pp]


I am working on the file "Practicas/practica4/numerico.ipynb".
The first task is:
Una vez que tenemos esto, importamos interact para modificar los valores interactivamente:
Can you write Python code for it?

from ipywidgets import interact

interact(sim_sist_cont, qd=(-180.0, 180.0), kp=(0,100.0), kd=(0,5.0))


I am working on the file "Practicas/practica4/simulador.ipynb".
The first task is:
Mandamos llamar al simulador
Can you write Python code for it?

from robots.simuladores import simulador

%matplotlib widget
ts, xs = simulador(f=f, x0=[0, 0], dt=0.02, puertos_zmq=["5551", "5552"], control=True)


I am working on the file "Practicas/practica4/visualizacion.ipynb".
The first task is:
Se inicializan los puertos en los que tiene que escuchar los mensajes
Can you write Python code for it?


I am working on the file "Practicas/practica5/Practica.ipynb".
The first task is:
En la gráfica anterior podemos ver no solo la posición en el primer cuadro, si no tambien la velocidad y la aceleración en el segundo y tercero, de tal manera que nos damos una mejor idea de la trayectoria.
Vamos a generar un conjunto de trayectorias para un ejemplo, primero empecemos importando pi:
Can you write Python code for it?


I am working on the file "Practicas/practica5/Practica.ipynb".
The first task is:
Pero mas importante, puedo generar una animación, tomando en cuenta que es un pendulo simple:
Can you write Python code for it?

# Se importa la funcion animation para crear la animacion, y rc para poder mostrar el video
# directamente en el notebook
from matplotlib import animation, rc
rc('animation', html='html5')
# Se importan las funciones necesarias para calcular la cinematica directa e inversa
from numpy import sin, cos, arange

# Se define una funcion para calcular la cinematica directa del sistema
def cinematica_directa_pendulo(q1):
    # Se definen constantes utilizadas para graficar el sistema
    l1, l2 = 1, 1
    xs = [0, l1*cos(q1)]
    ys = [0, l1*sin(q1)]
    return xs, ys

# Se define el tamaño de la figura
fig = figure(figsize=(8, 8))

# Se define una sola grafica en la figura y se dan los limites de los ejes x y y
axi = fig.add_subplot(111, autoscale_on=False, xlim=(-1.1, 1.1), ylim=(-1.1, 1.1))

# Se utilizan graficas de linea para el eslabon del pendulo
linea, = axi.plot([], [], "-o", lw=2, color='gray')

def inicializacion():
    '''Esta funcion se ejecuta una sola vez y sirve para inicializar el sistema'''

    # Se inicializa la linea vacia para evitar que al principio exista una linea en la grafica
    linea.set_data([], [])
    return linea

def animacion(i):
    '''Esta funcion se ejecuta para cada cuadro del GIF'''

    # Se obtienen las coordenadas x y y para el eslabon
    xs, ys = cinematica_directa_pendulo(qs[i])
    # Se actualiza el estado de la linea con las coordenadas calculadas
    linea.set_data(xs, ys)

    return linea

# Se hace la animacion dandole la funcion que se debe ejecutar para cada cuadro, el numero de cuadros
# que se debe de hacer, el periodo de cada cuadro y la funcion inicial
ani = animation.FuncAnimation(fig, animacion, arange(1, len(qs)), interval=20, init_func=inicializacion)
ani


I am working on the file "Practicas/practica5/Practica.ipynb".
The first task is:
Si quiero concatenar todos estos arreglos que generé, tan solo tengo que sumarlos:
Can you write Python code for it?


I am working on the file "Practicas/practica5/Practica.ipynb".
The first task is:
Vamos a generar una trayectoria en la que en los primero dos segundos se mueva de $0^o$ a $90^o$, en los segundos dos segundos de $90^o$ a $-60^o$ y en los ultimos seis segundos de $-60^o$ a $240^o$:
Can you write Python code for it?

ts, q1, q̇1, q̈1 = grafica_trayectoria(0, 2, 0, τ/4, 100)

ts, q2, q̇2, q̈2 = grafica_trayectoria(2, 4, τ/4, -τ/6, 100)

ts, q3, q̇3, q̈3 = grafica_trayectoria(4, 10, -τ/6, 2*τ/3, 300)


I am working on the file "Practicas/practica5/Practica.ipynb".
The first task is:
Vamos a hacer una prueba en primer lugar:
Can you write Python code for it?

ts, qs, q̇s, q̈s = grafica_trayectoria(0, 2, 0, 1, 1000)


I am working on the file "Practicas/practica5/Problemas.ipynb".
The first task is:
Cree una animación con las trayectorias generadas y las funciones proporcionadas a continuación (algunas funciones estan marcadas con comentarios en donde hace falta agregar código).
Can you write Python code for it?

from matplotlib.pyplot import figure, style
from matplotlib import animation, rc
rc('animation', html='html5')
from numpy import sin, cos, arange

fig = figure(figsize=(8, 8))
axi = fig.add_subplot(111, autoscale_on=False, xlim=(-0.6, 3.1), ylim=(-0.6, 3.1))
linea, = axi.plot([], [], "-o", lw=2, color='gray')

def cd_pendulo_doble(q1, q2):
    l1, l2 = 2, 2
    # YOUR CODE HERE
    raise NotImplementedError()
    return xs, ys

def inicializacion():
    '''Esta funcion se ejecuta una sola vez y sirve para inicializar el sistema'''
    linea.set_data([], [])
    return linea

def animacion(i):
    '''Esta funcion se ejecuta para cada cuadro del GIF'''
    # YOUR CODE HERE
    raise NotImplementedError()
    linea.set_data(xs, ys)

    return linea

ani = animation.FuncAnimation(fig, animacion, arange(1, len(q1s)), interval=10, init_func=inicializacion)
ani

from numpy.testing import assert_allclose
assert_allclose(cd_pendulo_doble(0, 0), ([0,2,4], [0,0,0]), rtol=1e-05, atol=1e-05)
assert_allclose(cd_pendulo_doble(1.57079632,0), ([0, 0, 0],[0, 2, 4]), rtol=1e-05, atol=1e-05)


I am working on the file "Practicas/practica5/Problemas.ipynb".
The first task is:
Genere las trayectorias necesarias para que el pendulo doble se mueva del punto $p_1$ al punto $p_2$ en $2s$, del punto $p_2$ al punto $p_3$ en $2s$ y del punto $p_3$ al punto $p_1$ en $2s$.

Utiliza 100 puntos por segundo y asegurate de guardar las trayectorias generadas en las variables correctas para que q1s y q2s tengan las trayectorias completas.
Can you write Python code for it?

from generacion_trayectorias import grafica_trayectoria
# YOUR CODE HERE
raise NotImplementedError()
q1s = q1s1 + q1s2 + q1s3
q2s = q2s1 + q2s2 + q2s3

from numpy.testing import assert_allclose
assert_allclose((q1s[0], q1s[-1]),(0.25268, 0.25268), rtol=1e-05, atol=1e-05)

from numpy.testing import assert_allclose
assert_allclose((q2s[0], q2s[-1]),(2.636232, 2.636232), rtol=1e-05, atol=1e-05)


I am working on the file "Practicas/practica5/Problemas.ipynb".
The first task is:
Obtenga las posiciones en el espacio articular, $q_1$ y $q_2$, necesarias para que el punto final del pendulo doble llegue a las coordenadas $p_1 = (0,1)$, $p_2 = (1,3)$ y $p_3 = (3,2)$.
Can you write Python code for it?

# YOUR CODE HERE
raise NotImplementedError()

from numpy.testing import assert_allclose
assert_allclose((q11, q21),(0.25268 , 2.636232), rtol=1e-05, atol=1e-05)

from numpy.testing import assert_allclose
assert_allclose((q12, q22),(0.589988, 1.318116), rtol=1e-05, atol=1e-05)

from numpy.testing import assert_allclose
assert_allclose((q13, q23),(0.14017 , 0.895665), rtol=1e-05, atol=1e-05)


I am working on the file "Practice/05-03.ipynb".
The first task is:
BernoulliNB 쓸수 없음 => 타겟변수뿐만아니라 독립변수도 0또는 1값을 가져야 하기때문
Multinomial NB
Can you write Python code for it?

from sklearn.naive_bayes import MultinomialNB
MNB = MultinomialNB().fit(x,y)

MNB.classes_

MNB.class_count_

MNB_score_train = MNB.score(x_train,y_train)
print "Train Score :", MNB_score_train
print "=" * 40
MNB_score_test = MNB.score(x_test, y_test)
print "Test Score :", MNB_score_test

from sklearn.pipeline import Pipeline
from sklearn.metrics import classification_report
clf_1 = Pipeline([
    ('clf', MultinomialNB())
])

clf_1.fit(x_train, y_train)
print(classification_report(y_test, clf_1.predict(x_test), digits = 4))


I am working on the file "Practice/05-03.ipynb".
The first task is:
Decision Tree
Can you write Python code for it?

from sklearn.tree import DecisionTreeClassifier
tree1 = DecisionTreeClassifier(criterion = 'entropy', max_depth = 1, random_state = 0).fit(x,y)

from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(criterion='entropy', max_depth=3, min_samples_leaf=5).fit(x_train, y_train)

from sklearn import tree
decision = tree.DecisionTreeClassifier()
decision.fit(x_train, y_train)
decision_score_train = decision.score(x_train, y_train)
print "Train score : ",decision_score_train
decision_score_test = decision.score(x_test, y_test)
print "-" * 40
print "Test score : ",decision_score_test


I am working on the file "Practice/05-03.ipynb".
The first task is:
NB
Can you write Python code for it?

from sklearn.naive_bayes import GaussianNB
NB = GaussianNB().fit(x,y)

NB.classes_

NB.class_count_

NB.class_prior_

NB.theta_

NB_score_train = NB.score(x_train,y_train)
print "Train Score :", NB_score_train
print "=" * 40
NB_score_test = NB.score(x_test, y_test)
print "Test Score :", NB_score_test


I am working on the file "Practice/05-03.ipynb".
The first task is:
Percetron

iter에 따라 달라지는 것
Can you write Python code for it?

from sklearn.linear_model import Perceptron
perceptron = Perceptron(n_iter = 1, eta0 = 0.3, random_state= 1).fit(x,y)
perceptron_score_train = perceptron.score(x_train, y_train)
print "Train score : ", perceptron_score_train
print "=" *40
perceptron_score_test = perceptron.score(x_test, y_test)
print "Test score : ", perceptron_score_test

perceptron = Perceptron(n_iter = 5, eta0 = 0.3, random_state= 1).fit(x,y)
perceptron_score_train = perceptron.score(x_train, y_train)
print "Train score : ", perceptron_score_train
print "=" *40
perceptron_score_test = perceptron.score(x_test, y_test)
print "Test score : ", perceptron_score_test

perceptron = Perceptron(n_iter = 10, eta0 = 0.3, random_state= 1).fit(x,y)
perceptron_score_train = perceptron.score(x_train, y_train)
print "Train score : ", perceptron_score_train
print "=" *40
perceptron_score_test = perceptron.score(x_test, y_test)
print "Test score : ", perceptron_score_test

perceptron = Perceptron(n_iter = 20, eta0 = 0.3, random_state= 1).fit(x,y)
perceptron_score_train = perceptron.score(x_train, y_train)
print "Train score : ", perceptron_score_train
print "=" *40
perceptron_score_test = perceptron.score(x_test, y_test)
print "Test score : ", perceptron_score_test

perceptron = Perceptron(n_iter = 100, eta0 = 0.3, random_state= 1).fit(x,y)
perceptron_score_train = perceptron.score(x_train, y_train)
print "Train score : ", perceptron_score_train
print "=" *40
perceptron_score_test = perceptron.score(x_test, y_test)
print "Test score : ", perceptron_score_test

perceptron = Perceptron(n_iter = 150, eta0 = 0.3, random_state= 1).fit(x,y)
perceptron_score_train = perceptron.score(x_train, y_train)
print "Train score : ", perceptron_score_train
print "=" *40
perceptron_score_test = perceptron.score(x_test, y_test)
print "Test score : ", perceptron_score_test


I am working on the file "Practice/05-03.ipynb".
The first task is:
QDA
Can you write Python code for it?

from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis
qda = QuadraticDiscriminantAnalysis(store_covariances = True).fit(x,y)

qda.priors_

549.0/(549 + 342)

qda.means_

qda.covariances_

qda_score_train = qda.score(x_train,y_train)
print "Train Score :", qda_score_train
print "=" * 40
qda_score_test = qda.score(x_test, y_test)
print "Test Score :", qda_score_test


I am working on the file "Practice/05-03.ipynb".
The first task is:
SVM
Can you write Python code for it?

from sklearn.svm import SVC
svm = SVC() # defalt 값은 rbf 이다
svm.fit(x_train, y_train)
svm_score_train = svm.score(x_train, y_train)
print "Train Score : ", svm_score_train
svm_score_test = svm.score(x_test, y_test)
print "-" * 40
print "Test Score : ", svm_score_test

from sklearn.svm import SVC
svm = SVC(kernel = 'linear')
svm.fit(x_train, y_train)
svm_score_train = svm.score(x_train, y_train)
print "Train Score : ", svm_score_train
svm_score_test = svm.score(x_test, y_test)
print "-" * 40
print "Test Score : ", svm_score_test

from sklearn.svm import SVC
svm = SVC(kernel = 'sigmoid')
svm.fit(x_train, y_train)
svm_score_train = svm.score(x_train, y_train)
print "Train Score : ", svm_score_train
svm_score_test = svm.score(x_test, y_test)
print "-" * 40
print "Test Score : ", svm_score_test

from sklearn.svm import SVC
svm = SVC(kernel = 'poly')
svm.fit(x_train, y_train)
svm_score_train = svm.score(x_train, y_train)
print "Train Score : ", svm_score_train
svm_score_test = svm.score(x_test, y_test)
print "-" * 40
print "Test Score : ", svm_score_test


I am working on the file "Practice/05-03.ipynb".
The first task is:
solver
svd : Singular value decomposition (default). Does not compute the covariance matrix, therefore this solver is recommended for data with a large number of features.
lsqr : Least squares solution, can be combined with shrinkage.
eigen : Eigenvalue decomposition, can be combined with shrinkage
Can you write Python code for it?

LDA.coef_

LDA.intercept_

LDA.covariance_

LDA.means_

LDA.n_components

LDA.explained_variance_ratio_

LDA_score_train = LDA.score(x_train,y_train)
print "Train Score :", LDA_score_train
print "=" * 40
LDA_score_test = LDA.score(x_test, y_test)
print "Test Score :", LDA_score_test


I am working on the file "Practice6/3_char_rnn_inference.ipynb".
The first task is:
Finally, show what RNN has generated!
Can you write Python code for it?

# Sampling function
def weighted_pick(weights):
    t = np.cumsum(weights)
    s = np.sum(weights)
    return(int(np.searchsorted(t, np.random.rand(1)*s)))

# Sample using RNN and prime characters
prime = "/* "
state = sess.run(cell.zero_state(1, tf.float32))
for char in prime[:-1]:
    x = np.zeros((1, 1))
    x[0, 0] = vocab[char]
    state = sess.run(last_state, feed_dict={input_data: x, istate:state})

# Sample 'num' characters
ret  = prime
char = prime[-1] # <= This goes IN!
num  = 1000
for n in range(num):
    x = np.zeros((1, 1))
    x[0, 0] = vocab[char]
    [probsval, state] = sess.run([probs, last_state]
        , feed_dict={input_data: x, istate:state})
    p      = probsval[0]

    sample = weighted_pick(p)
    # sample = np.argmax(p)

    pred   = chars[sample]
    ret    = ret + pred
    char   = pred

print ("Sampling Done. \n___________________________________________\n")

print (ret)


I am working on the file "Practice6/3_char_rnn_train.ipynb".
The first task is:
chars[0] converts index to char
vocab['a'] converts char to index
Can you write Python code for it?

# Now convert all text to index using vocab!
corpus = np.array(list(map(vocab.get, data)))
print ("Type of 'corpus' is %s, shape is %s, and length is %d"
    % (type(corpus), corpus.shape, len(corpus)))

check_len = 10
print ("\n'corpus' looks like %s" % (corpus[0:check_len]))
for i in range(check_len):
    _wordidx = corpus[i]
    print ("[%d/%d] chars[%02d] corresponds to '%s'"
           % (i, check_len, _wordidx, chars[_wordidx]))

# Generate batch data
batch_size  = 50
seq_length  = 200
num_batches = int(corpus.size / (batch_size * seq_length))
# First, reduce the length of corpus to fit batch_size
corpus_reduced = corpus[:(num_batches*batch_size*seq_length)]
xdata = corpus_reduced
ydata = np.copy(xdata)
ydata[:-1] = xdata[1:]
ydata[-1]  = xdata[0]
print ('xdata is ... %s and length is %d' % (xdata, xdata.size))
print ('ydata is ... %s and length is %d' % (ydata, xdata.size))
print ("")

# Second, make batch
xbatches = np.split(xdata.reshape(batch_size, -1), num_batches, 1)
ybatches = np.split(ydata.reshape(batch_size, -1), num_batches, 1)
print ("Type of 'xbatches' is %s and length is %d"
    % (type(xbatches), len(xbatches)))
print ("Type of 'ybatches' is %s and length is %d"
    % (type(ybatches), len(ybatches)))
print ("")

# How can we access to xbatches??
nbatch = 5
temp = xbatches[0:nbatch]
print ("Type of 'temp' is %s and length is %d"
    % (type(temp), len(temp)))
for i in range(nbatch):
    temp2 = temp[i]
    print ("Type of 'temp[%d]' is %s and shape is %s" % (i, type(temp2), temp2.shape,))


I am working on the file "Practice_03/Python与择天记.ipynb".
The first task is:
我们使用echarts做数据可视化的工作
Can you write Python code for it?

from IPython.display import HTML

chart_header_html = """

"""

# 我本地的浏览器可以渲染出来，放到git上就不行了...所以拿图片代替了


I am working on the file "Practice_03/Python与择天记.ipynb".
The first task is:
我们可以看到结果中出现了与魔君实力水平相似的前七个人物，这些人物可以与反派BOSS相提并论，肯定是站在《择天记》实力巅峰的大人物。事实上这些人物在原著中都是从圣境。
择天记中的情侣
训练出来的模型还可以找到具有相似联系的词汇，比如给定情侣关系的两个人物，模型会找到小说中的情侣关系。
我们先来测试一下模型，因为我们知道别样红和无穷碧是在小说中直接描写的情侣，所以我们给定陈长生和徐有容之间的关系，看看程序能否找出和无穷碧有情侣关系的人物。
Can you write Python code for it?

d = model.most_similar(positive=['无穷碧', '陈长生'], negative=['徐有容'])[0]
d


I am working on the file "Practice_03/Python与择天记.ipynb".
The first task is:
我们现在就可以开始使用机器学习来训练模型了。
Can you write Python code for it?

novel_sentences = []

# 对小说进行分词,这里只是任选了一句
# for line in cont:
for line in cont[:6]:
    words = list(jieba.cut(line))
    novel_sentences.append(words)

novel_sentences[4]


I am working on the file "Practice_03/Python与择天记.ipynb".
The first task is:
择天记中的大人物
找到择天记中和反派魔君实力水平相似的人物
Can you write Python code for it?

for s in model.most_similar(positive=["魔君"])[:7]:
    print(s)


I am working on the file "Practice_03/Python与择天记.ipynb".
The first task is:
训练模型
Can you write Python code for it?

# 按照默认参数进行训练

model = gensim.models.Word2Vec(sentences, size=100, window=5, min_count=5, workers=4)

# 把训练好的模型存下来

model.save("zetianjied.model")

# 训练模型需要大概20分钟左右的时间，因性能而异。由于模型太大了就不放在github上面了。

import gensim
# 读取模型

model = gensim.models.Word2Vec.load("zetianjied.model")


I am working on the file "Practice_04/Titanic Love.ipynb".
The first task is:
Andersson家族中的一共有五个小孩子，其中有一个小男孩和四个小女孩。不幸的是这五个小孩子都在这场灾难中丧生了。他们中最小的只有两岁，最大的也不过11岁。
另外的四个大人，分别是Anders Johan夫妇和两个年轻人欧娜女士和爱德华先生。Anders Johan夫妇在这场灾难中共赴生死，而这两个年轻人活了下来。
在这场巨大的灾难中，一个九人组成的大家庭只有两个人幸运的活了下来，而其他七个只能随着泰坦尼克号坠入大西洋。
家庭的惨剧已然让我们悲伤不已，恋人之间的生离死别、阴阳相隔更是令人唏嘘感叹。在目睹了家庭的惨剧后，我们再来看看泰坦尼克号中的情侣们最后的结局！
Can you write Python code for it?

r = re.compile(r'Mrs.(.*?)\(') # 通过正则表达式获取丈夫姓氏
husband_name = [] # 丈夫姓名列表
for l in all_family_df.fname:
    n = r.findall(l)
    if n:
        n = n[0].strip()
        husband_name.append(n)

# 排除同名的可能

def husband_and_wife(name):
    haw_df = all_family_df[[True if name in n else False for n in all_family_df.fname]]
    if len(haw_df) >= 2:
        return haw_df
    pass

# 判断家庭情况

def faw_situation(name):
    faw = husband_and_wife(name)
    faw_g_c = faw.groupby('lname').count()
    faw_list = faw_g_c[faw_g_c.sex >= 2].index
    faw_g_s = faw.groupby('lname').sum()
    situation = []
    for i in faw_list:
        f_c = faw_g_c.loc[i,'Age']
        s = faw_g_s.loc[i,'Survived']
        if s == 0:
            situation.append(('{} {} 夫妇'.format(i,name),'All dead'))
        elif s == f_c:
            situation.append(('{} {} 夫妇'.format(i,name),'All alive'))
        else:
            for p_info in find_people(titanic_data,i):
                if name in p_info.Name:
                    if p_info.Survived == 0:
                        if p_info.Sex == 'female':
                            situation.append(('{} {} 夫妇'.format(i,name),'wife dead'))
                            break
                        else:
                            situation.append(('{} {} 夫妇'.format(i,name),'husband dead'))
                            break
    if situation:
        return situation

faw_situ_list = [] # 家庭情况列表
for n in husband_name:
    if husband_and_wife(n) is not None:
        if faw_situation(n):
            faw_situ_list += faw_situation(n)
faw_situ_list[:5] # 只读取前5个数据

f_df = DataFrame(faw_situ_list,columns=['family','Dead or Alive'])
f_df.groupby('Dead or Alive').count()

fig = plt.figure(figsize=(5,4), dpi=120)
ax = fig.add_subplot(111)
ax = sns.countplot('Dead or Alive',data=f_df)
ax.set_title('Who dead in Titanic Disaster')


I am working on the file "Practice_04/Titanic Love.ipynb".
The first task is:
在106个家庭中，其中Andersson安德森家族共有9名家族成员登船，我们来看看这个家庭在灾难中发生了什么？
Can you write Python code for it?


I am working on the file "Practice_04/Titanic Love.ipynb".
The first task is:
我们先来看看有多少人和自己的家人一起登上了泰坦尼克号？
Can you write Python code for it?

f_c = len(Counter(all_family_df.lname))
print('在泰坦尼克号中共有{}个家庭'.format(f_c))
family_member_count = all_family_df['fname'].groupby(all_family_df['lname']).count()

# 找到家庭成员最多的家庭

family_member_count[family_member_count == family_member_count.max()]


I am working on the file "Practice_04/Titanic Love.ipynb".
The first task is:
我们找到的第一个人，她的全名（'Name字段'）叫做Astor, Mrs. John Jacob，从名字中可以断定她是约翰·雅各布的妻子。
我们找到的第二个人，他的全名叫做Astor, Col. John Jacob，这个人就是我们要找的找到约翰·雅各布·阿斯特四世。

约翰·雅各布
约翰·雅各布和他的妻子相差29岁，他们花了227英镑买下了两张泰坦尼克号一等舱的船票，并且在英吉利海峡的瑟堡港口登船开始蜜月之旅。然而不幸发生了，这艘巨轮将要沉没，在这场灾难中这对夫妻会有怎样的结局？
通过数据我们知道约翰·雅各布的妻子劫后余生（Survived =1），而雅各布先生本人的生还情况我们还不知道，不过我们可以通过Python机器学习来帮助我们找到故事的结局。
Can you write Python code for it?

# 找到 Isidor Straus

find_people(titanic_test_data,'Straus')


I am working on the file "Practice_04/Titanic Love.ipynb".
The first task is:
数据中包含的信息：

Survived => 是否生还
0 = No, 1 = Yes

Pclass => 乘客等级(1/2/3等舱位)
Name => 乘客姓名
Sex => 性别
Age => 年龄
SibSp => 堂兄弟/妹个数
Parch => 父母与小孩个数
Ticket => 船票信息
Fare => 票价
Cabin => 客舱
Embarked => 登船港口
C = Cherbourg 瑟堡, Q = Queenstown 皇后镇, S = Southampton 南安普普顿
Can you write Python code for it?

# 查看数据的整体信息

titanic_data.info()

# 查看数据的摘要信息

titanic_data.describe()


I am working on the file "Practice_04/Titanic Love.ipynb".
The first task is:
美国梅西百货股东Isidor Straus和他的妻子，花费了221英镑卖了泰坦尼克号的一等舱舱位。他们在南安普顿港口登船，最终生死未卜。但我们可以通过Python来看看这两位老夫妻的结局。
我们聚焦于这些冰冷数据后的鲜活个体后，我们再来看看那些在泰坦尼克号中的一家人，在灾难发生后有了怎样的变故？
Can you write Python code for it?

# 寻找泰坦尼克号中的家庭

def get_family_lastname():
    lname_list = []
    fn = titanic_data.Name[titanic_data['SibSp'] >= 1] # 同辈亲戚人数大于1的乘客
    fl = [name.split(',')[0] for name in fn.values] # 这些乘客的姓氏列表
    fs = set(fl) # 对姓氏列表进行去重
    # 确定为训练数据集中的家庭
    for lname in fs:
        if len(find_people(titanic_data,lname)) >= 2:
            lname_list.append(lname)
    return lname_list

# 在灾难发生后家庭成员存活状况

def family_info(family_lastname):
    name_list = find_people(titanic_data,family_lastname) # 所有家庭成员
    f_info = []
    for i in name_list:
        info = {}
        info['lname'],info['fname'] = i.Name.split(',')
        info['sex'] = i.Sex
        info['Age'] = i.Age
        info['Pclass'] = i.Pclass
        info['Survived'] = i.Survived
        f_info.append(info)
    family_df = DataFrame(f_info) # 构建一个数组
    return family_df

# 全部家庭的数组

all_family_df_list = []
for l in get_family_lastname():
    all_family_df_list.append(family_info(l))
all_family_df = pd.concat(all_family_df_list)

all_family_df.head()


I am working on the file "Practice_04/Titanic Love.ipynb".
The first task is:
这每一条冰冷的数据背后，都是一个真实存在的人。我们先聚焦这些数据背后鲜活的生命，来看看这些数据背后的故事。
泰坦尼克号中有一些比较有名气的人，让我们来看看他们在这场灾难中经历了什么？

John Jacob Astor IV，百万富翁、投资家和作家，是泰坦尼克号中最富有的人。
美国梅西百货股东 Isidor Straus。
Can you write Python code for it?

# 通过姓氏查找人物数据的方法

def find_people(df,lastname):
    name_list = []
    for index,names in enumerate(df.Name.values):
         if lastname in names.split(',')[0]:
                name_list.append(df.iloc[index])
    return name_list

# 找到约翰·雅各布·阿斯特四世

print(find_people(titanic_data,'Astor')) # 训练数据中的Astor
print('--------')
print(find_people(titanic_test_data,'Astor')) # 测试数据中的Astor


I am working on the file "Pre-Labs/Espectroscopia/Basics.ipynb".
The first task is:
'''
Un número perfecto es un número natural que es igual a la suma de sus divisores propios positivos.
Así, 6 es un número perfecto porque sus divisores propios son 1, 2 y 3; y 6 = 1 + 2 + 3.
Los siguientes números perfectos son 28, 496 y 8128.
'''
num=input("ingrese un numero: ")
i=1
suma=0
while i<=(num-1):
    cond=num%i
    if cond == 0:
        suma+=i
    i+=1
if suma==num:
    print"el numero %d es perfecto \n"%(num)
else:
    print"el numero %d es no perfecto \n"%(num)
Can you write Python code for it?

def primo(f):
    i=2
    sw=0
    while i<=(f-1):
        comp=f%i
        if comp==0:
            sw=1
            return 0
            break

        i+=1

    if sw==0:
        return 1
n=input("ingrese un numero: ")
print"factores primos: \n"
i=1
while i<=(n):
    comp=n%i
    if comp==0:
        p=primo(i)
        if (p==1):
            print" %d \n"%(i)

    i=i+1

%matplotlib inline
from scipy import stats
from scipy import constants as cons

led=[1.6325,2.424,2.566,3.24050,3.7095]
lamb=[1.10e6,1.60514e6,1.70648e6,1.76367e6,2.14133e6]
slope, intercept, r_value, p_value, std_err = stats.linregress(lamb,led)
x=np.linspace(lamb[0],lamb[-1],100)
y=slope*x+intercept
plt.plot(lamb,led,'o')
plt.plot(x,y,'-')
plt.show()
h_planck=slope*cons.e/cons.c
h=cons.h
error=(h_planck-h)/h
print ('r: ',r_value)
print ('pendiente: ',slope)
print ('error: ',std_err)
print ('h_planck: ',h_planck)
print ('h_real: ',h)
print ('error_h: ',error)


I am working on the file "Pre-Labs/Espectroscopia/Basics.ipynb".
The first task is:
Diferencias entre listas y tuplas
Una lista puede ser alterada, no así una tupla. (cambiar sus valores internos)
Una tupla puede ser utilizada como clave en un diccionario, no así una lista.
Una tupla consume menos espacio que una lista
Can you write Python code for it?

tupla = (1,2,3,4,5,6,7,8,9,10)
lista = [1,2,3,4,5,6,7,8,9,10]

print(tupla.__sizeof__()) # 52 bytes
print(lista.__sizeof__()) # 60 bytes

lista+[11,12,13,14]

for i in range(len(lista)):
    lista[i]*=2
print lista

lista1=lista
lista1=lista*2
print lista1

tupla+(11,12,13,14)

x = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

print "x['Name']: ", x['Name']
print "x['Age']: ", x['Age']

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

dict['Age'] = 8; # update existing entry
dict['School'] = "DPS School"; # Add new entry

print "dict['Age']: ", dict['Age']
print "dict['School']: ", dict['School']

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

del dict['Name']; # remove entry with key 'Name'
dict.clear();     # remove all entries in dict
del dict ;        # delete entire dictionary

print "dict['Age']: ", dict['Age']
print "dict['School']: ", dict['School']


I am working on the file "Pre-Labs/Espectroscopia/Basics.ipynb".
The first task is:
tiempo
https://docs.python.org/2/library/time.html
Can you write Python code for it?

import time
time.strptime("15 Nov 10", "%d %b %y")

#diferencia de tiempo
import random
t=random.randint(1, 10)
print t
t1=time.time()
time.sleep(t)
t2=time.time()
print 'pasaron: ',t2-t1,'segundos '

import numpy

matriz=numpy.zeros((5,2,4,5))
print matriz