Esse notebook tem o objetivo introduzir algumas funcionalidades básica do SageMath. Como o curso durará apenas uma semana, e nosso objetivo será aplicar a ferramenta para resolver problemas de física, é imprescindível que você tenha uma familiaridade mínima com o ambiente do Sage. Faça testes, mude parâmetros, experimente as funcionalidades do guia de referência e anote suas dúvidas para que possamos discutir sobre elas no decorrer do curso. Embora a linguagem de programação adotada pelo Sage seja o Python, saber Python, apesar de útil, não será necessário para acompanhar o curso. Mas saber um pouco de física e matemática certamente será.
O documento que você está lendo é um notebook jupyter, ele contém contém textos explicativos e códigos de Sage intercalados. O jupyter é um ambiente bastante versátil e poderoso, discutiremos um pouco sobre ele no curso. Em um notebook, as unidades básicas de texto ou código são chamadas de células. O importante agora é entender o funcionamento básico delas. É aqui que você entrará com os comandos sage, códigos Python, texto, códigos latex, html, etc. Vamos focar nos comandos Sage nesse momento. As células de código vêm precedidas por [ ]
. Para executar o comando contido em uma célula basta pressionar SHIFT+ENTER. Experimente agora na célula abaixo. Digite sin(pi/2) - sqrt(8)
, ou plot(exp(-x^2),(x,-3,3))
, por exemplo.
Digite agora show(sin(pi/2) - sqrt(8))
. Percebe alguma diferença?
Outra forma de avaliar o conteúdo de uma célula é usar o botão "Run" na barra de ferramentas do jupyter (como no vídeo sobre a instalação/cocalc).
Assim como em Python, no Sage o símbolo =
é o operador usado para atribuição. Ou seja, a operação de guardar um valor em uma variável Python. Os símbolos ==
, <=
, >=
, <
e >
são usandos para comparação. Teste os comandos a=2;a
, a>3
, a<=4
, a==2
.
Algumas expressões matemáticas retornam valores simbólicos 'exatos', como sin(1)
, em vez de aproximações numéricas. Para obter uma apreximação numérica, use a função n
ou o método n
(ambos
possuem um nome longo, numerical_approx
, e a função N
é o mesma que n
). Essas funções aceitam o argumento opcional digits
, que é o número de dígitos decimais de precisão requisitado.
Teste isso digitando os comandos exp(2)
, n(exp(2))
, sin(10).n(digits=5)
, N(sin(10), digits=10)
ou numerical_approx(pi, digits=100)
.
O Python é uma linguagem de tipagem dinâmica, isso significa que cada variável possui um tipo associado, mas uma mesma variável pode receber dados de diferentes tipos.
a = 5 # a é um inteiro
type(a)
a = 5/3 # agora é um racional
type(a)
a = 'Olá' # agora uma string
type(a)
a = tan(x) # e agora uma expressão simbólica
type(a)
As linguagens de programação C e Java, por exemplo, são de tipagem estática. Portanto uma variável que foi declarada como int pode apenas armazenar números inteiros.
Além das variáveis Python, responsáveis por guardar alguma informação na memória, existem as variáveis simbólicas, usadas nos cálculos simbólicos que faremos durante todo o curso. Variáveis simbólicas precisam ser declaradas. Exceto x
, que já é pré declarada. Declare as variáveis simbólicas y
e z
usando o comando var('y,z')
. Defina agora alguma expressão com as variáveis simbólicas disponíveis, como 1/(x^2-y^2)
.
A função solve
resolve equações. Para usá-la, as variáveis simbólicas utilizadas na equação já precisam ter sido declaradas. Os argumentos da função solve
são uma equação (ou um sistema de equações), e a variável ou variáveis para as quais resolver. Tente solve(x^2 + 3*x + 2==0, x)
, solve([x^2 + y*x + z == 0],x)
ou solve([x+y==6, x-y==4], x, y)
. Teste alguns comandos do guia de referência rápida.
A forma mais simples é digitando o nome de uma função do Sage seguida por um ponto de interrogação. Teste cos?
ou plot?
.
Se ao invés de ?
você digitar ??
, o Sage mostrará o código fonte daquela função.
Tutorial oficial de funcionalidades básicas (em português): https://doc.sagemath.org/html/pt/tutorial/index.html
Tutoriais temáticos: https://doc.sagemath.org/html/en/thematic_tutorials/index.html
Manual de referência: https://doc.sagemath.org/html/en/reference/index.html
Excelente referência tanto para Sage quanto para o básico de Python para Sage (grátis):
Outra boa referência, em espanhol, focada em estudantes de graduação (grátis):
Livro recente em português, editado pela sociedade brasileira de matemática (esse eu ainda não conheço):
%display latex
Gaussiana
a. Verifique que ∞∫−∞e−12x2dx=√2π
b. Defina a variável simbólica "a". Assuma a>0 e determine ∞∫−∞e−12ax2dx
Oscilador amortecido
a. Oscilador amortecido m¨y(t)+b˙y(t)=−ky(t).
Para resolver a EDO você precisará:
desolve
.A sintáxe do comando é desolve(equação, dvar, ivar=t)
, onde dvar
é a variável dependente e ivar=t
indica que a variável independente e t. Use a ajuda desolve?
se necessário.
b. Suponha que um sistema mecânico seja governado por pela equação diferencial ¨y(t)+15˙y(t)=−14y(t).
Para incluir as condições iniciais, use desolve(equação, dvar, ics=[t_0, y(t_0), y'(t_0)])
, onde t_0, y(t_0), y'(t_0)
são as tais condições.
c. Plote um gráfico da solução encontrada no intervalo 0<t<50. Dica: guarde a solução da equação diferencial em uma variável Python (por ex. sol = desolve(...)
)