Documentação / Formas / Expressão

Forma Expressão

A forma Expressão é o coração matemático de qualquer modelo do Modellus. É aí que defines as equações, os parâmetros, as equações diferenciais, as recorrências e as condições que comandam a simulação.

Forma Expressão no quadro, com equações visíveis

Visão geral

Uma forma Expressão contém uma ou mais instruções matemáticas escritas numa sintaxe parecida com LaTeX, num campo matemático MathLive. Cada instrução ocupa uma linha. Todas as formas Expressão de um modelo partilham o mesmo sistema de cálculo — os nomes dos termos têm de ser únicos em todas as formas.

Usa várias formas Expressão pequenas, agrupadas por tema (parâmetros, equações, grandezas derivadas), para manteres o teu modelo organizado e fácil de ler.

Ler uma expressão

Quando uma forma tem duas ou mais equações, elas aparecem como um único bloco com uma só coluna de sinais de igual: os primeiros membros ficam alinhados à direita contra o sinal de igual, os segundos membros ficam alinhados à esquerda a seguir a ele, e o bloco fica centrado no cartão. Só o sinal de igual principal de cada linha é alinhado — um sinal de igual dentro de uma condição, de uma fração ou de parênteses fica onde está. Uma forma com uma única equação aparece como antes. O alinhamento é só apresentação: o modelo continua a guardar uma linha simples por equação.

Três formas Expressão com equações alinhadas e cores com significado

Cada parte de uma expressão tem a cor do que significa:

Quando o modelo não consegue ler uma linha, isso aparece no próprio cartão, e não escondido atrás de um passar do cursor. A linha fica escrita a vermelho e atravessada por uma faixa, o cartão ganha um contorno vermelho para se distinguir de longe no quadro, e um painel no fundo do cartão explica porquê, no idioma em que está o resto do editor. Quando falta alguma coisa na linha — um valor, um parêntese — aparece um espaço tracejado no sítio onde devia estar, tal como se desenha um espaço por preencher de uma estrutura matemática; quando a peça em falta está dentro de uma fração ou de uma raiz, é essa fração ou raiz que fica sublinhada, porque não é possível indicar o sítio com mais rigor do que o símbolo que o contém. Um símbolo que não pode estar onde foi escrito fica sublinhado nesse sítio. O painel abre sempre que vais ao cartão — com o cursor por cima, com o cartão selecionado ou com o cursor de escrita lá dentro — e mostra só as explicações, sem título por cima e sem o nome da linha à frente de cada uma: apontar para uma explicação ilumina a linha a que pertence, e clicar nela põe lá o cursor de escrita. As linhas são verificadas à medida que escreves, e não só quando sais, exceto a linha onde está o cursor de escrita: uma linha está a meio enquanto a estás a escrever, por isso fica em paz até saíres dela.

As cores indicam uma família, não um tom fixo. Cada uma é lida dos tokens de tema --math-* e depois ajustada ao cartão onde é pintada: a tonalidade mantém-se, a luminosidade muda até o texto se destacar bem do fundo e, ao mesmo tempo, a cor fica mais intensa. Num cartão branco as cores ficam escuras e saturadas; num cartão preto ou cinzento-escuro ficam claras e vivas; se mudares a cor do cartão, a expressão é logo pintada de novo. Todas as cores mantêm pelo menos o contraste exigido pelas normas de acessibilidade, e os operadores ficam um pouco mais discretos do que as variáveis. O cursor de escrita e o realce da seleção seguem a mesma regra, tal como a cor do texto do cartão, que é a que desenha os parênteses, os traços de fração e os sinais de raiz: fica exatamente como a escolheste e só é avivada quando o cartão a iria esconder. Nada disto chega ao modelo: uma expressão guardada ou copiada nunca leva cor.

Barra de ferramentas

Barra de ferramentas da forma Expressão com a cor, os atalhos e o botão de eliminar

A barra de ferramentas aparece quando selecionas uma forma Expressão. Tem:

Tipos de instruções

Cada linha de uma forma Expressão é lida como um destes tipos de instrução:

Tipo Sintaxe Exemplo Descrição
Parâmetro name = value g = 9.8 Um valor constante. Não depende de outros termos nem da variável independente.
Função name = expression E = ½·m·v² Um valor calculado que depende de outros termos ou da variável independente.
Diferencial dx/dt = expression dx/dt = v Equação diferencial ordinária de primeira ordem. Precisa de um valor inicial nas propriedades da forma.
Recorrência x_{n} = expression x_{n} = x_{n-1} + v·Δt Define o valor passo a passo. O índice indica o desfasamento em passos.
Condicional name = \begin{cases}...\end{cases} v = { 0 & t=0 \\ a·t & otherwise } Definição por ramos. São precisos pelo menos dois ramos.
Função com argumento f(t) = expression h(t) = v₀·t - ½·g·t² Notação com o argumento explícito (só visual; comporta-se como uma Função).
Apresentação expression F = ma Apenas uma etiqueta visual. Não é calculada.

Operadores aritméticos

Operador LaTeX Tecla Descrição
Adição++Soma de duas expressões
Subtração--Diferença de duas expressões
Multiplicação\cdot*Multiplicação explícita (símbolo ·)
Multiplicação implícita2x2xCoeficiente seguido de um nome ou de um parêntese
Divisão em linha//Notação a/b na mesma linha
Fração\frac{a}{b}/ (na posição do numerador)Fração vertical, com boa apresentação
Potência^{n}^Potenciação
Fatorialx!!Fatorial pós-fixo para inteiros não negativos
Raiz quadrada\sqrt{x}\sqrtRaiz quadrada
Simétrico-x-Sinal menos unário

Nota sobre o fatorial: o fatorial usa notação pós-fixa (n!) e destina-se a valores inteiros não negativos.

Operadores de comparação

Usados nos ramos das condições (\begin{cases}):

Operador LaTeX Significado
==Igual a
>>Maior do que
<<Menor do que
≥\ge ou \geqMaior ou igual a
≤\le ou \leqMenor ou igual a
≠\neqDiferente de

As condições podem ser encadeadas (por exemplo, 0 < x < 1) ou combinadas com \lor (OU) e \land (E). A palavra-chave \text{otherwise} funciona como o ramo «caso contrário».

Funções predefinidas

Categoria Função LaTeX Argumentos
TrigonométricasSeno\sin\left(x\right)1
Cosseno\cos\left(x\right)1
Tangente\tan\left(x\right)1
Cotangente\cot\left(x\right)1
Secante\sec\left(x\right)1
Cossecante\csc\left(x\right)1
Trigonométricas inversasArco-seno\arcsin\left(x\right)1
Arco-cosseno\arccos\left(x\right)1
Arco-tangente\arctan\left(x\right)1
HiperbólicasSeno hiperbólico\sinh\left(x\right)1
Cosseno hiperbólico\cosh\left(x\right)1
Tangente hiperbólica\tanh\left(x\right)1
LogarítmicasLogaritmo neperiano\ln\left(x\right)1
Logaritmo de base 10\log\left(x\right)1
Com dois argumentosMáximo\max\left(a, b\right)2
Mínimo\min\left(a, b\right)2
Resto da divisão\mod\left(a, b\right)2
UtilitáriasSinalsign\left(x\right)1 — devolve -1, 0 ou 1
Valor aleatóriornd\left(x\right)1 — número real aleatório em [0, x]
Valor aleatório inteiroirnd\left(x\right)1 — número inteiro aleatório em [0, x]
Parte inteiraint\left(x\right)1 — trunca para inteiro
Arredondarround\left(x\right)1 — arredonda ao inteiro mais próximo
OutrasDeterminante\det\left(x\right)1
Todas as chamadas de funções usam os delimitadores \left( e \right). Parênteses simples não são válidos nas chamadas de funções. O campo matemático insere-os automaticamente.

Constantes

NomeLaTeXValor
Pi\pi3.14159…
Número de Eulere ou \E2.71828…
g não é uma constante predefinida. Define-a como parâmetro: g = 9.8.

Sintaxe especial

Diferença finita (Δ)

SintaxeSignificado
\Delta xx(atual) − x(anterior). Para a variável independente: o tamanho do passo.
\Delta\left(expr\right)Diferença finita aplicada a uma subexpressão.

Índices (referências a passos)

SintaxeSignificado
x_{n-1}Valor de x na iteração anterior
x_{n}Iteração atual (primeiro membro da recorrência)
x_0Valor inicial de x (algarismo simples, sem chavetas)
x_{0}Valor inicial (forma com chavetas)

Termos indexados (referências a elementos)

Um termo pode representar muitos valores ao mesmo tempo — os osciladores de uma onda, por exemplo — se for definido em função de um índice de elemento em vez do tempo. O índice fica ligado pela atribuição, por isso nunca se torna uma variável do modelo:

y\left[i\right] = A\cdot\cos\left(k\cdot i - \omega\cdot t\right)
SintaxeSignificado
y\left[i\right] = …Define y em função dos índices de elemento; a expressão é calculada uma vez por cada elemento pedido
y\left[3\right]Elemento 3 de y
y\left[i\right]Elemento i, sendo i uma expressão qualquer
s = y + zSobreposição: s também é indexado, somado elemento a elemento

Este é um terceiro espaço de índices, além dos dois anteriores: y_3 lê y na iteração 3 e y\left(3\right) lê-o quando a variável independente vale 3, enquanto só os parênteses retos leem um elemento. Um termo indexado não tem um valor único, por isso lê-se pelos seus elementos em vez de aparecer como um número.

O objeto Osciloscópio lê-os: indica os termos indexados nas suas Ondas e cada um é desenhado sobre a grelha, um traço por linha. Duas ondas progressivas somadas assim — uma com -\omega\cdot t, outra com +\omega\cdot t — dão uma onda estacionária com nodos fixos. O Piano publica um: o acorde que está a tocar, um elemento por amostra.

O objeto Onda mecânica funciona, em vez disso, a partir de um termo simples. Indica na sua linha Onda um termo que o próprio modelo calcula — y=A\cdot\sin\left(\omega\cdot t\right) — e a cadeia repete o que esse termo tem estado a fazer: em cada iteração, o primeiro oscilador recebe o valor que o termo acabou de tomar e cada um passa o seu ao seguinte, por isso a cadeia guarda os últimos valores da simulação, o mais antigo na ponta mais afastada, e o movimento propaga-se ao longo dela à medida que a simulação avança. Guarda um valor por oscilador, por isso as Amostras indicam também até onde recua no tempo. Se escreveres um nome que o modelo não define, o objeto faz o contrário: calcula a onda a partir da sua amplitude, frequência, velocidade e fase e entrega ao modelo, com esse nome, o que o seu oscilador de referência está a fazer. O nome passa a ser um termo do modelo — aparece em todas as listas de termos, tal como um nome a que o modelo atribui um valor — por isso pode ser representado num gráfico em função do tempo, usado numa definição (z=2\cdot y) e somado à leitura de outro objeto (s=forward+back). Um nome que o modelo define pertence ao modelo — uma atribuição, em função do tempo ou dos índices de elemento, é lida e não substituída — e um objeto retirado do quadro leva consigo o seu termo.

Anotação de unidades

Acrescenta unidades, só para apresentação, depois de qualquer instrução:

v = 10 \quad\textcolor{gray}{\mathrm{m/s}}

As unidades são apenas visuais — o motor de cálculo não as verifica nem as converte.

Nomes com ponto (referências a formas contidas)

Faz referência a termos de formas contidas num Referencial: body.x, particle.velocity.

Atalhos de teclado

O campo matemático MathLive aceita estes atalhos de teclado para escreveres mais depressa:

AçãoAtalhoResultado
Abrir a paleta de estruturas ⌘. (macOS) · Ctrl+. (Windows/Linux) Escolhe uma estrutura matemática na paleta compacta
Potência (expoente) ^ x^2
Índice _ x_{t-1}
Simétrico ~ -x
Fatorial ! n!
Raiz quadrada # \sqrt{x}
Delta % \Delta x
Valor absoluto | \left|x\right|
Diferente <> x \ne y
Maior ou igual >= x \ge 1
Menor ou igual <= x \le 1
Condição (por ramos) \ \begin{cases} 1 & t=0 \\ y & t\ge2 \end{cases}
Ou ⌥v (macOS) · Alt+v (Windows) x>0 \lor x<5
E ⌥^ (macOS) · Alt+^ (Windows) x>0 \land x<5
Estrutura de derivada ⌥/ (macOS) · Alt+/ (Windows) \frac{dx}{dt}
Arredondamento por defeito ⌥_ (macOS) · Alt+_ (Windows) \lfloor x \rfloor
Arredondamento por excesso ⌘_ (só macOS) \lceil x \rceil
Fração ⌘/ (macOS) · Ctrl+/ (Windows) \frac{a}{b}
Ponto de multiplicação * a \cdot b
Nova linha (nova instrução) Enter —
Sair / espaço seguinte por preencher Tab —

Atalhos

Forma Expressão selecionada, com a barra de ferramentas visível

Enquanto escreves, carrega em ⌘. no macOS ou Ctrl+. no Windows/Linux para abrires a paleta de atalhos. Também a podes abrir com o botão da barra de ferramentas.

Notação de integral

Podes escrever integrais em notação LaTeX, como \int_{a}^{b} f\left(x\right)\,\mathrm{d}x. Para obteres a parte inteira, usa a função utilitária int\left(x\right).

Painel de propriedades

Painel de propriedades da forma Expressão

Quando uma forma Expressão está selecionada, o painel de propriedades mostra:

PropriedadeDescrição
Variável independenteA variável da iteração (por predefinição, t)
PassoO incremento em cada iteração (Δt)
Início / FimIntervalo da variável independente
Valores iniciaisValores de partida das equações diferenciais e das recorrências
CenáriosVários conjuntos de valores iniciais, para estudares o efeito dos parâmetros

Exemplos

Cinemática simples

g = 9.8
v₀ = 20
θ = 45
vx = v₀·\cos\left(θ\right)
vy = v₀·\sin\left(θ\right) - g·t
\frac{dx}{dt} = vx
\frac{dy}{dt} = vy

Crescimento de uma população (recorrência)

r = 0.05
P_{n} = P_{n-1}·\left(1 + r\right)

Velocidade definida por ramos

v = \begin{cases} 0 & t = 0 \\ a·t & 0 < t < 5 \\ a·5 & \text{otherwise} \end{cases}