Você escreve matemática em LaTeX. O Sucuri lê como SymPy, e mostra o que entendeu — em matemática de livro, e em código que você pode copiar. Onde a notação deixa dúvida, ele pergunta em vez de adivinhar. É essa a única regra, e tudo aqui sai dela.
Todos os exemplos deste manual são executados pela suíte de testes a cada mudança. O que está escrito aqui como saída é a saída.
1. Escrever e executar
No caderno, escreva na célula e tecle
Shift+Enter. Cada célula que vira matemática ganha um
nome — eq1, eq2 — e é por ele que você se refere a ela
depois.
x^2 + 1
x**2 + 1
2. Quando ele pergunta
Nem toda notação diz o que significa. y'' pode ser a derivada
segunda de y, ou um símbolo chamado “y duas linhas” — as duas se
escrevem igual, e o Sucuri não escolhe por você:
y'' + y = 0
y'' → derivada de ordem 2 de y | símbolo chamado y''
Você responde clicando na leitura certa — ou, melhor, declarando, que responde de uma vez para o caderno inteiro.
3. Declarar
Declarar não escolhe entre as leituras: dissolve a dúvida. Se
y é função de x, então y' só pode ser
dy/dx — não há o que perguntar.
y = y(x)
y'' + y = 0
Eq(y(x) + Derivative(y(x), (x, 2)), 0)
u = u(t,x) | u é função de t e x |
e = euler | e é o número de Euler, não um símbolo |
a = símbolo | a não é função: a(x+1) é produto |
\mu, \nu = índices | índices tensoriais |
g = tensor(0,2) | o tipo do Schutz: 0 formas, 2 vetores |
Parêntese, como em livro. Escrito com o mesmo nome dos dois lados é
tautologia — ninguém escreve u = u(t,x) como equação —, e é essa
repetição que separa declaração de matemática: u(t,x) sozinho
continua sendo uma expressão.
4. Os verbos
São poucos e fechados de propósito. Se aqui se pudesse escrever Python, a ponte que este programa é deixaria de ser obrigatória — e sobraria um Jupyter com passos a mais.
resolver
Um verbo só; o objeto decide a conta. Equação diferencial vai ao solver de
EDO, com a solução conferida por substituição; equação
algébrica vai ao solve.
y = y(x)
y'' + y = 0
resolver(eq1)
Eq(y(x), C1*sin(x) + C2*cos(x))
e a linha conferência: substituída na equação, resto 0. Sem ela a resposta não se apresenta como conclusão.
avaliar
\int_0^1 x^2
avaliar(eq1)
1/3
com a aproximação ≈ 0,333333333333 ao lado —
nunca no lugar do valor exato.
Integral indefinida devolve a família, com a constante:
\int \sin x\,dx
avaliar(eq1)
-cos(x)
mostrado como −cos(x) + C: o resultado é a
família inteira, e o código copiável traz uma primitiva dela.
simplificar
\frac{x^2 - 1}{x - 1}
simplificar(eq1)
x + 1
exportar
O pedido mais honesto que um programa destes recebe: me dá o código que você usou. O que sai roda sozinho, sem o Sucuri.
y = y(x)
y'' + y = 0
exportar(eq1)
eq1 = Eq(y(x) + Derivative(y(x), (x, 2)), 0)
junto com as declarações de símbolos, a chamada do solver e a linha que confere a solução.
separar e conferir
Para equações a derivadas parciais. O pdsolve do SymPy resolve
pouco — a equação da onda ele não resolve —, mas separar variáveis e conferir
uma candidata resolvem o problema pela via clássica.
u = u(t,x)
c = símbolo
\frac{\partial^2 u}{\partial t^2} = c^2 \frac{\partial^2 u}{\partial x^2}
separar(eq1)
Eq(Derivative(T(t), (t, 2)), k*T(t))
e a equação em x, cada uma com a sua solução — e cada uma
com nome (eq2, eq3), para você continuar:
resolver(eq2).
Separar não resolve a equação, e o resultado diz isso: supõe que a solução é um produto. O que sai são os modos; a solução geral é a superposição deles, e a separação não prova que ela seja completa.
Já conferir faz o caminho inverso de resolver: você
propõe, ele testa.
u = u(t,x)
c = símbolo
F = F(z)
G = G(z)
\frac{\partial^2 u}{\partial t^2} = c^2 \frac{\partial^2 u}{\partial x^2}
u = F(x - c t) + G(x + c t)
conferir(eq1, eq2)
candidata verificada
d'Alembert: resto 0. Uma candidata errada sai como candidata NÃO verificada, com o resto que sobrou; e quando o conferidor não consegue testar, ele diz isso em vez de acusar.
5. O que cada resposta quer dizer
| estabelecida | conferida. Pode ser citada como conclusão. |
| sem fonte | o programa achou alguma coisa e não conseguiu confirmar. Não se apresenta como conclusão. |
| não aplicável | é dado, não conclusão — uma tabela, uma separação, um intermediário. |
E as cores: verde decidido ou conferido; âmbar veio de uma regra geral e ninguém olhou aquele caso; vermelho impede de seguir. Nota de alcance — “isto não resolve a equação” — é verde: a conta está certa, o que ela não faz é que precisava ser dito.
6. Quando ele não acha
y = y(x)
y'' = 6 y^2
resolver(eq1)
sem solução encontrada
com os padrões que o SymPy tentou, e o lembrete que
importa: não achar solução não é prova de que não existe.
Para essa outra pergunta existe o módulo korvin, que decide
não-integrabilidade por teoria de Galois — e que não acompanha a versão
online.
7. Tensores
Índice não é expoente, e o parser de LaTeX do SymPy não sabe a diferença:
sem declaração, A^\mu viraria A elevado a μ. Quem decide
é você:
\mu, \nu = índices
g = tensor(0, 2)
g_{\mu\nu} A^\mu A^\nu
g(-L_0, -L_1)*A(L_0)*A(L_1)
todos os índices contraídos. A valência aparece na tela, porque é a primeira coisa que se confere num tensor.
E a consistência vem junto — este é um erro de relatividade, não de digitação, e a olho ninguém vê:
\mu, \nu = índices
A^\mu B_\mu + C^\nu
os termos da soma têm índices livres diferentes
8. O caderno
| Novo | apaga o escrito e o acumulado |
| Abrir / Salvar | arquivo de texto, células separadas por %%; abre em
qualquer editor |
| Rodar tudo | refaz tudo a partir do escrito, na ordem |
| Reiniciar | joga fora só o acumulado: eq1 deixa de existir,
e nenhuma linha do que você escreveu se move |
Entre duas células há um + para inserir; no canto de cada uma, um × para apagar, com desfazer na faixa de aviso.
9. O que ele ainda não faz
Dizer isto é parte do trabalho. Nada abaixo falha em silêncio — tudo recusa com o motivo.
- Funções que o parser não conhece:
\operatorname{arsinh},\coth,\left\|·\right\|. O SymPy tem essas funções; o parser de LaTeX é que não as lê. - Derivada com índice (∂μ, ∇μ): não é um fator multiplicando outro, é um objeto próprio.
\frac{d}{dx}como operador não é sítio declarado: funciona porque a gramática do SymPy tem uma regra para ela, e onde essa regra não alcança o silêncio volta.- Sistemas de equações: um verbo por vez, uma equação por vez.
O código, as auditorias e a lista completa de limites estão em github.com/RafaelCRdeLima/SUCURI.