︠4ecd5d76-4a84-485d-8076-aac40c86a98ai︠ %html

SageMath (por exemplos)

 

SageMath é um software matemático livre e de código aberto (open-source), desenvolvido sob a licença GPL por uma comunidade de programadores e matemáticos, que busca ser uma alternativa para os principais sistemas proprietários de software matemático como o Magma, Maple, Mathematica e Matlab. Na instalação padrão do SageMath temos boa parte das bibliotecas (ou pacotes) que possibilitam trabalharmos com diversas áreas:

Pacotes de matemática contidos no SageMath

Álgebra  GAP, Maxima, Singular, Macaulay 2
Geometria algébrica Singular, Macaulay 2
Aritmética de precisão arbitrária MPIR, MPFR, MPFI, NTL, mpmath
Geometria aritmética PARI/GP, NTL, mwrank, ecm
Cálculo Maxima, SymPy, GiNaC
Combinatória Symmetrica, Sage-Combinat
Álgebra linear ATLAS, BLAS, LAPACK, NumPy, LinBox, IML, GSL
Teoria dos gráficos NetworkX
Teoria dos grupos GAP
Computação numérica GSL, SciPy, NumPy, ATLAS, Scilab, GNU_Octave
Teoria dos números PARI/GP, FLINT, NTL, Kash/Kant
Computação estatística R, SciPy

 

Utilizando como sintaxe básica o PYTHON, podemos usar essa ferramenta com as mesmas funções e importando boa parte das mesmas bibliotecas que vinhamos usando.

Vejamos alguns exemplos para por em prática nossos conhecimentos de Python + SageMath.

[Exemplo 1:  Álgebra linear] Balanço de Reações Químicas

Sabemos que o hidrogênio ($H_2$) reage com o oxigênio ($O_2$) para produzir água ($H_2 O$). Mas, quanto de hidrogênio e oxigênio precisamos? Esta é uma mudança que podemos descrever do seguinte modo: $x$ moléculas de $H_2$ reagem com $y$ moléculas de $O_2$ produzindo $z$ moléculas de $H_2O$, ou ainda

$$x\, H_2 + y\,O_2 \, \rightarrow \, z\, H_2O$$

Como os átomos não são modificados, o número de átomos de cada elemento no início da reação deve ser igual ao número de átomos desse mesmo elemento no final da reação.

$$\left \{ \begin{matrix}  2x -2z & = & 0 \\  2y - z & = & 0 \end{matrix} . \right .$$

Vamos procurar o conjunto solução para este sistema de equações.

︡902ae836-986a-4b97-b070-a5a8c7de8853︡{"html": "

SageMath (por exemplos)

\n

 

\n

SageMath é um software matemático livre e de código aberto (open-source), desenvolvido sob a licença GPL por uma comunidade de programadores e matemáticos, que busca ser uma alternativa para os principais sistemas proprietários de software matemático como o Magma, Maple, Mathematica e Matlab. Na instalação padrão do SageMath temos boa parte das bibliotecas (ou pacotes) que possibilitam trabalharmos com diversas áreas:

\n

Pacotes de matemática contidos no SageMath

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Álgebra GAP, Maxima, Singular, Macaulay 2
Geometria algébricaSingular, Macaulay 2
Aritmética de precisão arbitráriaMPIR, MPFR, MPFI, NTL, mpmath
Geometria aritméticaPARI/GP, NTL, mwrank, ecm
CálculoMaxima, SymPy, GiNaC
CombinatóriaSymmetrica, Sage-Combinat
Álgebra linearATLAS, BLAS, LAPACK, NumPy, LinBox, IML, GSL
Teoria dos gráficosNetworkX
Teoria dos gruposGAP
Computação numéricaGSL, SciPy, NumPy, ATLAS, Scilab, GNU_Octave
Teoria dos númerosPARI/GP, FLINT, NTL, Kash/Kant
Computação estatísticaR, SciPy
\n

 

\n

Utilizando como sintaxe básica o PYTHON, podemos usar essa ferramenta com as mesmas funções e importando boa parte das mesmas bibliotecas que vinhamos usando.

\n

Vejamos alguns exemplos para por em prática nossos conhecimentos de Python + SageMath.

\n\n

[Exemplo 1:  Álgebra linear] Balanço de Reações Químicas

\n

Sabemos que o hidrogênio ($H_2$) reage com o oxigênio ($O_2$) para produzir água ($H_2 O$). Mas, quanto de hidrogênio e oxigênio precisamos? Esta é uma mudança que podemos descrever do seguinte modo: $x$ moléculas de $H_2$ reagem com $y$ moléculas de $O_2$ produzindo $z$ moléculas de $H_2O$, ou ainda

\n

$$x\\, H_2 + y\\,O_2 \\, \\rightarrow \\, z\\, H_2O$$

\n

Como os átomos não são modificados, o número de átomos de cada elemento no início da reação deve ser igual ao número de átomos desse mesmo elemento no final da reação.

\n

$$\\left \\{ \\begin{matrix}  2x -2z & = & 0 \\\\  2y - z & = & 0 \\end{matrix} . \\right .$$

\n

Vamos procurar o conjunto solução para este sistema de equações.

"}︡ ︠2169c456-f6cd-4ee7-8204-c56891a5fa43s︠ ## Definindo as variaveis x,y,z = var('x y z') ## Usando o comando "solve" para encontrar ## o conjunto solucao. solucao = solve([2*x - 2*z == 0,2*y - z == 0],[x,y]) ## Exibindo a solucao. show(solucao[0]) ︡e69d20f5-d50b-444b-818c-94a75e95dac9︡{"html":"
[$\\displaystyle x = z$, $\\displaystyle y = \\frac{1}{2} \\, z$]
"}︡{"done":true} ︠32364e2a-aded-4079-9ace-e363a2b24041i︠ %html

[Exercício 1]

Encontre o balanço das reações químicas:

(a) $ N_2O_5 \rightarrow N2 + O_2 $;

(b) $(NH_4)_2 CO_3 \rightarrow NH_3 + H_2O + CO_2$.

︡9d832d7e-82d2-4d5f-8b0e-ed4d44bb6cff︡{"html": "

[Exercício 1]

\n

Encontre o balanço das reações químicas:

\n

(a) $ N_2O_5 \\rightarrow N2 + O_2 $;

\n

(b) $(NH_4)_2 CO_3 \\rightarrow NH_3 + H_2O + CO_2$.

"}︡ ︠37877b39-d592-41cc-b315-432ad816f01a︠ ### Resolva ... ︡1a5fae28-da93-4112-aaea-01bf0cb8d8a4︡︡ ︠aae63c5d-0f73-4b60-978f-a57d9cb7e587i︠ %html

[Exemplo 2:  Um pouco de Álgebra] Matrizes de Permutação

Dada a matriz identidade de ordem $3\times 3$ dada por

$$ I_3 = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}$$

permutando as linhas obtemos as seguintes matrizes:

$$ P_{12} = \begin{pmatrix} 0 & 1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{pmatrix}, P_{13} = \begin{pmatrix} 0 & 0 & 1 \\ 0 & 1 & 0 \\ 1 & 0 & 0 \end{pmatrix}, P_{23} = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & 1 & 0 \end{pmatrix}.$$

Para nos ajudar na legenda, vamos denotar $A = P_{12}$, $B = P_{13}$ e $C = P_{23}$.

Dada uma matriz arbitrária

$$M = \begin{pmatrix} a & b & c \\ d & e & f \\ g & h & i \end{pmatrix},$$

Usando o produto de matrizes, temos:

︡9fd18a29-39a6-4455-83f3-a496fbbdfc1b︡{"html": "

[Exemplo 2:  Um pouco de Álgebra] Matrizes de Permutação

\n

Dada a matriz identidade de ordem $3\\times 3$ dada por

\n

$$ I_3 = \\begin{pmatrix} 1 & 0 & 0 \\\\ 0 & 1 & 0 \\\\ 0 & 0 & 1 \\end{pmatrix}$$

\n

permutando as linhas obtemos as seguintes matrizes:

\n

$$ P_{12} = \\begin{pmatrix} 0 & 1 & 0 \\\\ 1 & 0 & 0 \\\\ 0 & 0 & 1 \\end{pmatrix}, P_{13} = \\begin{pmatrix} 0 & 0 & 1 \\\\ 0 & 1 & 0 \\\\ 1 & 0 & 0 \\end{pmatrix}, P_{23} = \\begin{pmatrix} 1 & 0 & 0 \\\\ 0 & 0 & 1 \\\\ 0 & 1 & 0 \\end{pmatrix}.$$

\n

Para nos ajudar na legenda, vamos denotar $A = P_{12}$, $B = P_{13}$ e $C = P_{23}$.

\n

Dada uma matriz arbitrária

\n

$$M = \\begin{pmatrix} a & b & c \\\\ d & e & f \\\\ g & h & i \\end{pmatrix},$$

\n

Usando o produto de matrizes, temos:

"}︡ ︠e3f77566-a80c-453f-8e0e-eab8e06746d3oi︠ ### Definindo variaveis a,b,c,d,e,f,g,h,i = var('a b c d e f g h i') ### Definindo a matriz M M = matrix([[a,b,c],[d,e,f],[g,h,i]]) ### Mostrando a matriz show(M) ︡ea8b6bc0-dde0-4a37-b3a9-cd9730d01a01︡{"tex": {"tex": "\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\left(\\begin{array}{rrr}\na & b & c \\\\\nd & e & f \\\\\ng & h & i\n\\end{array}\\right)", "display": true}}︡ ︠feae725f-ddd8-4d99-bd15-b7471e4aeb7bs︠ ### Vetores da base canonica e1, e2, e3. e1 = [1,0,0] e2 = [0,1,0] e3 = [0,0,1] ### Definindo as matrizes de Permutacao P123 = matrix([e1,e2,e3]) P132 = matrix([e1,e3,e2]) P213 = matrix([e2,e1,e3]) P231 = matrix([e2,e3,e1]) P312 = matrix([e3,e1,e2]) P321 = matrix([e3,e2,e1]) ### Mostrando as matrizes show(P123,P132) show(P213,P231) show(P312,P321) ︡f63f31fd-68a8-4e67-a2af-03789a66d9af︡{"html":"
$\\displaystyle \\left(\\begin{array}{rrr}\n1 & 0 & 0 \\\\\n0 & 1 & 0 \\\\\n0 & 0 & 1\n\\end{array}\\right)$ $\\displaystyle \\left(\\begin{array}{rrr}\n1 & 0 & 0 \\\\\n0 & 0 & 1 \\\\\n0 & 1 & 0\n\\end{array}\\right)$
"}︡{"html":"
$\\displaystyle \\left(\\begin{array}{rrr}\n0 & 1 & 0 \\\\\n1 & 0 & 0 \\\\\n0 & 0 & 1\n\\end{array}\\right)$ $\\displaystyle \\left(\\begin{array}{rrr}\n0 & 1 & 0 \\\\\n0 & 0 & 1 \\\\\n1 & 0 & 0\n\\end{array}\\right)$
"}︡{"html":"
$\\displaystyle \\left(\\begin{array}{rrr}\n0 & 0 & 1 \\\\\n1 & 0 & 0 \\\\\n0 & 1 & 0\n\\end{array}\\right)$ $\\displaystyle \\left(\\begin{array}{rrr}\n0 & 0 & 1 \\\\\n0 & 1 & 0 \\\\\n1 & 0 & 0\n\\end{array}\\right)$
"}︡{"done":true} ︠1e4fe6e4-b829-4df6-9d4c-6bdf259323a0s︠ ### Efetuando os produtos com a matriz M show(P123*M, P213*M, P132*M) ︡a9d56512-112a-4cde-9e45-bb34a882704a︡{"stderr":"Error in lines 1-1\nTraceback (most recent call last):\n File \"/cocalc/lib/python2.7/site-packages/smc_sagews/sage_server.py\", line 1191, in execute\n flags=compile_flags), namespace, locals)\n File \"\", line 1, in \nNameError: name 'M' is not defined\n"}︡{"done":true} ︠d12d1c1e-45c1-47bf-8b13-cf828685a615︠ ︡713fde4e-f176-4e60-b0f8-da9579887dc5︡ ︠260d2d92-6206-4717-83a1-2103d7412fd9s︠ ### Sendo: A = P123 B = P132 C = P213 D = P231 E = P312 F = P321 show(A*A,A*B,A*C,A*D,A*E,A*F) show(B*A,B*B,B*C,B*D,B*E,B*F) ︡c60ca27e-02ad-49ef-9a51-ce4c327727b8︡{"html":"
$\\displaystyle \\left(\\begin{array}{rrr}\n1 & 0 & 0 \\\\\n0 & 1 & 0 \\\\\n0 & 0 & 1\n\\end{array}\\right)$ $\\displaystyle \\left(\\begin{array}{rrr}\n1 & 0 & 0 \\\\\n0 & 0 & 1 \\\\\n0 & 1 & 0\n\\end{array}\\right)$ $\\displaystyle \\left(\\begin{array}{rrr}\n0 & 1 & 0 \\\\\n1 & 0 & 0 \\\\\n0 & 0 & 1\n\\end{array}\\right)$ $\\displaystyle \\left(\\begin{array}{rrr}\n0 & 1 & 0 \\\\\n0 & 0 & 1 \\\\\n1 & 0 & 0\n\\end{array}\\right)$ $\\displaystyle \\left(\\begin{array}{rrr}\n0 & 0 & 1 \\\\\n1 & 0 & 0 \\\\\n0 & 1 & 0\n\\end{array}\\right)$ $\\displaystyle \\left(\\begin{array}{rrr}\n0 & 0 & 1 \\\\\n0 & 1 & 0 \\\\\n1 & 0 & 0\n\\end{array}\\right)$
"}︡{"html":"
$\\displaystyle \\left(\\begin{array}{rrr}\n1 & 0 & 0 \\\\\n0 & 0 & 1 \\\\\n0 & 1 & 0\n\\end{array}\\right)$ $\\displaystyle \\left(\\begin{array}{rrr}\n1 & 0 & 0 \\\\\n0 & 1 & 0 \\\\\n0 & 0 & 1\n\\end{array}\\right)$ $\\displaystyle \\left(\\begin{array}{rrr}\n0 & 1 & 0 \\\\\n0 & 0 & 1 \\\\\n1 & 0 & 0\n\\end{array}\\right)$ $\\displaystyle \\left(\\begin{array}{rrr}\n0 & 1 & 0 \\\\\n1 & 0 & 0 \\\\\n0 & 0 & 1\n\\end{array}\\right)$ $\\displaystyle \\left(\\begin{array}{rrr}\n0 & 0 & 1 \\\\\n0 & 1 & 0 \\\\\n1 & 0 & 0\n\\end{array}\\right)$ $\\displaystyle \\left(\\begin{array}{rrr}\n0 & 0 & 1 \\\\\n1 & 0 & 0 \\\\\n0 & 1 & 0\n\\end{array}\\right)$
"}︡{"done":true} ︠fc6e5aa3-ed6a-4233-829f-9c50d272b226︠ ︡e5213449-5c30-4ca0-bad8-9dc38c207a7d︡ ︠81a6a121-997b-4dc0-9931-415fb026f344i︠ %html

[Exercício]

Com as informações obtidas, podemos preencher parte da tabela, complete-a.

$$ \begin{array}{c|cccccc} \ast &  A & B & C & D & E & F  \\ \hline A & A &  B & C & D & E & F \\ B & B & A & D & C & F & E \\ B & ? & ? & ? & ? & ? & ? \\ C & ? & ? & ? & ? & ? & ?  \\ D & ? & ? & ? & ? & ? & ? \\ E & ? & ? & ? & ? & ? & ? \end{array}$$

Neste exemplo, abordamos o conjunto das Matrizes de Permutação. Há uma estrutura que tem o mesmo comportamento, é o Grupo de Simetrias dos vértices de um triângulo.

   

ou observando os apenas os eixos de simetria:

Uma outra forma de montar a tabela é:

︡2f4547e0-16e9-4415-8168-ed5213fbf377︡{"html": "

[Exercício]

\n

Com as informações obtidas, podemos preencher parte da tabela, complete-a.

\n

$$ \\begin{array}{c|cccccc} \\ast &  A & B & C & D & E & F  \\\\ \\hline A & A &  B & C & D & E & F \\\\ B & B & A & D & C & F & E \\\\ B & ? & ? & ? & ? & ? & ? \\\\ C & ? & ? & ? & ? & ? & ?  \\\\ D & ? & ? & ? & ? & ? & ? \\\\ E & ? & ? & ? & ? & ? & ? \\end{array}$$

\n\n

Neste exemplo, abordamos o conjunto das Matrizes de Permutação. Há uma estrutura que tem o mesmo comportamento, é o Grupo de Simetrias dos vértices de um triângulo.

\n

\"\"   

\n

ou observando os apenas os eixos de simetria:

\n

\"\"Uma outra forma de montar a tabela é:

"}︡ ︠96a078ab-b434-48dd-9a44-d4d55cc2b5bbs︠ ### Definindo o grupo finito de simetrias triangle = SymmetricGroup(3) ### Montando a tabela das multiplicacoes triangle.cayley_table() ︡fb40fc09-b320-4a1f-81f0-bf535a488e6f︡{"stdout":"* a b c d e f\n +------------\na| a b c d e f\nb| b a d c f e\nc| c e a f b d\nd| d f b e a c\ne| e c f a d b\nf| f d e b c a\n"}︡{"stdout":"\n"}︡{"done":true} ︠3f575531-92ec-4a6c-ae97-5d9adcae8dbfi︠ %html

[Exemplo 3: Equações Diferenciais Ordinárias] Pendulo Simples.

 Denota-se o ângulo formado entre a vertical e o braço de pêndulo. Faz-se as seguintes hipóteses:

  1. O braço é formado por um fio não flexível que se mantém sempre com o mesmo formato e comprimento.
  2. Toda a massa, , do pêndulo está concentrada na ponta do braço a uma distância constante do eixo.
  3. Não existem outras forças a atuar no sistema senão a gravidade e a força que mantém o eixo do pêndulo fixo. (O movimento é portanto conservativo).
  4. O pêndulo realiza um movimento bidimensional no plano xy.

Note que a segunda lei de Newton fornece a seguinte equação diferencial ordinária não-linear conhecida como equação do pêndulo:

$$ \dfrac{d^2 \theta}{d t^2} + \dfrac{g}{L} \sin(\theta) = 0. $$

Uma versão simplificada (para pequenas oscilações em torno de um ponto de equilíbrio) pode ser definida tomando $\sin(\theta) \approx \theta$, produzindo:

$$ \dfrac{d^2 \theta}{d t^2} + \dfrac{g}{L} \theta = 0. $$

Será esta que vamos buscar uma solução através do SageMath.

︡aaf9e498-eecf-4fa1-8916-2e7346bbf39f︡{"html": "

[Exemplo 3: Equações Diferenciais Ordinárias] Pendulo Simples.

\n

 Denota-se o ângulo formado entre a vertical e o braço de pêndulo. Faz-se as seguintes hipóteses:

\n
    \n
  1. O braço é formado por um fio não flexível que se mantém sempre com o mesmo formato e comprimento.
  2. \n
  3. Toda a massa, m {\\displaystyle m\\,} \"\", do pêndulo está concentrada na ponta do braço a uma distância constante L {\\displaystyle L\\,} \"\" do eixo.
  4. \n
  5. Não existem outras forças a atuar no sistema senão a gravidade e a força que mantém o eixo do pêndulo fixo. (O movimento é portanto conservativo).
  6. \n
  7. O pêndulo realiza um movimento bidimensional no plano xy.
  8. \n
\n

Note que a segunda lei de Newton fornece a seguinte equação diferencial ordinária não-linear conhecida como equação do pêndulo:

\n

$$ \\dfrac{d^2 \\theta}{d t^2} + \\dfrac{g}{L} \\sin(\\theta) = 0. $$

\n

\"\"

\n

\"\"

\n

Uma versão simplificada (para pequenas oscilações em torno de um ponto de equilíbrio) pode ser definida tomando $\\sin(\\theta) \\approx \\theta$, produzindo:

\n

$$ \\dfrac{d^2 \\theta}{d t^2} + \\dfrac{g}{L} \\theta = 0. $$

\n

Será esta que vamos buscar uma solução através do SageMath.

"}︡ ︠c9245f19-6906-445b-be45-8b61b42f3215s︠ T,t=var('T,t') theta = function('theta', t) L = 4 ## Comprimento da corda. g = 9.8 ## acelaração da Gravidade b = g/L ##### Período do Pêndulo : T=2*pi*(L/g)^(1/2) print "t = ",T #### Equacão do Pêndulo ######## equacao =diff(theta,t,t)+b*theta==0 ##################################### ### Resolvendo a Equação Diferencial ### com condição inicial ### theta (0) = 2*pi/3 (i.e at t=0), ### theta'(0) = 1 (i.e angular velocity=1) ##################################### solucao = desolve_laplace(equacao, dvar=theta, ivar=t, ics=[0,2*pi/3,1]) theta(t)=solucao print "Solução da equação do pêndulo:" show(solucao) ### Plotando a solução para a condição inicial dada. plot(solucao,(0,T)) ︡4781be00-09cb-43e7-b392-932c862a62ce︡{"stderr":"\n\n*** WARNING: Code contains non-ascii characters ***\n\n\nError in lines 2-2\nTraceback (most recent call last):\n File \"/cocalc/lib/python2.7/site-packages/smc_sagews/sage_server.py\", line 1191, in execute\n flags=compile_flags), namespace, locals)\n File \"\", line 1, in \n File \"sage/calculus/var.pyx\", line 133, in sage.calculus.var.function (build/cythonized/sage/calculus/var.c:1608)\n def function(s, **kwds):\nTypeError: function() takes exactly 1 positional argument (2 given)\n"}︡{"done":true} ︠0a4ed722-4195-4c3e-b69c-a12c701027b3s︠ ### Vamos agora plotar o campo de vetores associado a este problema. ### Definindo a variavel auxiliar "y". y = var('y') ### Plotando o campo de vetores. plot_vector_field((y,-b*(x)), (x,-4,4),(y,-4,4)) ︡ee07d931-b0b7-40e6-9e57-b497d11bf50c︡{"stderr":"Error in lines 2-2\nTraceback (most recent call last):\n File \"/cocalc/lib/python2.7/site-packages/smc_sagews/sage_server.py\", line 1191, in execute\n flags=compile_flags), namespace, locals)\n File \"\", line 1, in \nNameError: name 'b' is not defined\n"}︡{"done":true} ︠444f68b2-3c3d-48da-88ce-ddb5f8e02ea8s︠ x,y,z=var('x y z') plot_vector_field3d((x*cos(z),-y*cos(z),sin(z)), (x,0,pi), (y,0,pi), (z,0,pi)) ︡3ac2e71a-1bf9-4d08-91ed-c7b83503cdd4︡{"file":{"filename":"b8e133a3-3910-4f16-a38a-a0f73c3233f6.sage3d","uuid":"b8e133a3-3910-4f16-a38a-a0f73c3233f6"}}︡{"done":true} ︠95edda0f-d72e-4c87-8d16-97433e3ca2e2︠