Pular para o conteúdo
Guia do Varlig
Página inicial do Varlig

Matemática avançada: recursos e limites

Esta página resume a matemática avançada em Varlig Calc: listas, vetores e matrizes, números complexos, somas e produtos, resolução de equações e cálculo. Para cada recurso, ele lista o que as funções fazem, o que elas aceitam, quão exatas são as respostas e onde estão os limites. Use-o para verificar os detalhes quando uma resposta o surpreender.

Para introduções com mais exemplos, consulte os guias: Listas e estatísticas, Vetores e matrizes, Números complexos e Sumação, resolução de equações e cálculo.

De relance

Recurso Exemplo Resposta
Lista [1, 2+3, 4*2] [1, 5, 8]
Item de uma lista [10, 20, 30][1] 20
Item de uma lista aninhada [[1,2],[3,4]][1][0] 3
Total de quantidades sum([1 kg, 500 g]) 1.5 kg
Estatísticas average([1,2,3]), median([5,1,3]) 2, 3
Intervalo em ordem decrescente range(5, 1, -2) [5, 3, 1]
Adicionando listas [1,2] + [3,4] [4, 6]
Produto de matriz [[1,2],[3,4]] * [[1,0],[0,1]] [[1, 2], [3, 4]]
Inversa inverse([[1,2],[3,4]]) [[-2, 1], [1.5, -0.5]]
Determinante det([[1,2],[3,4]]) -2
Transposta transpose([[1,2],[3,4]]) [[1, 3], [2, 4]]
Sistema linear solve_system([[2,1],[1,2]], [34,29]) [13, 8]
Aritmética complexa (2+3i) * (2-3i) 13
Raiz quadrada complexa sqrt(complex(-4,0)) 2i
Valor mais comum mode([1,2,2,3]) 2
Percentil percentile([1,2,3,4],25) 1.75
Desvio padrão da população population_stddev([1,2,3,4]) 1.1180339887
Soma sobre um intervalo sum(k^2, k, 1, 10) 385
Produto em um intervalo product(k, k, 1, 5) 120
Resolva uma equação exatamente solve(x^2 - 5x + 6 = 0) [2, 3]
Resolva uma equação no intervalo solve(x^2 = 4, x, 0, 3) 2
Derivada simbólica differentiate(sin(x), x) cos(x)
Derivada em um ponto derivative(x^3, x, 2) 12
Integral definida integrate(x^2, x, 0, 3) 9

Listas, matrizes e números complexos são valores comuns. Você pode dar nomes a eles, passá-los para as funções que você definir, e eles recalculam quando você editar uma linha anterior.

calc
squares(n) = sum(k^2, k, 1, n)
squares(3) resulta em 14
first(items) = items[0]
first([10, 20]) resulta em 10
root(y) = solve(x^2 = y, x, 0, 10)
root(9) resulta em 3

O que o motor garante

Todos os recursos desta página seguem uma regra: o cálculo produz uma resposta que o Varlig pode garantir ou mostra um erro explicando por que não consegue. Ele nunca troca silenciosamente um cálculo exato por um número apenas plausível.

Quão exata é uma resposta?

Calculado como O que isso cobre?
Frações exatas Coeficientes da equação e a raiz de uma equação linear; raízes de uma equação quadrática cujo discriminante é um quadrado perfeito; operações matriciais +, -, *, multiplicação por um número, transpose, det, inverse, rank e solve_system; median, mode, modes, percentile, quartile e as três formas de variância
Raiz quadrada decimal stddev, sample_stddev, population_stddev e as raízes de qualquer outra equação quadrática
Ponto flutuante binário eigenvalues, qr, lu, svd, integrate e solve com quatro argumentos

Exato significa exato: nada é arredondado entre a interpretação da linha e a exibição da resposta. Assim, uma resposta exata mantém essa propriedade ao ser nomeada, armazenada e reutilizada. Uma resposta aproximada usa a mesma representação decimal de precisão limitada retornada por sqrt. Ela não tem garantia de arredondamento correto até o último dígito exibido, então comparar dois resultados aproximados com == não é um teste confiável: solve(x^2 - 2 = 0) e sqrt(2) exibem 1.4142135624, mas não são iguais.

Uma resposta nunca mistura os dois tipos. Uma equação quadrática cujo discriminante não é um quadrado perfeito tem ambas as raízes aproximadas.

Unidades

Operação Regra
Matrizes Apenas números simples; unidades, dinheiro e entradas complexas são recusadas
Equações Apenas números simples, em ambos os lados
median, mode, modes, percentile, quartile, stddev, population_stddev Uma dimensão consistente, ou números simples. Unidades compatíveis são lidas na unidade do primeiro valor, e a resposta a mantém
variance, sample_variance, population_variance Apenas números simples: a variância eleva as observações ao quadrado, e nenhuma unidade é mantida nesse cálculo

Misturar valores que têm unidades com valores que não têm é um erro, em vez de uma leitura silenciosa dos números nus, com uma exceção de longa data: um 0 nu conta na unidade dos outros.

O que é recusado

Nenhum deles dá um valor numérico ou uma frase. Cada um é um erro que nomeia o que não pode fazer e, onde houver um, o formulário suportado para escrever em vez disso:

  • Uma equação polinomial de grau superior a 2, uma equação não polinomial, a incógnita em um divisor ou expoente, dois nomes sem valor definido, uma equação sem incógnita ou uma equação com unidades ou dinheiro. Em todos esses casos, a mensagem indica o uso de solve numérico com quatro argumentos.
  • Uma equação sem raiz real gera um erro, em vez de fornecer uma raiz complexa; uma equação satisfeita por todos os valores também gera um erro, em vez de escolher um deles.
  • Uma operação de matriz com dimensões incompatíveis ou não quadradas, um inverso de uma matriz singular ou uma entrada que não é um número simples.
  • mode quando nenhum valor se repete ou quando há empate, um percentil fora do intervalo de 0 a 100, um quartil fora do intervalo de 0 a 4 e qualquer estatística diferente de sum, product e count em uma lista vazia.

Não suportado em nenhum lugar, por design: rearranjo simbólico além da coleta de coeficientes polinomiais, sistemas não lineares simultâneos, raízes complexas de uma equação real, matrizes de unidades ou dinheiro, integração simbólica e plotagem.

As mensagens em si estão listadas em Erros, diagnósticos e limites.

Como escrever listas e funções matemáticas

  • Vírgulas separam itens e argumentos. Uma vírgula seguida de um espaço sempre separa valores; uma vírgula seguida de exatamente três dígitos agrupa milhares, então [1,200, 1,800] tem dois itens. Sem espaços, cada vírgula separa, como em [12,-51,4]. Quando as duas interpretações são possíveis, como em [1,234], o erro mostra as duas formas de escrever a expressão. Use ponto decimal para a parte fracionária de um número.
  • Matrizes são listas de linhas, como [[1,2],[3,4]]. Não há abreviação de ponto e vírgula como [1,2;3,4].
  • Os índices começam em 0 e devem ser números inteiros não negativos. Um índice além do fim da lista gera um erro; ele nunca volta ao início nem é reduzido para caber.
  • As contagens de argumentos são verificadas. sqrt(4,9) é um erro e não um palpite.

Listas e estatística

Estas funções aceitam uma lista: length ou count, sum, product, average ou mean, median, min, max, mode e modes, percentile e quartile, além das funções de dispersão variance, sample_variance, population_variance, stddev, sample_stddev e population_stddev.

  • mode só retorna uma resposta quando um único valor é estritamente o mais frequente. Um empate ou uma lista sem repetições gera um erro que sugere modes, median ou average. modes retorna todos os valores de maior frequência.
  • percentile(list, rank) recebe uma posição de 0 a 100 e interpola linearmente entre as duas posições mais próximas, usando a definição inclusiva: o percentil 50 é a mediana, e os percentis 0 e 100 são o menor e o maior valor. quartile(list, k) recebe um k inteiro de 0 a 4 e equivale a percentile(list, 25k).
  • variance e stddev são as formas de amostra, divididas por n - 1 e precisando de dois valores. population_variance e population_stddev dividem por n e precisam de um. sample_variance e sample_stddev são nomes mais longos para os curtos.
  • Uma lista vazia tem uma sum de 0, um product de 1 e uma count de 0. Outras estatísticas de uma lista vazia são erros.
  • Duas listas do mesmo comprimento somam e subtraem item por item. Você pode multiplicar ou dividir uma lista por um valor numérico e comparar duas listas com ==.
  • range(start, end, step) inclui os dois extremos. O incremento é opcional.
  • dot(a, b) multiplica dois vetores reais.
calc
spend = [420, 385, 510, 460] resulta em [420, 385, 510, 460]
sum(spend) resulta em 1,775
average(spend) resulta em 443.75
median(spend) resulta em 440
spend[0] resulta em 420
spend * 1.1 resulta em [462, 423.5, 561, 506]
range(0, 1, 0.25) resulta em [0, 0.25, 0.5, 0.75, 1]

Transformações de listas

Chamada Resposta O que faz
sort([3,1,2]) [1, 2, 3] Classifica números sem unidades em ordem crescente; itens iguais mantêm sua ordem
reverse([1,2,3]) [3, 2, 1] Inverte qualquer lista
unique([3,1,3,2]) [3, 1, 2] Mantém o primeiro de cada valor; os itens devem corresponder exatamente, unidades incluídas
slice([10,20,30,40], 1, 3) [20, 30] Leva itens do índice inicial até, mas não incluindo, o índice final
map(x^2, x, [1,2,3]) [1, 4, 9] Avalia a expressão para cada item
filter(x > 1, x, [1,2,3]) [2, 3] Mantém os itens onde a condição é verdadeira
variance([1,2,3]) 1 Variância exata da amostra, dividindo por um a menos do que a contagem
  • slice precisa de números inteiros onde 0 ≤ início ≤ fim ≤ o comprimento da lista. Outros limites são erros.
  • variance precisa de pelo menos dois números sem unidades.
  • map e filter pegam a expressão primeiro, depois o nome a ser usado para cada item, depois a lista. O nome só se aplica dentro da chamada, portanto, não altera um nome que você definiu em outro lugar. A expressão em filter deve dar true ou false.

Vetores e matrizes

Vetores são listas planas e matrizes são listas de linhas. As matrizes devem ser retangulares, conter números reais sem unidades e ter de 1 a 32 linhas e colunas.

Função O que faz
A * B Produto matricial; a contagem de colunas de A deve ser igual à contagem de linhas de B
transpose(A) Troca linhas e colunas
shape(A) [rows, columns]
identity(n) Uma matriz identidade de dimensões n por n
trace(A) Soma da diagonal de uma matriz quadrada
det(A) Determinante de uma matriz quadrada
inverse(A) Inversa de uma matriz quadrada; uma matriz singular gera um erro
rank(A) Posto de qualquer matriz retangular, obtido por eliminação exata
dot(a, b) Produto escalar de dois vetores do mesmo comprimento
cross(a, b) Produto vetorial de dois vetores com três elementos
solve_system(A, b) Resolve A*x = b para uma matriz quadrada A e um vetor plano b
eigenvalues(A) Autovalores de uma matriz quadrada real, incluindo pares complexos, sem ordem definida
qr(A) [Q, R], onde Q*R é aproximadamente A
lu(A) [P, L, U], onde P*A é aproximadamente L*U; apenas matrizes quadradas
svd(A) [U, s, Vt], onde s é uma lista plana de valores singulares e A é aproximadamente U*diag(s)*Vt

Resultados exatos. det, inverse, rank e solve_system usam frações exatas. rank não tem tolerância de arredondamento. solve_system relata um erro para um sistema singular e não lida com sistemas não lineares ou sistemas com um número infinito de soluções.

Resultados aproximados. eigenvalues, qr, lu e svd usam ponto flutuante e verificam se o resultado é finito. qr e svd aceitam matrizes retangulares e retornam fatores compactos ("thin"). Os cálculos de autovalores e SVD param após 10.000 iterações. Na resposta exibida, um elemento que representa apenas ruído de arredondamento em comparação com o maior elemento aparece como 0, mas acessá-lo pelo índice retorna o valor armazenado. Matrizes mal condicionadas podem perder precisão; por isso, não teste esses resultados com ==.

calc
# Two adult tickets and one child ticket cost 34; one adult and two children cost 29
solve_system([[2,1],[1,2]], [34,29]) resulta em [13, 8]
det([[2,1],[1,2]]) resulta em 3
rank([[1,2],[2,4]]) resulta em 1

Números complexos

i é a unidade imaginária, a menos que você tenha definido um nome ou uma unidade personalizada chamada i.

  • Funções: complex(real, imaginary) real, imag, conj, abs, arg (em radianos) e sqrt (a raiz principal) aceitam números complexos.
  • Exatidão: as partes, a aritmética e as potências com expoentes inteiros permanecem exatas. Raízes em geral e arg são aproximados.
  • Resultados reais: quando partes imaginárias são canceladas, como em (2+3i) * (2-3i) a resposta é um valor numérico real comum. Um valor que você escreve como complexo, como -4 + 0i ou complex(-4,0), permanece complexo através da aritmética e dos nomes, mesmo que seja exibido como -4.
  • Raízes quadradas e logaritmos de números negativos: sqrt(-4), ln(-1) e log(-100) permanecem em números reais e mostram um erro de número imaginário que soletra a forma complexa a ser escrita em vez disso, como sqrt(-4 + 0i). Isso, ou sqrt(complex(-4,0)), dá 2i.
  • Exibição: uma parte que representa apenas resíduo de arredondamento de ponto flutuante aparece como 0; assim, exp(i*pi) exibe -1. O valor armazenado mantém seus dígitos.
  • Comparações: < e > só funcionam quando ambas as partes imaginárias são zero.
  • Outras funções: sin, cos, tan e seus inversos, as funções hiperbólicas e seus inversos, exp, ln, log ou log10, log2, cbrt e potências fracionárias ou complexas aceitam números complexos. Eles usam ponto flutuante e ramos principais. O logaritmo de zero, e qualquer resultado que não seja finito, é um erro.
calc
(2+3i) * (2-3i) resulta em 13
abs(3+4i) resulta em 5
sqrt(-4 + 0i) resulta em 2i
sqrt(complex(-4,0)) resulta em 2i
sqrt(-4) resulta em Error: imaginary number. For a complex answer, write sqrt(-4 + 0i)
exp(i*pi) resulta em -1

Somas e produtos

sum(expression, name, from, to) soma a expressão para cada inteiro de from a to, incluindo os dois extremos. summation é outro nome para a mesma função, e product multiplica em vez de somar.

  • O nome é local para a chamada. Não altera um nome que você já definiu e não faz com que a linha dependa de um.
  • Você pode colocar uma soma ou produto dentro de outro.
  • Se to for menor que from, o intervalo está vazio: a soma é 0 e o produto é 1.
  • Uma única chamada pode ter no máximo 10.000 termos.
calc
sum(k^2, k, 1, 10) resulta em 385
product(k, k, 1, 5) resulta em 120
k = 7 resulta em 7
sum(k, k, 1, 3) resulta em 6
k resulta em 7

Resolvendo equações

solve(equation) interpreta uma equação polinomial de grau 1 ou 2 com uma incógnita e calcula suas raízes. A incógnita é o único nome da equação que não tem um valor definido; um nome com valor é substituído por esse valor. O lado direito pode ser omitido; nesse caso, a expressão é igualada a zero.

  • Uma equação linear retorna um número. Uma equação quadrática retorna uma lista de suas raízes reais distintas, em ordem crescente; portanto, uma raiz repetida resulta em uma lista com um elemento. O formato segue o grau escrito, não as raízes encontradas.
  • Os coeficientes e seu rearranjo são exatos, assim como as raízes quando o discriminante é um quadrado perfeito. Qualquer outro quadrático dá duas raízes quadradas decimais.
  • Ambos os lados devem ser números simples. Unidades, dinheiro e valores complexos são recusados.
  • Uma equação sem raiz real dá Error: no real solution em vez de uma raiz complexa, e uma equação que cada valor satisfaz diz isso em vez de escolher um valor.
  • Qualquer outra coisa — grau 3 e acima, uma equação não polinomial, o desconhecido em um divisor ou um expoente, um segundo nome sem um valor — é recusada com uma mensagem nomeando a forma de quatro argumentos abaixo.
calc
solve(2x + 6 = 10) resulta em 2
solve(x^2 - 5x + 6 = 0) resulta em [2, 3]
solve(x^2 - 2 = 0) resulta em [-1.4142135624, 1.4142135624]
solve(x^2 + 1 = 0) resulta em Error: no real solution

solve(expression, name, lower, upper) é uma função diferente: encontra um valor real de name entre lower e upper, onde a expressão é zero. solve(left = right, name, lower, upper) encontra onde os dois lados são iguais.

  • Os limites devem ser números finitos, com lower menor que upper.
  • Uma raiz exatamente em um limite é aceita. Caso contrário, a expressão deve ser positiva em um limite e negativo no outro, e deve ser contínua no meio.
  • A busca divide o intervalo pela metade a cada passo. Ela tem sucesso quando a expressão está a no máximo 1e-10 de zero e o intervalo é suficientemente estreito, em até 128 passos. Se a expressão for indefinida em algum ponto avaliado ou a busca não convergir, a linha mostra um erro.
  • Encontra uma raiz, não todas. Para sistemas de equações lineares, use solve_system.
calc
solve(1500 + 12*x = 20*x, x, 0, 1000) resulta em 187.5
solve(x^2 = 2, x, 0, 2) resulta em 1.4142135624

Cálculo

Derivadas simbólicas

differentiate(expression, name), também escrito como derivative(expression, name), retorna a derivada como texto.

  • Ele usa as regras de soma, produto, quociente, potência e cadeia na aritmética de números reais sem unidades, mais sin, cos, tan, sinh, cosh, exp, ln e sqrt.
  • Outros nomes na expressão são tratados como constantes, tenham ou não um valor na nota: differentiate(a*x^2, x) dá (a*(2*(x^(2-1)))).
  • O resultado não é simplificado e é limitado a 8.192 caracteres.
  • Outras funções, como abs, são erros; use uma derivada em um ponto para essas. Este não é um sistema completo de álgebra de computador.
  • A derivada tem as mesmas restrições de domínio que a expressão original.
calc
differentiate(sin(x), x) resulta em cos(x)
differentiate(x^3, x) resulta em (3*(x^(3-1)))

Derivadas em um ponto

derivative(expression, name, point), ou differentiate com três argumentos, calcula numericamente a inclinação em um ponto. Usa diferenças centrais refinadas e as compara com estimativas unilaterais. A expressão pode usar funções definidas por você, mas precisa ser suave perto do ponto e usar números reais sem unidades. Se a estimativa não convergir ou uma amostra for indefinida, a linha mostra um erro.

Como as formas numéricas calculam um número, todos os nomes, exceto a variável, precisam de um valor. Isso vale para derivadas em um ponto, sum, product, solve e integrate; um nome sem valor produz Unsupported: Unknown name: seguido do nome.

calc
derivative(x^3, x, 2) resulta em 12
f(x) = x^2
derivative(f(x), x, 3) resulta em 6
differentiate(a*x^2, x) resulta em (a*(2*(x^(2-1))))
derivative(a*x^2, x, 3) resulta em Unsupported: Unknown name: a

Integrais definidas

integrate(expression, name, lower, upper) calcula a área sob a expressão entre dois limites finitos.

  • Trocar os limites altera o sinal da resposta, e limites iguais dão zero.
  • São usadas regras adaptativas de Gauss–Kronrod de 7 e 15 pontos, com amostragem em posições não uniformes. Isso evita que uma onda regular como cos(128*pi*x) engane o cálculo: integrate(cos(128*pi*x), x, 0, 1) resulta em aproximadamente -1.3e-15, que equivale a zero dentro do erro de arredondamento.
  • Tem como objetivo uma estimativa de erro total de no máximo 1e-9 vezes o tamanho da resposta (ou 1e-9 para respostas menores que 1). Ele compara pelo menos dois níveis de detalhe, permite o erro de arredondamento e refina a peça com o maior erro estimado primeiro.
  • Ele para após 2.048 refinamentos, 20 níveis de subdivisão ou os 100.000 passos compartilhados com outra matemática avançada na linha. Alcançar um limite, ou uma amostra indefinida, é um erro.
  • A estimativa de erro é um bom guia, não uma garantia. Use expressões suaves e finitas. Os resultados para expressões com picos, saltos ou oscilação rápida podem ser imprecisos.
  • Integrais indefinidas e limites infinitos não são suportados.
calc
integrate(x^2, x, 0, 3) resulta em 9
integrate(x^2, x, 3, 0) resulta em -9

Argumentos e unidades em funções matemáticas

  • factorial é outro nome para fact, e trunc para int.
  • sign retorna -1, 0 ou 1. atan2(y, x) retorna um ângulo em radianos como um número simples.
  • O segundo argumento opcional de round, floor e ceil é um incremento, não um número de casas decimais: round(17, 5) arredonda para o múltiplo de 5 mais próximo. Para arredondar casas decimais, consulte Arredondamento.
  • Logaritmos, exponenciais e funções hiperbólicas não aceitam unidades ou dinheiro. A trigonometria comum aceita ângulos como 30°.
  • Raízes quadradas e cúbicas mantêm unidades quando o expoente é divisível pelo índice da raiz, e potências de grandezas mantêm suas unidades. Não é possível elevar temperaturas em Celsius ou Fahrenheit ao quadrado nem extrair suas raízes.
calc
gcd(12, 18) resulta em 6
round(17, 5) resulta em 15
sin(30°) resulta em 0.5
sqrt(9 m²) resulta em 3 m
(2 kg)^2 resulta em 4 kg²

Limites

Os limites são verificados antes que uma resposta seja mostrada:

  • 1.024 itens em uma lista ou range
  • Matrizes de até 32 × 32
  • 10.000 termos em uma sum ou product
  • 16 níveis de listas aninhadas e chamadas de função
  • 100.000 etapas compartilhadas por toda a matemática avançada em uma linha, incluindo chamadas aninhadas
  • 4.096 bits no numerador ou no denominador de uma fração, como no restante do Varlig Calc

Atingir um limite mostra um erro naquela linha; o restante da nota continua funcionando. Uma soma parcial, uma inversa incompleta ou uma raiz sem convergência nunca é apresentada como resposta. Para todos os limites e detalhes de exatidão, consulte Interpretar resultados: exibição e precisão.