Um parâmetro ajustado sem barra de erro está incompleto. Veremos como o curve_fit funciona, o que a matriz de covariância diz sobre a incerteza e a correlação dos parâmetros, e por que linearizar os dados para ajustar pode destruir o resultado, como em Lineweaver-Burk.
Maximizar só a conversão de um reator empurra temperatura e tempo para o limite, e essa é a resposta certa para a pergunta errada. Quatro problemas reais com scipy.optimize: o reator, o alcance de um projétil com arrasto, uma viga com três restrições e um mix de produção.
Derivar e igualar a zero resolve a otimização de livro-texto. Com várias variáveis, restrições ou função sem derivada tratável, a conta trava. Veremos minimize, SLSQP e bounds do scipy.optimize, os mínimos locais e a busca global com differential_evolution.
A fórmula clássica do período do pêndulo só vale para oscilações pequenas, e a equação exata não tem solução em forma fechada. Com o solve_ivp do SciPy, medimos o período de verdade e resolvemos sistemas rígidos, Lotka-Volterra, queda com arrasto e reações consecutivas.
A função gaussiana não tem primitiva elementar, e isso é um teorema de Liouville. Quando a primitiva não existe, ou só há uma tabela de medições, o caminho é numérico: quad, trapézio e Simpson, do scipy.integrate, com os cuidados que cada um pede.
A temperatura do reator está subindo rápido demais? A pergunta é uma derivada, mas só há números numa tabela. Veremos diferenças finitas, numpy.gradient e scipy.differentiate, e por que diminuir o passo nem sempre melhora a derivada, por causa do arredondamento e do ruído.
Dados experimentais raramente caem sobre uma curva. Veremos como o NumPy ajusta polinômios a dados com ruído, o que o SymPy não faz, por que extrapolar é perigoso e por que o fenômeno de Runge vem dos nós igualmente espaçados, e não do grau alto.
Guardados em float64, os coeficientes do polinômio de Wilkinson já não devolvem as raízes de 1 a 20: duas delas viram um par complexo. Antes de chegar a ele, vemos raízes, derivadas, integrais e divisão com numpy.polynomial e a armadilha da ordem dos coeficientes.
Do pH de um ácido fraco ao volume de um gás real e ao fator de atrito de uma tubulação: três equações que a química e a engenharia usam no dia a dia e que só têm solução numérica útil. Resolvemos as três com brentq e numpy.roots e reconstruímos o diagrama de Moody.
Onde está o Cometa Halley numa data qualquer? A resposta exige resolver a equação de Kepler, que não tem forma fechada. Com newton e brentq, do SciPy, localizamos o cometa, tornamos visível a lei das áreas e calculamos o alcance de um projétil com resistência do ar.
Na equação de Kepler, a incógnita aparece dentro e fora de um seno, e nenhuma álgebra a isola. Para casos assim, o SciPy aproxima a raiz. Veremos bisseção e brentq, o método de Newton e por que ele pode falhar, e os sistemas não lineares com fsolve e root.
A maioria das equações, integrais e equações diferenciais de problemas reais não tem solução em forma fechada, e o SymPy não as resolve. Esta série de 13 artigos mostra como NumPy e SciPy atacam esses problemas: raízes, polinômios, cálculo numérico, otimização e FFT.
Rua de mão única, hyperlink e dependência entre tarefas são relações com sentido, e para elas existem os grafos direcionados. Veremos graus de entrada e saída, conexidade forte, unilateral e fraca, matrizes, DAGs e a ordenação topológica que o Apache Airflow usa.
Tente ligar três casas a gás, água e luz sem cruzar linhas: é impossível. Veremos por quê, com a Fórmula de Euler, a prova de que o grafo das três casas e o completo de cinco vértices não são planares, o Teorema de Kuratowski e a coloração de grafos planares, das seis às quatro cores.
Percorrer cada aresta uma única vez é fácil de decidir: basta olhar a paridade dos graus (Teorema de Euler). Decidir se dá para visitar cada vértice uma única vez é NP-completo. Veremos os dois problemas, os teoremas de Dirac e Ore e o Caixeiro Viajante, de Held-Karp a Christofides.
Um sistema de arquivos é uma árvore: um grafo conexo e sem ciclos. Provamos que toda árvore tem uma aresta a menos que o número de vértices e que seu centro tem um ou dois vértices, e vemos árvores geradoras e enraizadas, com a diferença entre uma árvore balanceada e uma degenerada.
Como saber se dois pontos de uma rede estão conectados, e por qual caminho mais curto? Definimos passeio, trajeto, caminho e ciclo, conexidade e distância, calculamos distâncias com a busca em largura e Dijkstra e provamos que um grafo é bipartido se e só se não tem ciclo ímpar.
Dois grafos com o mesmo número de vértices, de arestas e a mesma sequência de graus podem não ser isomorfos. Veremos o que é isomorfismo, como prová-lo com uma bijeção e como representar grafos por matrizes de adjacência e de incidência.
A soma dos graus de um grafo é sempre o dobro do número de arestas: é o Teorema do Aperto de Mãos. Veremos grau, grafos regulares e sequência de graus, e conferimos o teorema no Karate Club de Zachary, uma rede real de 34 pessoas que se dividiu em duas.
O vocabulário formal da teoria dos grafos: vértices, arestas, vizinhança, vértice isolado e universal, complemento, subgrafos induzidos e geradores, grafos completos e nulos, cliques e conjuntos independentes, com 14 exemplos e exercícios resolvidos.
Dá para cruzar as sete pontes de Königsberg passando uma única vez por cada uma? Euler mostrou que não, e criou a teoria dos grafos. Veremos o que é um grafo, o Teorema das Quatro Cores e o cálculo do PageRank numa mini-web de cinco páginas, em Python.
Em 1736, Euler resolveu um quebra-cabeça sobre as pontes de uma cidade prussiana e fundou, sem querer, a teoria dos grafos. Esta série de 9 artigos vai das definições básicas ao Teorema de Kuratowski, passando por caminhos, árvores, planaridade e grafos direcionados.
Qual é o coeficiente de um termo na expansão de um binômio elevado à décima potência? O Binômio de Newton responde em uma linha, com os coeficientes do Triângulo de Pascal. Veremos o teorema e sua prova por indução, a fórmula do termo geral e as identidades que saem de casos particulares.
Um conjunto de 10 elementos tem 1.024 subconjuntos, e essa é a soma da linha 10 do Triângulo de Pascal. Veremos as identidades dos coeficientes binomiais: simetria, relação de Pascal (Stifel) e os teoremas das linhas, das colunas e das diagonais.
Numa sorveteria com 7 sabores, há 210 formas de pedir 4 bolas, podendo repetir sabor. Chegamos a esse número com o método das estrelas e barras, que mostra que escolher com repetição, distribuir bolas em caixas e resolver equações inteiras são o mesmo problema.
Uma senha de 4 dígitos aceita repetição, e por isso há 10.000 delas, dez opções em cada uma das quatro posições. O arranjo com repetição conta senhas, placas e cores RGB, e mostra quantos padrões cabem nos 32 bits de um float e nos registradores de uma calculadora HP-11C.
Quantos anagramas tem a palavra MAMBEMBE? Menos do que teria uma palavra de 8 letras distintas, porque trocar duas letras iguais não cria um anagrama novo. A fórmula desconta as repetições dividindo por fatoriais, e vale para sequências binárias e para caminhos mínimos em grades.
De 10 amigos, 3 vão comprar as pipocas. Importa só quem vai, e não a ordem da escolha, e por isso são 120 grupos possíveis. Veremos a fórmula da combinação simples, sua simetria, o método do complemento e a divisão de um conjunto em grupos.
Numa corrida com 10 atletas, o pódio pode ser preenchido de 720 formas. Esse é um arranjo simples, a seleção ordenada de alguns elementos de um conjunto. Resolvemos problemas de rotas, placas de veículos e números com algarismos distintos, com Python e SQL.
Quantos anagramas tem a palavra VIRUS? De quantas formas 5 amigos se sentam em volta de uma mesa? São 120 e 24, pela permutação simples e pela circular. Veremos também restrições de adjacência, o problema do caixeiro-viajante e os desarranjos.
Com 4 livros de matemática e 3 de português, há 7 formas de escolher um livro e 12 de escolher um de cada. A primeira conta é uma soma e a segunda, um produto: são os princípios aditivo e multiplicativo, aplicados aqui a senhas, bandeiras, gabaritos e contagem de divisores.
Quantas senhas de 8 caracteres existem? De quantas formas 10 pessoas se sentam ao redor de uma mesa? A combinatória responde sem enumerar caso a caso. Este é o roteiro da série: dos princípios de contagem a permutações, arranjos, combinações e Binômio de Newton.
Quantos movimentos resolvem a Torre de Hanói? A resposta sai de uma relação de recorrência, que escreve o problema em função dele mesmo com um disco a menos. Montamos recorrências e as resolvemos por substituição, pela equação característica e pelo Teorema Mestre, usado no merge sort.
E quando o passo depende de mais de um caso anterior, como em Fibonacci? A indução forte assume todos os casos anteriores. Veremos a técnica na decomposição em primos, na barra de chocolate, no franqueio postal e na fórmula de Binet, que em ponto flutuante erra a partir do 71º termo.
Se o primeiro dominó cai e cada dominó derruba o seguinte, todos caem. Essa é a lógica do Princípio de Indução Matemática. Veremos a estrutura da prova (base, hipótese e passo) em somas, divisibilidade e desigualdades, e a falsa prova de que todos os cavalos têm a mesma cor.
Como provar que uma fórmula vale para todos os números naturais, se eles são infinitos? Com a indução matemática. Esta apresentação mostra o caminho da série: indução clássica, indução forte e relações de recorrência, de Fibonacci à Torre de Hanói.
Testar se um elemento está num set leva tempo constante em média, e numa lista o tempo cresce com o tamanho. Veremos como a teoria dos conjuntos vira código em Python: set e frozenset, compreensão, pertinência e inclusão, união, interseção e diferença, hash e aplicações práticas.
Somar o tamanho de dois conjuntos conta a interseção duas vezes. O Princípio da Inclusão-Exclusão corrige a conta, para dois, três ou qualquer número de conjuntos. Veremos também infinitos de tamanhos diferentes, desarranjos e o Crivo de Eratóstenes.
União, interseção, diferença e complemento são as operações básicas entre conjuntos, e aparecem no SQL como UNION, INTERSECT e EXCEPT. Vemos cada uma em diagramas de Venn, as leis de De Morgan e a distributividade, e a diferença entre diagrama de Venn e de Euler.
A coleção das pessoas altas não é um conjunto: falta um critério que decida, para qualquer pessoa, se ela pertence ou não. Definimos conjunto, pertinência, descrição por extensão e por compreensão, igualdade, inclusão e o conjunto das partes.
De quantas maneiras se escolhe uma senha válida? Qual o caminho mais curto entre duas cidades? São perguntas de matemática discreta. Este roteiro apresenta as quatro séries do site sobre o tema: conjuntos, indução e recorrência, combinatória e grafos, com 28 artigos.
Como passar de uma tabela verdade para a expressão booleana mais enxuta? Mostramos três caminhos: as formas canônicas com mintermos e maxtermos, a simplificação algébrica e o mapa de Karnaugh, com exercícios resolvidos e conferência em Python com o SymPy.
Toda operação de um processador se descreve com três operações lógicas: AND, OR e NOT. Vamos das portas e tabelas verdade aos teoremas, às leis de De Morgan e à simplificação de expressões, com o meio-somador como primeiro circuito e exemplos em Python.
Com 10% de código serial, oito núcleos deixam o programa 4,7 vezes mais rápido, e nenhuma quantidade de núcleos passa de 10 vezes. Fechamos a série com RISC e CISC, métricas de desempenho, a taxonomia de Flynn, SMP, clusters, NUMA, multicore e a Lei de Amdahl.
Esperando um disco de 10 ms em espera ativa, uma CPU de 1 GHz desperdiça dez milhões de ciclos. Comparamos as três formas de tratar entrada e saída (polling, interrupções e DMA), calculamos o overhead de cada uma e vemos por que o polling voltou com os SSDs NVMe.
Python não executa seu código linha a linha: antes, o CPython o compila para bytecode. Com os módulos tokenize, ast, compile e dis, acompanhamos uma expressão simples dos tokens à árvore sintática e ao bytecode, direto no interpretador.
Você escreve uma linha de código, e o processador só entende bits. Acompanhamos a tradução: montador em duas passagens, fases do compilador, ligação e carregamento. No caminho, o GCC reduz doze instruções a duas com -O2, e vemos onde ficam Python e Java entre compilar e interpretar.
A mesma expressão custa 5 instruções com três operandos, 7 com dois e 11 com um acumulador. Veremos a ISA, o contrato entre hardware e software, os formatos de instrução, o R-type do RISC-V e os sete modos de endereçamento que dizem onde está cada operando.
Maiúscula e minúscula diferem por um único bit na tabela ASCII, e não foi por acaso. Para o hardware tudo são bits, e o valor depende da convenção de leitura: ASCII, Unicode e UTF-8 para texto, complemento a dois para inteiros e IEEE 754 para números reais.
Uma linha de montagem não espera um carro ficar pronto para começar o próximo, e o pipeline faz o mesmo com as instruções. Veremos os estágios, os hazards que travam a linha, o cálculo do speedup, os barramentos que ligam CPU, memória e periféricos e a unidade de controle.
Um processador hipotético de 12 bits, com 15 instruções, serve de modelo para acompanhar o ciclo de instrução completo. Executamos LDA e ADD registrador por registrador, codificamos instruções em hexadecimal e escrevemos programas em assembly com desvios e laços.
Um processador de 2 GHz pode executar mais instruções por segundo que um de 3 GHz. Para entender por quê, abrimos a CPU: UAL, unidade de controle, registradores, flags, decodificador e relógio, e os microeventos do ciclo de busca em notação formal.
Com 95% de acerto, a cache faz o processador enxergar uma memória de 4,95 ns onde a DRAM leva 80 ns. Veremos por que ela funciona (localidade), os mapeamentos direto, associativo e por conjuntos, os algoritmos de substituição e as políticas de escrita.
Se o acesso a um registrador durasse um segundo, o acesso à memória principal levaria quatro minutos e meio, e a um disco rígido, mais de um ano. Veremos a hierarquia de memória, células, endereços e barramentos, as fórmulas de dimensionamento e SRAM, DRAM, ROM e ECC.
Você aperta Enter e o resultado aparece três décimos de segundo depois. Nesse intervalo, o processador buscou centenas de milhões de instruções na memória. Esta série de 13 artigos explica como: memória, cache, CPU, pipeline, representação de dados e execução de programas.
Como os mesmos 32 bits guardam a distância entre galáxias e o diâmetro de um átomo? Dissecamos o IEEE 754: sinal, expoente com viés e mantissa com bit escondido, conversões à mão, infinito, NaN, subnormais e o épsilon de máquina.
Por que somar 0.1 e 0.2 não dá 0.3? Porque 0.1 é uma dízima periódica em binário. Convertemos frações entre bases por multiplicações sucessivas, vemos os bits de um float com struct e duas saídas práticas: inteiros para dinheiro e math.isclose para comparar.
Em Python, 5 and 6 devolve 6, e 5 & 6 devolve 4. Explicamos a diferença e os operadores bit a bit AND, OR, XOR, NOT e os deslocamentos, usados em máscaras que consultam, ligam, desligam e alternam bits. No fim, vemos de onde vem o 755 do chmod.
Para subtrair, o processador soma o primeiro número com o complemento do segundo, e um único somador faz as duas operações. Veremos o complemento de dois, por que 8 bits com sinal vão de -128 a +127 e como o overflow derrubou o Ariane 5 e travou o Pac-Man na fase 256.
As regras de soma e subtração da base 10 valem em qualquer base: muda só o valor que dispara o vai-um. Fazemos contas em binário, octal e hexadecimal, vemos por que com três parcelas o vai-um pode valer 2 e implementamos os dois algoritmos em Python.
Em qualquer base, o valor da própria base se escreve 10. Partimos da notação posicional para converter inteiros entre decimal, binário, octal e hexadecimal, com expansão, divisões sucessivas, agrupamento de bits e as funções bin, oct, hex e int do Python.
Tanto o NumPy quanto o Pandas usam o conceito de eixo (axis), mas com diferenças sutis. No NumPy, ele refere-se à dimensão em que uma operação é realizada, enquanto no Pandas, indica a direção de uma operação. Este artigo apresenta exemplos do uso do axis em cada biblioteca.
Aprendemos em matemática que há regras para somar ou multiplicar matrizes. Mas, em problemas matemáticos computacionais, por vezes temos matrizes ou vetores que gostaríamos de somar ou multiplicar que não cumprem as exigências. Veremos neste artigo como o conceito de broadcasting do NumPy é útil nestes contextos e como ele se relaciona com quantização vetorial.
Caso esteja se aventurando em ciência de dados, muito provavelmente já viu um reshape em algum código. Talvez com um misterioso valor de -1 em uma das posições como reshape(-1, 1). Mas, afinal, o que significa isto? Por que por vezes precisamos transformar nossos dados para utilizar métodos de modelos no Scikit-Learn? É o que veremos neste artigo.
Métodos de Monte Carlo são algoritmos computacionais que se baseiam em amostras aleatórias para obter resultados numéricos. Neste artigo, veremos como podemos obter o valor de pi com esses métodos.
O número π é uma constante matemática que é a razão entre a circunferência de um círculo e seu diâmetro. Neste artigo, passaremos pela história do número π e aprenderemos um pouco de programação Python no caminho.
Um bom tempo do estudo de cálculo é destinado às chamadas séries infinitas. Mas, afinal, o que são séries infinitas? E qual sua relação com o paradoxo de Aquiles e a tartaruga, um dos chamados paradoxos de Zenão de Eleia, filósofo grego? Qual a relação com quântica e o princípio da incerteza? E onde entra Python nisto tudo? É o que descobriremos neste artigo.
As equações de balanço de massa são importantes para praticamente todos os cálculos na resolução de problemas de engenharia química. Nesse artigo, vamos resolver duas questões de balanço de massa utilizando a biblioteca SymPy e revisar alguns princípios importantes.
Já escrevemos aqui no site sobre os conceitos de limite e derivada e como podemos fazer contas relacionadas com Python. Seguindo na nossa jornada de cálculo, neste artigo veremos como trabalhar com integrais com o SymPy e o SciPy, pacotes da linguagem Python. No caminho, teremos algumas noções de métodos numéricos.
Sabia que a função max do Python possui muitas opções e formas de uso que pouca gente conhece? Neste post veremos diferentes formas de utilizar a função max em Python.
Recentemente vi um excelente vídeo sobre boas práticas de programação. Mas pode ser ampliado para boas práticas de uma forma geral, para qualquer carreira. E, no fundo, é um vídeo sobre comunicação, como vou mostrar neste artigo.
Engenheiros e cientistas sempre buscam extrair o máximo de desempenho de seus equipamentos e projetos com o mínimo de custo. Essa busca dá origem aos chamados problemas de otimização. Neste artigo, veremos como podemos utilizar a linguagem Python, com auxílio do pacote SymPy, na resolução de tais problemas.
O Linux Mint é uma distribuição Linux amigável e fácil de usar. Neste vídeo, vamos fazer uma série de personalizações que o tornam ainda mais amigável e produtivo.
Passamos parte considerável do tempo lidando com strings, então é importante sabermos como apresentá-las da forma desejada. É o que veremos neste artigo com diversos exemplos.
O início dos cursos de cálculo costuma ser abstrato pelo conceito de limite. Mas, logo passa a ser mais palpável com a introdução do conceito de derivada, que possui diversas aplicações práticas evidentes. Neste artigo, veremos como trabalhar com derivadas com o SymPy, pacote da linguagem Python.
O conceito de limite é o mais importante dentro do estudo de cálculo. Diversos outros conceitos e ideias se baseiam na definição de limite. Neste artigo, veremos como podemos achar o limite de funções usando o SymPy e como este pacote pode ser um auxílio didático no estudo de cálculo.
Números complexos são fascinantes e há muitas aplicações práticas. Neste artigo, veremos como a linguagem Python lida com números complexos nativamente e como o pacote SymPy amplia o poder da linguagem.
O Linux Mint é uma distribuição baseada no Ubuntu e possui como ambiente gráfico principal o Cinnamon. Possui um visual mais adaptativo para quem está migrando do Windows e atende bem as necessidades de todos os públicos.
Nesse artigo, vamos explorar 3 bibliotecas químicas disponíveis para a linguagem Python, mostrando como elas são úteis na rotina de profissionais e estudantes de química.
O que ondas do mar, bolhas de sabão e DNA têm em comum? É o que mostro neste artigo, com a ajuda do Python. Veremos a relação de tais assuntos com funções trigonométricas.
Em programação, a palavra “lógica” pode se referir ou ao processo de elaboração de um algoritmo, ou a estruturas condicionais da linguagem, ou a operadores lógicos como E e OU. Nos dois últimos casos, estamos dentro da chamada lógica matemática.
Será que é possível estudar para o vestibular e ainda aprender Python? Sim, claro! Neste artigo, analisaremos uma questão da prova de 2020. É uma questão de química, mas que pode ser resolvida mais com raciocínio do que com química em si.
Neste artigo veremos como fazer gráficos com SymPy e Matplotlib. Usualmente quando se fala de SymPy focamos na parte relacionada à resolução de problemas de cálculos matemáticos. Mas muitos esquecem que a biblioteca possui alguns recursos básicos para construção de gráficos, que veremos neste artigo.
Grande parte do estudo de matemática em níveis mais fundamentais é dedicada a resoluções de equações e sistemas de equações. Neste artigo veremos como utilizar o SymPy para essas tarefas de forma rápida e intuitiva.
O Git pode ser uma ferramenta um pouco assustadora para iniciantes devido ao grande número de comandos e possibilidades. Neste artigo, desmistificaremos os principais aspectos do Git de forma a possibilitar colaborar em qualquer projeto. O famoso fluxo de forks e pull requests, popularizado pelo GitHub, será abordado.
Você já viu o termo “yield from” em algum código Python e ficou imaginando o que era? Nesse artigo vamos nos aprofundar ainda mais em geradores e entender, com exemplos, o que significa o “yield from” e como podemos utilizá-lo para deixar nossos códigos ainda mais eficientes.
Você sabia que é possível criar uma sequência infinita sem ter problemas de memória e ainda consumir essa sequência da forma que você quiser? Hoje veremos um método específico do módulo itertools, o islice, que é excelente para nosso propósito. Aprenderemos a utilizá-lo com o exemplo da série de Fibonacci.
Neste artigo, vamos ver como funcionam as funções all e any, presentes numa instalação padrão da linguagem Python. E, mais, vamos ver a utilidade de cada uma dessas funções e cuidados ao utilizá-las com base em uma análise de complexidade.
Você sabe a diferença entre uma função “normal” e uma função geradora em Python? Qual a diferença entre o return de uma função usual e o yield de um gerador? Nesse artigo responderemos essas perguntas e ainda nos aprofundaremos em alguns aspectos da linguagem. Veremos como geradores em Python podem tornar seu código até 1000 vezes mais rápidos.
Os operadores and e or são operadores em curto-circuito, ou seja, o segundo operando só é avaliado se o resultado não puder ser determinado com base apenas no valor do primeiro operando. Confuso? Vamos ver alguns exemplos neste artigo.
As Olimpíadas estão acabando… e, além de saudades e histórias de superação, cada Olimpíada deixa uma enorme quantidade de dados! Nesse artigo, vamos ver como podemos usar o Pandas para analisar parte desses dados, verificando a evolução do tempo dos atletas em provas de atletismo.
Será que é possível estudar para o vestibular e ainda aprender Python? Sim, claro! E é esse um dos objetivos da série ENEM Tecnológico aqui do site. Nessa série, utilizaremos ferramentas computacionais para analisar e expandir questões do ENEM. No artigo de hoje, analisaremos uma questão da prova de 2019. E, de quebra, aprenderemos a fazer gráficos 3D e 4D(?!) com Matplotlib. Tudo devido a um tijolo assassino.
Incolor, de constituintes invisíveis e inodoro (espera-se!). Por vezes nos esquecemos que estamos rodeados de gases que constituem nossa atmosfera. Nesse artigo, vamos ver como podemos facilmente, com a linguagem Python, conseguir uma listagem dos principais constituintes do ar com web scraping. E, também, fazer algumas contas como, por exemplo, de densidade e de massa molar média e, claro, apresentar tudo em gráficos espetaculares.