# Breve introducción a Python simbólico (paquete SymPy)

## Introducción

El paquete SymPy permite realizar en Python tareas como la manipulación de expresiones matemáticas, derivación, etc. 

Procediendo como se indica a continuación, podemos iniciar una sesion de SymPy adaptada a IPython Notebook. Por defecto, sólo se cargarán algunas variables simbólicas: 

* x, y, z, t, k, m y n: variables númericas, 
* f, g y h: nombres simbólicos para funciones funciones

Si se necesita añadir otras variables simbólicas se pueden usar, por ejemplo, las funciones `var` o `symbols`. Para más detalles, véase por ejemplo la [sección *basic operations*](http://docs.sympy.org/latest/tutorial/basic_operations.html) (localizada en el [tutorial de SymPy](http://docs.sympy.org/latest/tutorial)).

A continuación, se detalla cómo activar el entorno simbólico. Pero antes, una observación importante: una vez se inicializa SymPy, el entorno simbólico estará activado permanentemente (salvo que se reinicie el núcleo). Por eso, si nuestro interés principal es el cálculo numérico en coma flotante, es una buena costumbre el utilizar SyPy en ficheros independientes, en los que exclusivamente se realicen tareas simbólicas (evitando posibles conflictos con paquetes numéricos como *NumPy* o *Scipy*).

## Activación de SymPy y primeros ejemplos


```python
import sympy # Cargar paquete de Python Simbólico
sympy.init_session() # Iniciar sesión simbólica
```

    IPython console for SymPy 0.7.6 (Python 3.5.2-64-bit) (ground types: python)
    
    These commands were executed:
    >>> from __future__ import division
    >>> from sympy import *
    >>> x, y, z, t = symbols('x y z t')
    >>> k, m, n = symbols('k m n', integer=True)
    >>> f, g, h = symbols('f g h', cls=Function)
    >>> init_printing()
    
    Documentation can be found at http://www.sympy.org


Introducimos una primera expresión simbólica (usando las variables x e y):


```python
1/x + 1/y
```




    1/y + 1/x



Factorizamos esta expresión. Para ello usamos la función `factor()` sobre la expresión anterior (que se referencia mediante el operador `_` (guión bajo)). Podemos definir nuevas variables y realizar distinto tipo de operaciones simbólicas 


```python
factor(_) # El operador _ señala a la salida anterior
```




    (x + y)/(x*y)




```python
cociente = _
cociente**3
```




    (x + y)**3/(x**3*y**3)




```python
expand(sqrt(cociente**3))
```




    sqrt(y**(-3) + 3/(x*y**2) + 3/(x**2*y) + x**(-3))



## Derivadas e integrales simbólicas

A continuación, definimos una función y calculamos su derivada:


```python
def f(x,y): return sin(cociente**5)
print("f(x,y) =", f(x,y))
print("Derivada parcial respecto a x:")
diff(f(x,y), x) # Derivada respecto a x
```

    f(x,y) = sin((x + y)**5/(x**5*y**5))
    Derivada parcial respecto a x:





    (5*(x + y)**4/(x**5*y**5) - 5*(x + y)**5/(x**6*y**5))*cos((x + y)**5/(x**5*y**5))



Muchas de las funciones simbólicas están disponibles usando la sintaxis de orientación a objetos (también `factor()` y `dif()`, funciones que vimos antes). Por ejemplo, para tomar $x=\log(\pi)$ en la función anterior (sustituir $x$ por $\log(\pi)$) podemos usar la función `subs()`:


```python
f(x,y).subs(x,log(pi))
```

Véase que la variable `pi` ha cambiado y ahora es simbólica. También las funciones habituales (como `log()`, `sin()`, `cos()`, etc.) son ahora simbólicas:


```python
cos(1+1)
```

Podemos calcular integrales simbólicas fácilmente:


```python
integrate(x*E**(x**2),x) # En simbólico, el número e se escribe con mayúsculas.
```

Por último: la función `plot()` es actualizada por el paquete `SymPy` y actúa de de forma diferente a la función habtual (contenida en el paquete `matplotlib`, que suele ser cargado automáticamente por *Ipython Notebook*). Un ejemplo:


```python
plot(x**2*cos(1/x), (x, -pi/4, pi/4))
```

### Para saber más,
véase el [tutorial de SymPy](http://docs.sympy.org/latest/tutorial/index.html) (o [documentación adicional](http://docs.sympy.org/latest/index.html) disponible en internet).

0688a23dd85acef9d8a85ec4102d2146b276e040
ipynb
Jupyter Notebook
Documentos.bak/Intro-SymPy.ipynb
rrgalvan/Python4Maths
0412f34a2c70ab1a16a738a23581f52bcf5c1c84
CC-BY-3.0
Documentos.bak/Intro-SymPy.ipynb
rrgalvan/Python4Maths
0412f34a2c70ab1a16a738a23581f52bcf5c1c84
CC-BY-3.0
Documentos.bak/Intro-SymPy.ipynb
rrgalvan/Python4Maths
0412f34a2c70ab1a16a738a23581f52bcf5c1c84
CC-BY-3.0
Qwen/Qwen-72B
1. YES
2. YES