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.
squares(n) = sum(k^2, k, 1, n)squares(3) resulta em 14first(items) = items[0]first([10, 20]) resulta em 10root(y) = solve(x^2 = y, x, 0, 10)root(9) resulta em 3O 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
solvenumé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.
modequando 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 desum,productecountem 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.
modesó retorna uma resposta quando um único valor é estritamente o mais frequente. Um empate ou uma lista sem repetições gera um erro que sugeremodes,medianouaverage.modesretorna 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 umkinteiro de 0 a 4 e equivale apercentile(list, 25k).varianceestddevsão as formas de amostra, divididas porn - 1e precisando de dois valores.population_varianceepopulation_stddevdividem porne precisam de um.sample_varianceesample_stddevsão nomes mais longos para os curtos.- Uma lista vazia tem uma
sumde 0, umproductde 1 e umacountde 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.
spend = [420, 385, 510, 460] resulta em [420, 385, 510, 460]sum(spend) resulta em 1,775average(spend) resulta em 443.75median(spend) resulta em 440spend[0] resulta em 420spend * 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 |
sliceprecisa de números inteiros onde 0 ≤ início ≤ fim ≤ o comprimento da lista. Outros limites são erros.varianceprecisa de pelo menos dois números sem unidades.mapefilterpegam 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 emfilterdeve dartrueoufalse.
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 ==.
# Two adult tickets and one child ticket cost 34; one adult and two children cost 29solve_system([[2,1],[1,2]], [34,29]) resulta em [13, 8]det([[2,1],[1,2]]) resulta em 3rank([[1,2],[2,4]]) resulta em 1Nú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) esqrt(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
argsã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 + 0ioucomplex(-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)elog(-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, comosqrt(-4 + 0i). Isso, ousqrt(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,tane seus inversos, as funções hiperbólicas e seus inversos,exp,ln,logoulog10,log2,cbrte 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.
(2+3i) * (2-3i) resulta em 13abs(3+4i) resulta em 5sqrt(-4 + 0i) resulta em 2isqrt(complex(-4,0)) resulta em 2isqrt(-4) resulta em Error: imaginary number. For a complex answer, write sqrt(-4 + 0i)exp(i*pi) resulta em -1Somas 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
tofor menor quefrom, o intervalo está vazio: a soma é 0 e o produto é 1. - Uma única chamada pode ter no máximo 10.000 termos.
sum(k^2, k, 1, 10) resulta em 385product(k, k, 1, 5) resulta em 120k = 7 resulta em 7sum(k, k, 1, 3) resulta em 6k resulta em 7Resolvendo 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 solutionem 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.
solve(2x + 6 = 10) resulta em 2solve(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 solutionsolve(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
lowermenor queupper. - 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-10de 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.
solve(1500 + 12*x = 20*x, x, 0, 1000) resulta em 187.5solve(x^2 = 2, x, 0, 2) resulta em 1.4142135624Cá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,lnesqrt. - 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.
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.
derivative(x^3, x, 2) resulta em 12f(x) = x^2derivative(f(x), x, 3) resulta em 6differentiate(a*x^2, x) resulta em (a*(2*(x^(2-1))))derivative(a*x^2, x, 3) resulta em Unsupported: Unknown name: aIntegrais 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-9vezes o tamanho da resposta (ou1e-9para 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.
integrate(x^2, x, 0, 3) resulta em 9integrate(x^2, x, 3, 0) resulta em -9Argumentos e unidades em funções matemáticas
factorialé outro nome parafact, etruncparaint.signretorna -1, 0 ou 1.atan2(y, x)retorna um ângulo em radianos como um número simples.- O segundo argumento opcional de
round,flooreceilé 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.
gcd(12, 18) resulta em 6round(17, 5) resulta em 15sin(30°) resulta em 0.5sqrt(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
sumouproduct - 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.