IPython Notebook 1 de 2 http://127.0.0.1:8889/5e602348-1849-42ab-88a3-3a90f8e64648/... Usando SymPy com gráficos embutidos e saída tipografada no IPython Notebook Disciplina "Introdução à Computação em Física" (ICF) da UFES/Alegre Curso de Licenciatura em Física - Turma 2012/2 Autoria : Prof. Roberto Colistete Jr., em 02/2013. Para que os gráficos sejam embutidos no IPython notebook, deve-se executar primeiro o comando mágico "%pylab inline" para se ter PyLab (MatPlotLib + NumPy) em modo interativo e todos os gráficos gerados embutidos em células : In [1]: %pylab inline Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline]. For more information, type 'help(pylab)'. Há várias formas de carregar o módulo SymPy (Symbolic Python, um CAS - Computer Algebra System). Aqui usamos "from import *" que importa todos os objetos de modulo" para o contexto global do Python In [2]: from sympy import * Graças ao SymPy, os objetos/variáveis Python podem ter conteúdo simbólico, porém eles precisam ser declarados como simbólicos, p.e., usando "symbols()" para definir x 0 , v 0 e a : In [3]: x0, v0, a = symbols('x0 v0 a') Outra alternativa é usar o submódulo "sympy.abc" que define como símbolos os objetos "a...z" e vários gregos (alpha, beta, etc). Podemos importar somente aqueles objetos que queremos que sejam simbólicos, p.e., x, y, zet: In [4]: from sympy.abc import x, y, z, t, alpha, beta Um exemplo simples de cálculo simbólico, onde x e y não tem valor definido, e "expand()" é função que expande uma expressão : In [5]: expand((x**alpha+y**beta)**3) Out[5]: x**(3*alpha) + 3*x**(2*alpha)*y**beta + 3*x**alpha*y**(2*beta) + y**(3*beta) A expressão de cinemática de MRUV em 1 dimensão : In [6]: x0 + v0*t + a*t**2/2 Out[6]: a*t**2/2 + t*v0 + x0 Note acima que a saída não é bidimensional (p.e., expoentes não estão na linha de cima), nem tipografada. Para obtermos saída tipografada e bidimensional, no SymPy 0.7.1 deve-se usar o comando mágico "%load_ext sympyprinting" (que carrega a extensão sympyprinting), no SymPy 0.7.2 mais recente (10/2012) usa-se "init_printing()" : In [7]: %load_ext sympyprinting Os mesmos resultado agora são mostrados tipografados: In [8]: expand((x**alpha+y**beta)**3) Out[8]: x 3α + 3x 2α y β + 3x α y 2β + y 3β 19-04-2013 22:57 IPython Notebook 2 de 2 http://127.0.0.1:8889/5e602348-1849-42ab-88a3-3a90f8e64648/... In [9]: x0 + v0*t + a*t**2/2 Out[9]: 1 2 at + t v 0 + x 0 2 Vários exemplos usando SymPy, com resultados tipografados : In [10]: Limit(sin(beta*x)/x,x,0) Out[10]: lim( x→0 sin(βx) ) x In [11]: limit(sin(beta*x)/x,x,0) Out[11]: β In [12]: Derivative(x*cos(alpha*x)**3,x) Out[12]: ∂ (xcos 3 (αx)) ∂x In [13]: diff(x*cos(alpha*x)**2,x) Out[13]: −2αx sin(αx) cos(αx) + cos 2 (αx) In [14]: Integral(sin(alpha*x)**10,x) Out[14]: ∫ sin 10 (αx) dx In [15]: expand(integrate(sin(alpha*x)**10,x)) Out[15]: sin 9 (αx) cos(αx) 63 9 sin 7 (αx) cos(αx) 21 sin 5 (αx) cos(αx) 21 sin 3 (αx) cos(αx) 63 sin(αx) cos(αx) x− − − − − 256 10α 80 α 160 α 128 α 256 α 19-04-2013 22:57