# Introducción

En esta sección se aprenderá a hacer lo siguiente:

* Importar *Sympy* y configurar la impresión "bonita"
* Usar operaciones matemáticas como `sqrt` y `sin`
* Crear símbolos *Sympy*
* Hacer derivadas de expresiones

## Preámbulo

Al igual que NumPy y Pandas reemplazan funciones como `sin`,` cos`, `exp` y `log` con implementaciones numéricas potentes, SymPy reemplaza `sin`, `cos`, `exp` y `log` con potentes implementaciones matemáticas.


```python
from sympy import *
init_printing()  # configura impresión elegante
```


```python
import math
math.sqrt(2)
```


```python
sqrt(2)  # Este `sqrt` proviene de SymPy
```

### Ejercicio

Usa la función `acos` en `-1` para encontrar cuando el coseno es igual a `-1`. Prueba esta misma función con la biblioteca *math*. ¿Obtienes el mismo resultado?




```python
# Usa a acos en -1 para encontrar en qué parte del círculo la coordenada x es igual a -1


```


```python
# Usa a `math.acos` en -1 para encontrar el mismo resultado usando el módulo math.
# ¿Es el mismo resultado?
# ¿Que te da la función `numpy.arccos`?


```

## Symbols

Al igual que `ndarray` de NumPy  o `DataFrame` de Pandas, SymPy tiene `Symbol`, que representa una variable matemática.

Creamos símbolos usando la función `symbols`. Las operaciones en estos símbolos no hacen un trabajo numérico como con NumPy o Pandas, sino que construyen expresiones matemáticas.


```python
x, y, z = symbols('x,y,z')
alpha, beta, gamma = symbols('alpha,beta,gamma')
```


```python
x + 1
```


```python
log(alpha**beta) + gamma
```


```python
sin(x)**2 + cos(x)**2
```

### Ejercicio

Usa `symbols` para crear dos variables, `mu` y `sigma`.


```python
?, ? = symbols('?')
```

### Ejercicio

Usa `exp`, `sqrt` y operadores aritméticos de Python como `+, -, *, **` para crear la curva de campana estándar con objetos SymPy

$$ e^{-\frac{(x - \mu)^2}{ \sigma^2}} $$



```python
exp(?)
```

## Derivadas

Una de las operaciones más solicitadas en SymPy es la derivada. Para tomar la derivada de una expresión, usa el método `diff`


```python
(x**2).diff(x)
```


```python
sin(x).diff(x)
```


```python
(x**2 + x*y + y**2).diff(x)
```


```python
diff(x**2 + x*y + y**2, y) # diff también está disponible como una función
```

### Ejercicio

En la última sección hiciste una distribución normal


```python
mu, sigma = symbols('mu,sigma')
```


```python
bell = exp(-(x - mu)**2 / sigma**2)
bell
```

Toma la derivada de esta expresión con respecto a $x$


```python
?.diff(?)
```

### Ejercicio

Hay tres símbolos en esa expresión. Normalmente estamos interesados en la derivada con respecto a `x`, pero podríamos  pedir la derivada con respecto a `sigma`. Prueba esto ahora


```python
# Derivada de la curva de campana con respecto a sigma

```

### Ejercicio

La segunda derivada de una expresión es solo la derivada de la derivada. Encadena llamadas `.diff( )` para encontrar la segunda y tercera derivada de tu expresión


```python
# Encuentra la segunda y tercera derivada de `bell`

```

## Funciones

*SymPy* tiene varias rutinas para manipular expresiones. La función más utilizada es `simplify`.


```python
expr = sin(x)**2 + cos(x)**2
expr
```


```python
simplify(expr)
```

### Ejercicio

En el ejercicio anterior, encontraste la tercera derivada de la curva de campana


```python
bell.diff(x).diff(x).diff(x)
```

Puedes notar que esta expresión tiene mucha estructura compartida. Podemos factorizar algunos términos para simplificar esta expresión.

Llama a `simplify` en esta expresión y observa el resultado.


```python
# Llama simplify en la tercera derivada de la curva de campana

```

## Sympify

La función `sympify` transforma objetos Python (ints, floats, strings) en objetos Sympy (Integers, Reals, Symbols).
*nota la diferencia entre `sympify` y `simplify`. Estas no son las mismas funciones.*


```python
sympify('r * cos(theta)^2')
```

Es útil cuando interactúas con el mundo real, o para copiar y pegar rápidamente una expresión de una fuente externa.

0364ddc60bf8e937404f20bdd30e5f9c44b8af54
ipynb
Jupyter Notebook
tutorial_exercises/01-Symbols-Derivatives-Functions.ipynb
t3rodrig/sympy-tutorial-es
5cd5497f799e889d758a26539781cdc72b1e6a74
BSD-3-Clause
tutorial_exercises/01-Symbols-Derivatives-Functions.ipynb
t3rodrig/sympy-tutorial-es
5cd5497f799e889d758a26539781cdc72b1e6a74
BSD-3-Clause
tutorial_exercises/01-Symbols-Derivatives-Functions.ipynb
t3rodrig/sympy-tutorial-es
5cd5497f799e889d758a26539781cdc72b1e6a74
BSD-3-Clause
Qwen/Qwen-72B
1. YES
2. YES