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.
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.
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.
Cada parte de uma expressão tem a cor do que significa:
- Variáveis — azul-escuro
- Números — laranja
- Operadores, relações e parênteses — cinzento neutro
- Funções como
sin,lnousqrt— verde - Derivadas — o
ddedx/dt, os sinais de derivada parcial, as plicas e as derivadas com ponto — magenta - Índices qualificadores como o
cdeK_c— azul-claro - Índices de iteração como o
ndex_n— roxo - Os termos com que o modelo avança — o termo independente
te o termo da iteraçãon, sempre que aparecem sozinhos — roxo, a mesma cor que já têm como índice - Linhas que o modelo não consegue ler — vermelho, com a indicação do sítio do problema (ver abaixo)
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
A barra de ferramentas aparece quando selecionas uma forma Expressão. Tem:
- Cor — Muda a cor de destaque da forma
- Atalhos — Insere rapidamente estruturas matemáticas comuns
- Eliminar — Remove a forma do quadro
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ícita | 2x | 2x | Coeficiente 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 |
| Fatorial | x! | ! | Fatorial pós-fixo para inteiros não negativos |
| Raiz quadrada | \sqrt{x} | \sqrt | Raiz 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 \geq | Maior ou igual a |
| ≤ | \le ou \leq | Menor ou igual a |
| ≠ | \neq | Diferente 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étricas | Seno | \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 inversas | Arco-seno | \arcsin\left(x\right) | 1 |
| Arco-cosseno | \arccos\left(x\right) | 1 | |
| Arco-tangente | \arctan\left(x\right) | 1 | |
| Hiperbólicas | Seno hiperbólico | \sinh\left(x\right) | 1 |
| Cosseno hiperbólico | \cosh\left(x\right) | 1 | |
| Tangente hiperbólica | \tanh\left(x\right) | 1 | |
| Logarítmicas | Logaritmo neperiano | \ln\left(x\right) | 1 |
| Logaritmo de base 10 | \log\left(x\right) | 1 | |
| Com dois argumentos | Má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árias | Sinal | sign\left(x\right) | 1 — devolve -1, 0 ou 1 |
| Valor aleatório | rnd\left(x\right) | 1 — número real aleatório em [0, x] | |
| Valor aleatório inteiro | irnd\left(x\right) | 1 — número inteiro aleatório em [0, x] | |
| Parte inteira | int\left(x\right) | 1 — trunca para inteiro | |
| Arredondar | round\left(x\right) | 1 — arredonda ao inteiro mais próximo | |
| Outras | Determinante | \det\left(x\right) | 1 |
\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
| Nome | LaTeX | Valor |
|---|---|---|
| Pi | \pi | 3.14159… |
| Número de Euler | e ou \E | 2.71828… |
g não é uma constante predefinida. Define-a como parâmetro: g = 9.8.
Sintaxe especial
Diferença finita (Δ)
| Sintaxe | Significado |
|---|---|
\Delta x | x(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)
| Sintaxe | Significado |
|---|---|
x_{n-1} | Valor de x na iteração anterior |
x_{n} | Iteração atual (primeiro membro da recorrência) |
x_0 | Valor 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)
| Sintaxe | Significado |
|---|---|
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 + z | Sobreposiçã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ção | Atalho | Resultado |
|---|---|---|
| Abrir a paleta de estruturas | ⌘. (macOS) · Ctrl+. (Windows/Linux) | Escolhe uma estrutura matemática na paleta compacta |
| Potência (expoente) | ^ | |
| Índice | _ | |
| Simétrico | ~ | |
| Fatorial | ! | |
| Raiz quadrada | # | |
| Delta | % | |
| Valor absoluto | | | |
| Diferente | <> | |
| Maior ou igual | >= | |
| Menor ou igual | <= | |
| Condição (por ramos) | \ | |
| Ou | ⌥v (macOS) · Alt+v (Windows) | |
| E | ⌥^ (macOS) · Alt+^ (Windows) | |
| Estrutura de derivada | ⌥/ (macOS) · Alt+/ (Windows) | |
| Arredondamento por defeito | ⌥_ (macOS) · Alt+_ (Windows) | |
| Arredondamento por excesso | ⌘_ (só macOS) | |
| Fração | ⌘/ (macOS) · Ctrl+/ (Windows) | |
| Ponto de multiplicação | * | |
| Nova linha (nova instrução) | Enter | — |
| Sair / espaço seguinte por preencher | Tab | — |
Atalhos
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.
- Equações diferenciais (dx/dt = ..., atalho: ⌥ + / no macOS, Alt + / no Windows)
- Recorrências (x_n = x_{n-1} + ...)
- Funções definidas por ramos
- Estrutura do arredondamento por defeito
\lfloor x\rfloor - Estrutura do arredondamento por excesso
\lceil x\rceil - Fórmulas de física comuns
- Identidades trigonométricas
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
Quando uma forma Expressão está selecionada, o painel de propriedades mostra:
| Propriedade | Descrição |
|---|---|
| Variável independente | A variável da iteração (por predefinição, t) |
| Passo | O incremento em cada iteração (Δt) |
| Início / Fim | Intervalo da variável independente |
| Valores iniciais | Valores de partida das equações diferenciais e das recorrências |
| Cenários | Vá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}