¿Cómo separar parte real e imaginaria en SymPy?

Andaba yo preguntándome esta mañana, a falta (¡sorprendentemente!) de dudas de los lectores:

Si tengo un número complejo en SymPy, ¿cómo puedo separar la parte real y la parte imaginaria? Y ya puestos, ¿puedo separar también el módulo y el argumento?

Si utilizamos el tipo complex de Python el resultado es correcto pero puede no ser demasiado vistoso:

$ isympy
In [1]: (1j + 1) / (5 - 2j)
Out[1]: (0.10344827586206896+0.24137931034482757j)

Queremos usar las capacidades simbólicas de SymPy. En SymPy, como se indica en el tutorial, los complejos se declaran de esta manera:

In [2]: (1 * I + 1) / (5 - 2 * I)
Out[2]:
 1 + ⅈ
───────
5 - 2⋅ⅈ

Y ya tenemos un objeto de SymPy con toda su potencia (que además se imprime bonito). Para extraer la parte real e imaginaria podemos usar las funciones re e im o el método as_real_imag.

In [3]: a = (1 * I + 1) / (5 - 2 * I)
In [4]: re(a)
Out[4]: 3/29
In [5]: im(a)
Out[5]: 7/29
In [6]: a.as_real_imag()
Out[6]: (3/29, 7/29)

Estos métodos extraen la parte real y la imaginaria pero «pierdo» el número original. Para reescribir el número separando parte real e imaginaria lo mejor es emplear el método expand(complex=True):

In [9]: a.expand(complex=True)
Out[9]:
3    7⋅ⅈ
── + ───
29    29

Esto ya es otra cosa ;)

Continue reading

Cómo calcular límites, derivadas, series e integrales en Python con SymPy

Introducción

Como buen paquete de cálculo simbólico que es, Sympy ofrece numerosas posibilidades para realizar tareas comunes del cálculo infinitesimal, como son calcular límites, derivadas, series e integrales simbólicas. Por ejemplo, mientras que con SciPy podemos calcular, utilizando diferencias centradas, la derivada de una función en un punto utilizando la función scipy.misc.derivative, con SymPy podemos calcular la derivada simbólica de la función.

Si no conoces SymPy, puedes leer nuestra Introducción al Cálculo Simbólico en Python con SymPy para hacerte una idea del manejo del paquete. Este artículo está basado en la sección de Cálculo Infinitesimal del tutorial de SymPy, y en él utilizaremos el intérprete interactivo de SymPy (isympy) que viene incluido con el paquete; para que el código funcione en un programa Python normal, sólo habría que incluir las correspondientes sentencias import.

Continue reading

Introducción al Cálculo Simbólico en Python con SymPy

Introducción

En este artículo voy a hacer una introducción a SymPy, una biblioteca para hacer Cálculo Simbólico en Python a la vez que un sistema de álgebra computacional (o CAS en inglés) muy prometedor. Si alguna vez te has preguntado cómo hacer derivadas y resolver ecuaciones con Python o conoces ya sistemas como Mathematica o Maple pero prefieres utilizar una solución libre, has venido al sitio correcto.

Actualmente el desarrollo de SymPy está muy activo: a pesar de ser un CAS bastante completo, todavía tiene algunas cosas que sus desarrolladores piensan pulir a lo largo de los próximos meses y están trabajando duro para ello. Personalmente es uno de mis proyectos de software libre favoritos, por la buenísima documentación que escriben, por lo elegante que queda el código y por lo bonita que es su web :P

SymPy tiene una característica que no tienen ninguno de sus competidores, tanto libres como no libres: se puede utilizar de manera interactiva como los CAS a los que estamos acostumbrados, pero también se puede integrar con nuestro código Python como una biblioteca más.

Se puede probar online, y también se puede descargar e instalar fácilmente. Para lanzar la consola interactiva (basada en IPython) sólo tendremos que escribir

$ isympy

Para este tutorial se asumirá que estamos trabajando con la consola interactiva de SymPy 0.7.1. Para que el código funcione también en modo no interactivo solamente habrá que incluir los oportunos import y sustituir las variables dinámicas de IPython (_, _n, etc.) por variables reales. Podéis encontrar en Internet la documentación de SymPy 0.7.1. ¡Vamos allá!

Continue reading

Presentando Mathics: una alternativa libre y ligera a Mathematica

A través de la lista de correo sage-dev acabo de descubrir hace un momento Mathics: un sistema de álgebra computacional (CAS) libre y gratuito con una interfaz web y basado en SymPy y Sage.

Interfaz web de Mathics en http://www.mathics.net/

En el momento de escribir estas líneas se trata de un proyecto personal de Jan Pöschko, un estudiante austríaco. Me parece impresionante que una sola persona haya llevado esto adelante: este hombre tiene mi más sincera admiración.

Aunque está basado en SymPy y tiene soporte para Sage también, Mathics toma la sintaxis de Mathematica, el popular CAS de Wolfram Research. Como se menciona en la introducción, Mathics busca parecerse a Mathematica lo máximo posible. Puedes leer las motivaciones del proyecto (hay por ahí quien dice que tienen un punto de ironía, cada uno que lo interprete a su manera :P).

Al contrario que CAS como Mathematica, Maple o Derive, Mathics es libre y gratuito (GPLv3):

«It is free both as in “free beer” and as in “freedom”».

La interfaz web disponible en http://www.mathics.net/ hace que podamos utilizarlo también como sustituto de Wolfram|Alpha (no te dice el sentido de la vida, el Universo y todo lo demás... pero resuelve ecuaciones :)). Además, se puede instalar localmente y ejecutarlo como cualquier otro programa de nuestro ordenador, preferiblemente en Linux y Mac OS X aunque también, en principio, puede instalarse en Windows (aunque no hay de momento un instalador que haga el proceso rápido y directo).

Algunas de las características más reseñables de Mathics son

  • Un poderoso lenguaje de programación funcional (el que usa Mathematica),
  • Un sistema de reglas y búsqueda de patrones,
  • Números racionales, complejos y aritmética de precisión arbitraria,
  • Numerosos métodos de manipulación de listas y estructuras,
  • Una interfaz gráfica interactiva en el navegador que usa MathML y MathJax, además de una interfaz de línea de comandos,
  • Creación de imágenes y gráficas y representación en el navegador usando SVG,
  • Una versión online en http://www.mathics.net para acceso instantáneo,
  • Exportación de resultados a \(LaTeX\) usando Asymptote para los gráficos,
  • Una forma muy sencilla de definir nuevas funciones en Python y
  • Un sistema integrado de documentación y pruebas.

En la misma interfaz web podéis ver una pequeña muestra de las posibilidades de Mathics. Es, además, muy fácil compartir cuadernos y resultados, simplemente haciendo clic en el asterisco de la esquina superior derecha.

Jan anda buscando desarrolladores, así que si queréis ayudar o tal vez escribir documentación, tutoriales, ... o simplemente ver cómo funciona un CAS por dentro, aquí tenéis el código fuente de Mathics en GitHub.

Un saludo a todos y larga vida al software libre :)