︠4ecd5d76-4a84-485d-8076-aac40c86a98ai︠ %html
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.
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": "\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:
\nPacotes de matemática contidos no SageMath
\nÁlgebra | \nGAP, Maxima, Singular, Macaulay 2 | \n
Geometria algébrica | \nSingular, Macaulay 2 | \n
Aritmética de precisão arbitrária | \nMPIR, MPFR, MPFI, NTL, mpmath | \n
Geometria aritmética | \nPARI/GP, NTL, mwrank, ecm | \n
Cálculo | \nMaxima, SymPy, GiNaC | \n
Combinatória | \nSymmetrica, Sage-Combinat | \n
Álgebra linear | \nATLAS, BLAS, LAPACK, NumPy, LinBox, IML, GSL | \n
Teoria dos gráficos | \nNetworkX | \n
Teoria dos grupos | \nGAP | \n
Computação numérica | \nGSL, SciPy, NumPy, ATLAS, Scilab, GNU_Octave | \n
Teoria dos números | \nPARI/GP, FLINT, NTL, Kash/Kant | \n
Computação estatística | \nR, 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.
\nVejamos alguns exemplos para por em prática nossos conhecimentos de Python + SageMath.
\n\nSabemos 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$$
\nComo 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 .$$
\nVamos 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":"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": "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︠ %htmlDada 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": "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}$$
\npermutando 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}.$$
\nPara nos ajudar na legenda, vamos denotar $A = P_{12}$, $B = P_{13}$ e $C = P_{23}$.
\nDada uma matriz arbitrária
\n$$M = \\begin{pmatrix} a & b & c \\\\ d & e & f \\\\ g & h & i \\end{pmatrix},$$
\nUsando 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":"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": "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\nNeste 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:
\nUma 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︠ %htmlDenota-se o ângulo formado entre a vertical e o braço de pêndulo. Faz-se as seguintes hipóteses:
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": "Denota-se o ângulo formado entre a vertical e o braço de pêndulo. Faz-se as seguintes hipóteses:
\nNote 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\nUma 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. $$
\nSerá 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