<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> <id>https://www.yunseo.kim/pt-BR/</id><title>Yunseo Kim's Study Notes</title><subtitle>Yunseo Kim's personal blog mainly covering mathematics, physics, and engineering.</subtitle> <updated>2026-02-17T02:32:51+09:00</updated> <author> <name>Yunseo Kim</name> <uri>https://www.yunseo.kim/pt-BR/</uri> </author><link rel="self" type="application/atom+xml" href="https://www.yunseo.kim/pt-BR/feed.xml"/><link rel="alternate" type="text/html" hreflang="en" href="https://www.yunseo.kim/" /><link rel="alternate" type="text/html" hreflang="ko" href="https://www.yunseo.kim/ko/" /><link rel="alternate" type="text/html" hreflang="ja" href="https://www.yunseo.kim/ja/" /><link rel="alternate" type="text/html" hreflang="zh-TW" href="https://www.yunseo.kim/zh-TW/" /><link rel="alternate" type="text/html" hreflang="es" href="https://www.yunseo.kim/es/" /><link rel="alternate" type="text/html" hreflang="pt-BR" href="https://www.yunseo.kim/pt-BR/" /><link rel="alternate" type="text/html" hreflang="fr" href="https://www.yunseo.kim/fr/" /><link rel="alternate" type="text/html" hreflang="de" href="https://www.yunseo.kim/de/" /><link rel="alternate" type="text/html" hreflang="pl" href="https://www.yunseo.kim/pl/" /><link rel="alternate" type="text/html" hreflang="cs" href="https://www.yunseo.kim/cs/" /> <generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator> <rights> © 2026 Yunseo Kim </rights> <icon>/assets/img/favicons/favicon.ico</icon> <logo>/assets/img/favicons/favicon-96x96.png</logo> <entry><title xml:lang="pt-BR">Como preparar materiais de IR (How to Prepare IR Materials)</title><link href="https://www.yunseo.kim/pt-BR/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/how-to-prepare-ir-materials/" rel="alternate" type="text/html" hreflang="cs" /><published>2026-01-11T00:00:00+09:00</published> <updated>2026-01-11T00:00:00+09:00</updated> <id>https://www.yunseo.kim/pt-BR/posts/how-to-prepare-ir-materials/</id> <author> <name>Yunseo Kim</name> </author> <category term="Startup" /> <category term="IR" /> <summary xml:lang="pt-BR">Entenda o que são materiais de IR e organize os conteúdos essenciais para construir um bom IR deck e captar investimento com sucesso.</summary> <content type="html" xml:lang="pt-BR"> <![CDATA[<p>Entenda o que são materiais de IR e organize os conteúdos essenciais para construir um bom IR deck e captar investimento com sucesso.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="o-que-são-materiais-de-ir">O que são materiais de IR?</h2><p><strong>IR</strong> é a sigla de <strong>Investor Relations</strong> e é um termo abrangente que se refere a todos os materiais e atividades necessários para explicar e promover a empresa para investidores, construir relacionamento e captar investimentos. Quando se fala em “materiais de IR”, em geral refere-se aos materiais que a empresa apresenta aos investidores com o objetivo de levantar capital.</p><h2 id="o-que-deve-entrar-em-um-material-de-ir">O que deve entrar em um material de IR</h2><p>Como o objetivo do material de IR é a captação, é necessário apresentar, de forma convincente e sob a ótica do investidor, por que vale a pena investir na empresa. Portanto, ele deve incluir uma visão geral do serviço, contexto de mercado, explicação do produto/serviço, cenário competitivo, resultados, modelo de negócio, plano de crescimento futuro, composição do time e outros elementos que cubram o negócio como um todo.</p><ul><li><strong>Pitch Deck</strong>:<ul><li>O objetivo é causar uma <strong>primeira impressão positiva</strong> em uma ampla base de potenciais investidores, de forma <strong>curta e impactante</strong><li>Usado em captações de estágio inicial<li>Em geral, 10–15 slides, com conteúdo conciso e bastante visual</ul><li><strong>IR Deck</strong>:<ul><li>Fornece <strong>informações financeiras aprofundadas e estratégia de longo prazo</strong><li>Entregue a investidores profissionais que já começaram a demonstrar interesse e estão perto de tomar uma decisão<li>Permite que os investidores façam uma <strong>avaliação e um julgamento mais aprofundados</strong><li>Em geral, 20–30 slides, com detalhes como <strong>plano financeiro, análise de mercado, time, análise de concorrentes</strong> etc.</ul></ul><h3 id="missãovisão-missionvision">Missão/Visão (Mission/Vision)</h3><ul><li>Qual é o valor essencial que a empresa pretende entregar?</ul><blockquote class="prompt-tip"><p>Por ser a identidade central da empresa, é recomendável que logo no início do material de IR a missão e a visão sejam expressas, cada uma, em uma frase — de maneira concisa e clara.</p></blockquote><h3 id="resumo-do-serviço">Resumo do serviço</h3><h4 id="problema-problem">Problema (Problem)</h4><ul><li>Qual é o problema existente no mercado que o serviço pretende resolver?<li>O quanto os consumidores se sentem incomodados com esse problema?<li>Por que esse problema é importante?<li>Existe demanda por essa solução? Quem é o público-alvo?</ul><h4 id="solução-solution">Solução (Solution)</h4><ul><li>Como, concretamente, o problema mencionado será resolvido?<li>Em comparação com o método atual, quais benefícios o consumidor e o usuário final obtêm?</ul><blockquote class="prompt-tip"><p>Como muitas vezes os investidores não são especialistas no tema, é melhor explicar o serviço do ponto de vista do consumidor (não do desenvolvedor). Detalhes técnicos podem ser tratados separadamente caso surjam perguntas depois.</p></blockquote><h3 id="tamanho-do-mercado-market-size">Tamanho do mercado (Market Size)</h3><p>Ao definir o tamanho do mercado diretamente em termos monetários, o resultado pode variar bastante dependendo do método de cálculo e de diversas variáveis, além de haver um risco relativamente maior de contestação.<br /> É mais seguro e eficaz apresentar o tamanho do mercado usando outros indicadores, como número de usuários potenciais, número/frequência de transações, etc.</p><ul><li><strong>TAM (Total Addressable Market, mercado total)</strong>: assumindo uma situação ideal em que se excluem todos os concorrentes e se conquista 100% do mercado global; o maior tamanho de mercado teoricamente acessível ao oferecer o produto/serviço globalmente<li><strong>SAM (Service Available Market, mercado endereçável)</strong>: tamanho de mercado dentro do escopo que a empresa de fato busca, considerando restrições geográficas, de infraestrutura e regulatórias — ou seja, onde é realisticamente possível operar<li><strong>SOM (Service Obtainable Market, mercado capturável)</strong>: tamanho do mercado que é realisticamente possível capturar no início, mesmo dentro do SAM, considerando concorrência, capacidades da empresa, estratégia de marketing etc.</ul><blockquote class="prompt-tip"><p>Ao estimar o tamanho de mercado, é comum citar pesquisas de terceiros para apresentar números e indicadores para o mercado total e o endereçável, mas, para o mercado capturável (o que realmente importa no curto prazo para uma startup), muitas vezes explicar no formato “se atingirmos X% de participação, conseguiremos Y de receita”. Para ser sincero, quando eu estava começando a me preparar para empreender, na primeira versão interna do rascunho do material de IR eu também escrevi desse jeito.</p><p>Porém, o problema disso é que, do ponto de vista do investidor, é difícil confiar em um plano de “capturar X% do mercado”. Não é como se lançar o serviço garantisse facilmente participação, e dizer vagamente que se atingirá X% mirando “todos os participantes” do mercado não é muito convincente.</p><p>Ao mesmo tempo em que se demonstra que o mercado total e o endereçável são suficientemente grandes, é importante apresentar a lógica de como você enxerga o <strong>mercado inicial de clientes (Immediate Market)</strong> e, depois, quais segmentos de clientes serão adicionados de forma incremental para expandir o mercado capturável.</p></blockquote><blockquote class="prompt-tip"><p><strong>Timing do negócio</strong></p><ul><li>Em negócios, timing também é muito importante<li>É preciso ser capaz de explicar aos investidores por que esse negócio pode dar certo agora e por que vale a pena investir agora<li>É necessário apresentar razões pelas quais este é o momento adequado para executar o negócio: viabilidade tecnológica, mudanças no comportamento das pessoas, tendências sociais, mudanças ambientais etc.</ul></blockquote><h3 id="explicação-do-produtoserviço-product">Explicação do produto/serviço (Product)</h3><ul><li>Quais são as principais características e funcionalidades do produto/serviço?<li>Qual é o funcionamento concreto e quais exemplos existem?</ul><h3 id="modelo-de-negócio-business-model">Modelo de negócio (Business Model)</h3><ul><li>Como a empresa vai ganhar dinheiro?<li>Quem paga? (como o usuário final e o cliente pagante nem sempre são a mesma pessoa, é preciso deixar claro quem de fato gera a receita)<li>O que será cobrado? Como será a precificação?</ul><h3 id="cenário-competitivo-competition">Cenário competitivo (Competition)</h3><ul><li>Quem são os principais concorrentes?<li><strong>Do ponto de vista do cliente</strong>, em que aspectos o produto/serviço da empresa é superior e tem vantagens em relação aos concorrentes?<li>Que serviços serão definidos como concorrentes e quais clientes serão o alvo principal?</ul><blockquote class="prompt-tip"><p>É preciso analisar bem os concorrentes para conseguir demonstrar aos investidores, de forma eficaz, que você entende a situação do mercado.</p></blockquote><h3 id="resultados-e-estratégia-de-entrada-no-mercado-go-to-market-strategy">Resultados e estratégia de entrada no mercado (Go-to Market Strategy)</h3><ul><li>Quais são os KPIs mais críticos para o sucesso do negócio?<ul><li>e.g. número de pedidos, usuários ativos mensais (MAU), volume mensal transacionado etc.</ul><li>Com foco nesses indicadores, quais resultados já houve?<li>Quais são os principais meios e canais de marketing da empresa?<li>Quais são os meios e o custo de aquisição de novos clientes?<li>*<strong>Qual é o valor do tempo de vida do cliente (LTV)</strong>?</ul><blockquote class="prompt-info"><p>*<strong>Valor do tempo de vida do cliente (Customer Lifetime Value, LTV)</strong>: a quantificação de quanto lucro total um usuário gera durante todo o período em que utiliza o serviço</p></blockquote><blockquote class="prompt-tip"><p>É recomendável excluir métricas secundárias que não sejam KPIs.</p></blockquote><blockquote class="prompt-tip"><p><strong>Se for uma startup em estágio ultrainicial, ainda sem receita</strong></p><ul><li>Definir e apresentar o <strong>ponto de equilíbrio (break-even)</strong> do serviço que se pretende oferecer<li>Nesse momento, não inflar métricas de receita e definir tudo de forma realista sob uma perspectiva conservadora<li>Apresentar um cenário de receita para o primeiro ano em que haverá faturamento e anexar um plano de receita para os próximos anos, para passar confiança de que é possível crescer de maneira consistente<ul><li>previsão de curto prazo (1 ano)<li>previsão de médio prazo (3 anos)<li>previsão de longo prazo (5 anos)</ul><li>Usar ativamente gráficos e tabelas para facilitar a leitura em um relance<li>Incluir slides de <strong>validação de hipóteses</strong>, fortalecendo a fundamentação ao mostrar de forma convincente por que os KPIs e o cenário de receita foram definidos daquele modo<ul><li>é necessário construir uma base sólida para o cenário de receita estimado por meio de várias rodadas de experimentos e validação de hipóteses</ul></ul></blockquote><h3 id="time-the-team">Time (The Team)</h3><ul><li>Em vez de apresentar todo mundo, focar nos principais membros que exercem papéis-chave, incluindo o(a) CEO/fundador(a)<li>Apresentar 2–3 itens de experiência e habilidades, usando logos e outros recursos para melhorar a legibilidade<li>Se houver investidores ou conselheiros que tenham desempenhado (ou desempenhem) um papel relevante, pode ser bom incluí-los também</ul><h3 id="plano-de-crescimento-futuro-milestones">Plano de crescimento futuro (Milestones)</h3><ul><li>Apresentar metas por período e por etapa<li>Em geral, define-se a meta até a próxima rodada (se for Seed, até antes da Série A; se for Série A, até antes da Série B)<li>Apresentar o valor de investimento desejado e o plano de uso dos recursos<li>Aqui, em vez de usar intervalos longos (meio ano ou mais), é melhor segmentar em unidades de cerca de 2 meses</ul><h3 id="plano-financeiro-financials">Plano financeiro (Financials)</h3><p>No caso de um IR deck, é necessário incluir o plano financeiro.</p><ul><li>Planilha de planejamento financeiro para os próximos 3–5 anos<li><strong>Unit economics (economia unitária)</strong>: receita e custos por unidade de cliente<li><strong>Burn rate (ritmo de queima de caixa)</strong>: a taxa de despesas pagas em caixa em empresas recém-criadas — custos de fundação, P&amp;D e outros<li>Receita total e custos totais<li>EBITDA ou demonstração de fluxo de caixa etc.</ul><blockquote class="prompt-warning"><ul><li>É preciso tomar cuidado para não apresentar um plano financeiro irrealista<li>É comum superestimar receita prevista e subestimar custos; portanto, tenha cautela ao estimar a escala da receita<li>Estimar custos com a maior precisão possível, considerando custos de desenvolvimento do produto/serviço e despesas operacionais</ul></blockquote><h2 id="pontos-a-enfatizar-por-etapa-de-investimento">Pontos a enfatizar por etapa de investimento</h2><h3 id="seed">Seed</h3><ul><li>Etapa de desenvolver o MVP, verificar a reação do mercado e validar a viabilidade do modelo de negócio<li>Deve-se enfatizar resultados de validação das hipóteses e do modelo de negócio, resultados dos experimentos com o MVP e a receita decorrente</ul><h3 id="pre-a">Pre-A</h3><ul><li>Etapa de comprovar potencial de crescimento e garantir capital adicional necessário para desenvolvimento de produto, marketing, contratação etc.<li>É necessário explicar quais são os KPIs do negócio, o quão bem a empresa está crescendo por meio de quais atividades e qual é o potencial de crescimento</ul><h3 id="série-a">Série A</h3><ul><li>Etapa de crescer de forma mais consistente e aumentar o valuation<li>Como a validação de hipóteses já deveria estar concluída, é necessário conquistar a confiança do investidor com resultados quantitativos de desempenho</ul><h2 id="algumas-dicas">Algumas dicas</h2><ul><li>Dedicar atenção especial aos cinco primeiros slides, para deixar uma primeira impressão positiva<li>Também pode ser bom repetir a missão/visão do primeiro slide no último slide<li>Transmitir tudo de forma direta, já começando pela conclusão (top-down)<li>O objeto do investimento é a <strong>empresa</strong>; portanto, mesmo no material de IR, o nome da empresa vem antes do nome do serviço<li>Como os potenciais investidores podem não ser do setor, explicar usando termos simples sempre que possível; quando for inevitável usar jargão, acrescentar uma explicação<li>Não misturar problema de mercado e solução: separar<li>Usar texto focado em palavras-chave; ao usar imagens, evitar screenshots e melhorar a legibilidade<li>Registrar números com precisão e especificidade em tabelas ou gráficos<li>Ter cuidado para não omitir a apresentação do time, o valor de investimento desejado e o plano de uso<li>Também é bom apresentar a estratégia de saída (retorno do investimento)<li>Mesmo que não esteja perfeito, apresentar ao menos de forma breve um plano de como será a composição acionária (cap table)<li>Não colocar material demais no corpo principal; se necessário, separar como anexos<li>No último slide, incluir contato (e-mail, telefone, nome)<li>A fonte também é bastante importante; usar fontes de boa legibilidade como <a href="https://cactus.tistory.com/306">Pretendard</a> e preparar em PDF para evitar problemas de renderização</ul><h2 id="referências">Referências</h2><h3 id="canal-de-divulgação-corporativa-kind">Canal de divulgação corporativa KIND</h3><p><a href="https://kind.krx.co.kr/corpgeneral/irschedule.do?method=searchIRScheduleMain&amp;gubun=iRMaterials">https://kind.krx.co.kr/corpgeneral/irschedule.do?method=searchIRScheduleMain&amp;gubun=iRMaterials</a></p><ul><li>Canal de divulgação corporativa operado pela Korea Exchange (KRX)<li>Fornece informações de divulgação de empresas listadas na KOSPI, KOSDAQ e KONEX<li>Permite consultar materiais de IR de empresas listadas, ajudando a verificar como outros materiais de IR recentes são estruturados</ul>]]> </content> </entry> <entry><title xml:lang="pt-BR">Conceitos básicos de criptografia</title><link href="https://www.yunseo.kim/pt-BR/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/basic-concepts-of-cryptography/" rel="alternate" type="text/html" hreflang="cs" /><published>2025-11-26T00:00:00+09:00</published> <updated>2025-12-06T16:33:45+09:00</updated> <id>https://www.yunseo.kim/pt-BR/posts/basic-concepts-of-cryptography/</id> <author> <name>Yunseo Kim</name> </author> <category term="Dev" /> <category term="Cryptography" /> <summary xml:lang="pt-BR">Entenda o que é criptografia e conheça os conceitos fundamentais: criptografia simétrica e assimétrica, princípio de Kerckhoffs, chaves, protocolos e segurança.</summary> <content type="html" xml:lang="pt-BR"> <![CDATA[<p>Entenda o que é criptografia e conheça os conceitos fundamentais: criptografia simétrica e assimétrica, princípio de Kerckhoffs, chaves, protocolos e segurança.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="o-que-é-criptografia">O que é criptografia</h2><p><strong>Criptografia (cryptography)</strong> é, em essência, um subcampo da ciência cujo objetivo é proteger <strong>protocolos (protocol)</strong> contra ações adversárias.</p><p>Aqui, protocolo é a lista de etapas que uma ou mais pessoas precisam seguir para alcançar algo. Por exemplo, suponha que você queira compartilhar a área de transferência entre dispositivos; nesse caso, o seguinte poderia ser um protocolo para compartilhamento de área de transferência:</p><ol><li>Quando houver alguma alteração na área de transferência em um dos dispositivos, o conteúdo é copiado e enviado ao servidor.<li>O servidor avisa os demais dispositivos de que houve uma alteração na área de transferência compartilhada.<li>Os demais dispositivos fazem o download, a partir do servidor, do conteúdo dessa área de transferência compartilhada.</ol><p>Esse, porém, não é um bom protocolo: se o conteúdo da área de transferência for enviado ao servidor e baixado dele em texto puro, alguém no meio do caminho — ou até o próprio servidor — pode bisbilhotar o conteúdo durante a transmissão. É exatamente aqui que entra a criptografia: levar em conta a existência de um adversário que tenta espionar o conteúdo da área de transferência e defender‑se disso.</p><h2 id="criptografia-simétrica">Criptografia simétrica</h2><h3 id="criptografia-simétrica-1">Criptografia simétrica</h3><blockquote><p>Imagine que Alice precise enviar uma carta para Bob.<br /> Alice quer transmitir informações sigilosas a Bob e, para isso, ordena que um mensageiro leve a carta até ele.<br /> No entanto, Alice não confia completamente nesse mensageiro e deseja que a mensagem permaneça em segredo para todos, exceto Bob — incluindo o próprio mensageiro que carrega a carta.</p></blockquote><p>Para esse tipo de situação foi inventado, há muito tempo, um algoritmo criptográfico chamado <strong>algoritmo de criptografia simétrica (symmetric encryption algorithm)</strong>.</p><blockquote class="prompt-info"><p><strong>Primitivo (primitive)</strong><br /> A palavra <em>primitive</em> significa, em dicionários, algo como “primitivo”, “elementar”.<br /> Em criptografia, também se usa com frequência o termo <em>primitivo</em> (<em>primitive</em>); aqui, ele significa a menor unidade de função ou algoritmo que compõe um sistema criptográfico.<br /> Você pode pensar nisso como os “blocos básicos” ou a “lógica fundamental” do sistema.</p></blockquote><p>Considere um primitivo que fornece as duas funções seguintes:</p><ul><li><code class="language-plaintext highlighter-rouge">ENCRYPT</code>: recebe como entrada uma <strong>chave secreta (secret key)</strong> (geralmente um número grande) e uma <strong>mensagem (message)</strong> e produz, como saída, uma sequência de números que representa a mensagem cifrada;<li><code class="language-plaintext highlighter-rouge">DECRYPT</code>: é a função inversa de <code class="language-plaintext highlighter-rouge">ENCRYPT</code>; recebe a mesma chave secreta e a mensagem cifrada, e devolve a mensagem original.</ul><p>Para usar esse primitivo criptográfico de modo a esconder a mensagem de Alice de terceiros — incluindo o mensageiro —, Alice e Bob precisam primeiro se encontrar e combinar previamente qual chave secreta irão usar. Depois disso, Alice pode usar a função <code class="language-plaintext highlighter-rouge">ENCRYPT</code> com a chave secreta combinada para cifrar a mensagem e enviá‑la a Bob por meio do mensageiro. Então Bob, usando a mesma chave secreta, aplica <code class="language-plaintext highlighter-rouge">DECRYPT</code> e obtém a mensagem original.</p><p>Esse processo de cifrar um dado com uma chave secreta, tornando‑o indistinguível de ruído aleatório para um observador externo, é o método padrão em criptografia para proteger protocolos.</p><p>A criptografia simétrica faz parte de uma categoria mais ampla de algoritmos chamada <strong>criptografia simétrica (symmetric cryptography)</strong> ou <strong>criptografia de chave secreta (secret key cryptography)</strong>, e em alguns casos pode haver mais de uma chave.</p><h2 id="princípio-de-kerckhoffs">Princípio de Kerckhoffs</h2><p>Hoje em dia, em vez de cartas em papel, usamos meios de comunicação muito mais poderosos, como computadores e a internet, para nos comunicarmos quase em tempo real. Por outro lado, isso também significa que os “mensageiros maliciosos” ficaram muito mais poderosos: pode ser uma rede Wi‑Fi pública e insegura em um café, pode ser uma operadora de telecomunicações (ISP), pode ser qualquer um dos inúmeros equipamentos e servidores que formam a infraestrutura da internet, órgãos governamentais, ou até o próprio dispositivo em que o algoritmo é executado. Adversários podem observar muito mais mensagens em tempo real, e conseguem interceptá‑las, modificá‑las ou censurá‑las em questão de nanossegundos sem serem notados.</p><p>Da longa história de tentativas e erros em criptografia surgiu um princípio fundamental para se obter segurança confiável: <u>os primitivos devem ser analisados publicamente</u>. A abordagem oposta é chamada de <strong>segurança pela obscuridade (security by obscurity)</strong>, que tem limitações claras e, por isso, está praticamente abandonada hoje em dia.</p><p>Esse princípio fundamental foi formulado pela primeira vez em 11883 pelo linguista e criptógrafo holandês Auguste Kerckhoffs e ficou conhecido como <strong>princípio de Kerckhoffs (Kerckhoffs’s principle)</strong>. O mesmo princípio foi enunciado de outra forma pelo matemático, cientista da computação e criptógrafo americano Claude Shannon, pai da teoria da informação, na frase “The enemy knows the system” (“o inimigo conhece o sistema”), ou seja, “ao projetar um sistema, deve‑se assumir que o inimigo irá conhecê‑lo”. Essa formulação é conhecida como a <strong>máxima de Shannon (Shannon’s maxim)</strong>.</p><p>A segurança de um sistema criptográfico deve depender apenas do sigilo da chave; o próprio sistema pode ser público sem que isso represente um problema — na verdade, é desejável que seja amplamente divulgado, como no caso do AES, para que muitos <strong>criptoanalistas (cryptanalysts)</strong> possam testá‑lo e analisá‑lo.</p><p>Segredos sempre correm o risco de vazar e, portanto, são potenciais pontos de falha. Quanto menor a parte que precisa ser mantida em segredo, mais favorável é a situação para o defensor. Manter todo um sistema criptográfico grande e complexo em segredo por um longo tempo é extremamente difícil; já manter apenas a chave em sigilo é relativamente mais fácil. Além disso, mesmo que um segredo acabe vazando, é muito mais simples substituir apenas a chave comprometida por uma nova do que trocar todo o sistema criptográfico.</p><h2 id="criptografia-assimétrica">Criptografia assimétrica</h2><p>Muitos protocolos, na prática, funcionam com base em criptografia simétrica; porém, esse modelo pressupõe que as duas partes participantes se encontrem ao menos uma vez para decidir qual chave usar. Surge então a questão de como decidir previamente a chave e como compartilhá‑la com segurança. Esse problema é chamado de <strong>distribuição de chaves (key distribution)</strong>. Durante muito tempo ele foi um grande desafio, até que, no final da década de 11970, surgiram os algoritmos de <strong>criptografia assimétrica (asymmetric cryptography)</strong> ou <strong>criptografia de chave pública (public key cryptography)</strong>, que finalmente trouxeram uma solução prática.</p><p>Os primitivos mais representativos de criptografia assimétrica são a <strong>troca de chaves (key exchange)</strong>, a <strong>criptografia assimétrica (asymmetric encryption)</strong> e a <strong>assinatura digital (digital signature)</strong>.</p><h3 id="troca-de-chaves">Troca de chaves</h3><p>A <strong>troca de chaves</strong> funciona, em linhas gerais, da seguinte forma:</p><ol><li>Alice e Bob concordam em usar em comum um determinado conjunto de parâmetros $G$.<li>Alice e Bob escolhem, cada um, sua <strong>chave privada (private key)</strong>, $a$ e $b$, respectivamente.<li>Alice e Bob combinam os parâmetros públicos $G$ com suas chaves privadas $a$ e $b$ para calcular suas <strong>chaves públicas (public keys)</strong>, $A = f(G,a)$ e $B = f(G,b)$, e as compartilham publicamente.<li>Alice usa a chave pública de Bob $B = f(G,b)$ e sua própria chave privada $a$ para calcular $f(B,a) = f(f(G,b),a)$; Bob faz o análogo com a chave pública de Alice $A = f(G,a)$ e sua chave privada $b$, calculando $f(A,b) = f(f(G,a),b)$.<li>Se usarmos uma função $f$ apropriada que satisfaça $f(f(G,a),b) = f(f(G,b),a)$, então, ao final, Alice e Bob compartilharão o mesmo segredo. Um terceiro pode até conhecer $G$ e as chaves públicas $A = f(G,a)$ e $B = f(G,b)$, mas, a partir apenas disso, não consegue obter $f(A,b)$, de modo que o segredo permanece protegido.</ol><p>Em geral, o segredo assim compartilhado é usado como chave secreta em um esquema de <a href="#criptografia-simétrica">criptografia simétrica</a>, para cifrar posteriormente outras mensagens trocadas entre as partes.</p><p>O primeiro, e ainda hoje o mais representativo, algoritmo de troca de chaves foi batizado em homenagem aos seus autores, Whitfield Diffie e Martin Hellman: o algoritmo de troca de chaves de Diffie–Hellman.</p><p>Contudo, a troca de chaves de Diffie–Hellman também tem limitações. Imagine que um atacante intercepte as chaves públicas $A = f(G,a)$ e $B = f(G,b)$ durante a fase de troca e as substitua pela sua própria chave pública $M = f(G,m)$ antes de encaminhá‑las a Alice e Bob. Nesse caso, Alice e o atacante passam a compartilhar um falso segredo $f(M,a) = f(A,m)$, e Bob e o atacante compartilham outro falso segredo $f(M,b) = f(B,m)$. Assim, o atacante pode se passar por Bob para Alice e por Alice para Bob. Diz‑se, nesse cenário, que <u><strong>um atacante intermediário (man‑in‑the‑middle, MITM)</strong> conseguiu atacar o protocolo com sucesso</u>. Portanto, a troca de chaves, por si só, não resolve o problema da confiança entre as partes; ela apenas simplifica o procedimento quando há muitos participantes.</p><h3 id="criptografia-assimétrica-1">Criptografia assimétrica</h3><p>Logo após a invenção da troca de chaves de Diffie–Hellman, surgiu rapidamente um desenvolvimento sucessor: o <strong>algoritmo RSA (RSA algorithm)</strong>, nomeado a partir dos sobrenomes de seus inventores, Ronald Rivest, Adi Shamir e Leonard Adleman. O RSA inclui dois primitivos: criptografia de chave pública (criptografia assimétrica) e assinatura digital, ambos pertencentes à criptografia assimétrica.</p><p>No caso da <strong>criptografia assimétrica</strong>, o objetivo básico — cifrar mensagens para garantir sigilo — é parecido com o da <a href="#criptografia-simétrica">criptografia simétrica</a>. Porém, ao contrário da criptografia simétrica, em que a mesma chave é usada tanto para cifrar quanto para decifrar, a criptografia assimétrica apresenta as seguintes características:</p><ul><li>funciona com dois tipos de chave: uma chave pública e uma chave privada;<li>qualquer pessoa pode cifrar usando a chave pública, mas apenas quem possui a chave privada correspondente consegue decifrar.</ul><ol><li>Existe uma caixa aberta (a chave pública) na qual qualquer pessoa pode colocar uma mensagem e trancar; uma vez trancada, porém, só pode ser aberta com a chave (chave privada) que Bob possui.<li>Alice coloca a mensagem que quer enviar dentro dessa caixa, tranca a caixa (cifra a mensagem) e a envia para Bob.<li>Bob recebe a caixa trancada (a mensagem cifrada) e usa a chave que possui (a chave privada) para abri‑la e retirar a mensagem (decifrá‑la).</ol><h3 id="assinatura-digital">Assinatura digital</h3><p>Além da criptografia assimétrica, o RSA também oferece o primitivo de <strong>assinatura digital</strong>, que trouxe uma enorme contribuição para o estabelecimento de confiança entre Alice e Bob. Para assinar uma mensagem, o remetente usa sua própria chave privada; para verificar se uma assinatura é válida, qualquer outra pessoa utiliza a mensagem assinada, a assinatura e a chave pública do signatário.</p><h2 id="utilidade-da-criptografia">Utilidade da criptografia</h2><p>Como o objetivo da criptografia é proteger protocolos contra ações adversárias, a utilidade da criptografia depende daquilo que o protocolo em questão pretende alcançar. A maioria dos primitivos e protocolos criptográficos garante uma ou mais das propriedades abaixo:</p><ul><li><strong>Confidencialidade (confidentiality)</strong>: ocultar e proteger certas informações contra quem não deveria ter acesso a elas;<li><strong>Autenticação (authentication)</strong>: identificar a parte com quem se está conversando (por exemplo, verificar se a mensagem recebida foi realmente enviada por Alice).</ul><h2 id="ecossistema-da-criptografia">Ecossistema da criptografia</h2><pre><code class="language-mermaid">flowchart TD
    Alice["Pesquisador(a) em criptografia"]-- inventa primitivo --&gt;Primitive(Nova proposta de primitivo)
    Alice-- inventa protocolo --&gt;Protocol(Nova proposta de protocolo)
    Alice-. organiza competição .-&gt;C(Competição de algoritmos)

    David[Setor privado]-. financia .-&gt;Alice
    David-. organiza competição .-&gt;C

    Eve[Órgãos governamentais]-. financia .-&gt;Alice
    Eve-. organiza competição .-&gt;C

    Primitive --&gt; t1{"É implementável?"}
    t1-- sim --&gt;Protocol
    t1-- não --&gt;term1@{ shape: framed-circle, label: "Parar" }

    Protocol-- participa da competição --&gt;C
    Protocol-- vai para padronização --&gt;Standard(Padrão)
    Protocol-- pedido de patente --&gt;Patent(Patente expira)
    Protocol-- implementação --&gt;Library(Biblioteca)
    
    C-- vence a competição --&gt;Standard
    C-- é descartado --&gt;term2@{ shape: framed-circle, label: "Parar" }

    Standard-- implementação --&gt;Library
    Standard-- é descartado --&gt;term3@{ shape: framed-circle, label: "Parar" }

    Patent-- é descartado --&gt;term2@{ shape: framed-circle, label: "Parar" }
    Patent-- vai para padronização --&gt;Standard
    Patent-- implementação --&gt;Library

    Library-- vira padrão de fato --&gt;Standard
    Library-- é quebrada --&gt;term4@{ shape: framed-circle, label: "Parar" }
</code></pre>]]> </content> </entry> <entry><title xml:lang="pt-BR">Transformação linear, núcleo e imagem</title><link href="https://www.yunseo.kim/pt-BR/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/linear-transformation-nullspace-and-image/" rel="alternate" type="text/html" hreflang="cs" /><published>2025-09-18T00:00:00+09:00</published> <updated>2025-09-18T00:00:00+09:00</updated> <id>https://www.yunseo.kim/pt-BR/posts/linear-transformation-nullspace-and-image/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Linear Algebra" /> <summary xml:lang="pt-BR">Definimos transformação linear e estudamos os subespaços associados — núcleo (espaço nulo) e imagem —, suas dimensões (nullity e rank) e teoremas fundamentais com provas.</summary> <content type="html" xml:lang="pt-BR"> <![CDATA[<p>Definimos transformação linear e estudamos os subespaços associados — núcleo (espaço nulo) e imagem —, suas dimensões (nullity e rank) e teoremas fundamentais com provas.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="pré-requisitos">Pré-requisitos</h2><ul><li><a href="/pt-BR/posts/vectors-and-linear-combinations/">Vetores e combinações lineares</a><li><a href="/pt-BR/posts/vector-spaces-subspaces-and-matrices/">Espaços vetoriais, subespaços e matrizes</a><li><a href="posts/linear-dependence-and-independence-basis-and-dimension/">Dependência linear e independência linear, base e dimensão</a><li>Função injetora, função sobrejetora</ul><h2 id="transformação-linear">Transformação linear</h2><p>Uma função especial que preserva a estrutura de um espaço vetorial é chamada de transformação linear, conceito central que aparece com muita frequência em matemática pura, aplicada, ciências sociais, ciências naturais e engenharia.</p><blockquote class="prompt-info"><p><strong>Definição</strong><br /> Sejam $\mathbb{V}$ e $\mathbb{W}$ espaços vetoriais sobre um corpo $F$. Diz-se que uma função $T:\mathbb{V}\to\mathbb{W}$ é uma <strong>transformação linear (linear transformation)</strong> se, para todos $\mathbf{x}, \mathbf{y}\in\mathbb{V}$ e $c\in F$, valem:</p><ol><li>$T(\mathbf{x}+\mathbf{y}) = T(\mathbf{x}) + T(\mathbf{y})$<li>$T(c\mathbf{x}) = c\,T(\mathbf{x})$</ol></blockquote><p>Dizemos simplesmente que $T$ é <strong>linear</strong>. Uma transformação linear $T:\mathbb{V}\to\mathbb{W}$ satisfaz as quatro propriedades abaixo.</p><blockquote class="prompt-info"><ol><li>$T$ linear $\quad \Rightarrow \quad T(\mathbf{0}) = \mathbf{0}$<li>$T$ linear $\quad \Leftrightarrow \quad T(c\mathbf{x} + \mathbf{y}) = cT(\mathbf{x}) + T(\mathbf{y}) \; \forall \, \mathbf{x}, \mathbf{y} \in \mathbb{V},\, c \in F$<li>$T$ linear $\quad \Rightarrow \quad T(\mathbf{x} - \mathbf{y}) = T(\mathbf{x}) - T(\mathbf{y}) \; \forall \, \mathbf{x}, \mathbf{y} \in \mathbb{V}$<li>$T$ linear $\quad \Leftrightarrow \quad T\left( \sum_{i=1}^n a_i \mathbf{x}_i \right) = \sum_{i=1}^n a_i T(\mathbf{x}_i)$</ol></blockquote><blockquote class="prompt-tip"><p>Ao provar que uma função é linear, costuma ser conveniente usar a propriedade 2.</p></blockquote><blockquote class="prompt-tip"><p>A Álgebra Linear tem aplicações geométricas vastas e diversas porque muitas transformações geométricas importantes são lineares. Em particular, as três transformações centrais — <strong>rotação</strong>, <strong>simetria</strong> e <strong>projeção</strong> — são lineares.</p></blockquote><p>Duas transformações lineares aparecem especialmente com frequência.</p><blockquote class="prompt-info"><p><strong>Transformação identidade e transformação nula</strong><br /> Para espaços vetoriais $\mathbb{V}, \mathbb{W}$ sobre $F$:</p><ul><li><strong>Transformação identidade (identity transformation)</strong>: $I_\mathbb{V}:\mathbb{V}\to\mathbb{V}$ definida por $I_\mathbb{V}(\mathbf{x})=\mathbf{x}$ para todo $\mathbf{x}\in\mathbb{V}$<li><strong>Transformação nula (zero transformation)</strong>: $T_0:\mathbb{V}\to\mathbb{W}$ definida por $T_0(\mathbf{x})=\mathbf{0}$ para todo $\mathbf{x}\in\mathbb{V}$</ul></blockquote><p>Outros exemplos relevantes também são transformações lineares.</p><blockquote class="prompt-tip"><p><strong>Exemplos de transformações lineares</strong></p><ul><li>Rotação<li>Simetria<li>Projeção<li><a href="/pt-BR/posts/vector-spaces-subspaces-and-matrices/#matriz-transposta-matriz-simétrica-e-matriz-antissimétrica">Transposição</a><li>Derivada de função diferenciável<li>Integração de função contínua</ul></blockquote><h2 id="núcleo-e-imagem">Núcleo e imagem</h2><h3 id="definição-de-núcleo-e-imagem">Definição de núcleo e imagem</h3><blockquote class="prompt-info"><p><strong>Definição</strong><br /> Dado $T:\mathbb{V}\to\mathbb{W}$ linear entre espaços vetoriais $\mathbb{V}, \mathbb{W}$:</p><ul><li><p><strong>Núcleo (kernel)</strong> ou <strong>espaço nulo (null space)</strong>: o conjunto dos vetores $\mathbf{x}\in\mathbb{V}$ tais que $T(\mathbf{x})=\mathbf{0}$; denotado por $\mathrm{N}(T)$</p>\[\mathrm{N}(T) = \{ \mathbf{x} \in \mathbb{V}: T(\mathbf{x}) = \mathbf{0} \}\]<li><p><strong>Imagem (image)</strong> ou <strong>range</strong>: o subconjunto de $\mathbb{W}$ formado pelos valores de $T$; denotado por $\mathrm{R}(T)$</p>\[\mathrm{R}(T) = \{ T(\mathbf{x}): \mathbf{x} \in \mathbb{V} \}\]</ul></blockquote><blockquote class="prompt-tip"><p><strong>e.g.</strong> Para espaços vetoriais $\mathbb{V}, \mathbb{W}$, a identidade $I:\mathbb{V}\to\mathbb{V}$ e a transformação nula $T_0:\mathbb{V}\to\mathbb{W}$ satisfazem:</p><ul><li>$\mathrm{N}(I) = \{\mathbf{0}\}$<li>$\mathrm{R}(I) = \mathbb{V}$<li>$\mathrm{N}(T_0) = \mathbb{V}$<li>$\mathrm{R}(T_0) = \{\mathbf{0}\}$</ul></blockquote><p>Será um tema recorrente: o núcleo e a imagem de uma transformação linear são <a href="/pt-BR/posts/vector-spaces-subspaces-and-matrices/#subespaços">subespaços</a>.</p><blockquote class="prompt-info"><p><strong>Teorema 1</strong><br /> Se $T:\mathbb{V}\to\mathbb{W}$ é linear, então $\mathrm{N}(T)$ e $\mathrm{R}(T)$ são subespaços de $\mathbb{V}$ e $\mathbb{W}$, respectivamente.</p><p><strong>Prova</strong><br /> Denotemos os vetores nulos de $\mathbb{V}, \mathbb{W}$ por $\mathbf{0}_\mathbb{V}, \mathbf{0}_\mathbb{W}$.</p><p>Como $T(\mathbf{0}_\mathbb{V})=\mathbf{0}_\mathbb{W}$, temos $\mathbf{0}_\mathbb{V}\in \mathrm{N}(T)$. Além disso, para $\mathbf{x}, \mathbf{y}\in \mathrm{N}(T)$ e $c\in F$,</p>\[\begin{align*} T(\mathbf{x} + \mathbf{y}) &amp;= T(\mathbf{x}) + T(\mathbf{y}) = \mathbf{0}_\mathbb{W} + \mathbf{0}_\mathbb{W} = \mathbf{0}_\mathbb{W}, \\ T(c\mathbf{x}) &amp;= cT(\mathbf{x}) = c\mathbf{0}_\mathbb{W} = \mathbf{0}_\mathbb{W}. \end{align*}\]<p>$\therefore$ <a href="/pt-BR/posts/vector-spaces-subspaces-and-matrices/#subespaços">Como $\mathbf{0}_\mathbb{V} \in \mathrm{N}(T)$, $\mathbf{x} + \mathbf{y} \in \mathrm{N}(T)$ e $c\mathbf{x} \in \mathrm{N}(T)$, então $\mathrm{N}(T)$ é subespaço de $\mathbb{V}$</a>.</p><p>De modo análogo, como $T(\mathbf{0}_\mathbb{V})=\mathbf{0}_\mathbb{W}$, temos $\mathbf{0}_\mathbb{W}\in \mathrm{R}(T)$. Para quaisquer $\mathbf{x}, \mathbf{y}\in \mathrm{R}(T)$ e $c\in F$ (existem $\mathbf{v}, \mathbf{w}\in\mathbb{V}$ tais que $T(\mathbf{v})=\mathbf{x}$ e $T(\mathbf{w})=\mathbf{y}$), vale:</p>\[\begin{align*} T(\mathbf{v} + \mathbf{w}) &amp;= T(\mathbf{v}) + T(\mathbf{w}) = \mathbf{x} + \mathbf{y}, \\ T(c\mathbf{v}) &amp;= cT(\mathbf{v}) = c\mathbf{x}. \end{align*}\]<p>$\therefore$ <a href="/pt-BR/posts/vector-spaces-subspaces-and-matrices/#subespaços">Como $\mathbf{0}_\mathbb{W}\in \mathrm{R}(T)$, $\mathbf{x} + \mathbf{y} \in \mathrm{R}(T)$ e $c\mathbf{x} \in \mathrm{R}(T)$, então $\mathrm{R}(T)$ é subespaço de $\mathbb{W}$</a>. $\blacksquare$</p></blockquote><p>Além disso, dados $\mathbb{V}, \mathbb{W}$ e $T:\mathbb{V}\to\mathbb{W}$ lineares, conhecendo uma <a href="/pt-BR/posts/linear-dependence-and-independence-basis-and-dimension/#base">base</a> $\beta = \{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n \}$ de $\mathbb{V}$, podemos obter um <a href="/pt-BR/posts/vectors-and-linear-combinations/#geração">conjunto gerador</a> para $\mathrm{R}(T)$ como segue.</p><blockquote class="prompt-info"><p><strong>Teorema 2</strong><br /> Sejam $\mathbb{V}, \mathbb{W}$ e $T:\mathbb{V}\to\mathbb{W}$ lineares, e $\beta = \{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n \}$ uma <a href="/pt-BR/posts/linear-dependence-and-independence-basis-and-dimension/#base">base</a> de $\mathbb{V}$. Então</p>\[\mathrm{R}(T) = \mathrm{span}(\{T(\mathbf{v}): \mathbf{v} \in \beta \}) = \mathrm{span}(\{T(\mathbf{v}_1), T(\mathbf{v}_2), \dots, T(\mathbf{v}_n) \})\]<p><strong>Prova</strong></p>\[T(\mathbf{v}_i) \in \mathrm{R}(T) \quad \forall \mathbf{v}_i \in \beta.\]<p>Como $\mathrm{R}(T)$ é subespaço, pelo <strong>Teorema 2</strong> de <a href="/pt-BR/posts/vector-spaces-subspaces-and-matrices/#subespaços">Espaços vetoriais, subespaços e matrizes</a>,</p>\[\mathrm{span}(\{T(\mathbf{v}_1), T(\mathbf{v}_2), \dots, T(\mathbf{v}_n) \}) = \mathrm{span}(\{T(\mathbf{v}_i): \mathbf{v}_i \in \beta \}) \subseteq \mathrm{R}(T).\]<p>Além disso,</p>\[\forall \mathbf{w} \in \mathrm{R}(T) \ (\exists \mathbf{v} \in \mathbb{V} \ (\mathbf{w} = T(\mathbf{v}))).\]<p>Como $\beta$ é base de $\mathbb{V}$,</p>\[\mathbf{v} = \sum_{i=1}^n a_i \mathbf{v}_i \quad \text{(com } a_1, a_2, \dots, a_n \in F \text{)}.\]<p>Como $T$ é linear,</p>\[\mathbf{w} = T(\mathbf{v}) = \sum_{i=1}^n a_i T(\mathbf{v}_i) \in \mathrm{span}(\{T(\mathbf{v}_i): \mathbf{v}_i \in \beta \})\] \[\mathrm{R}(T) \subseteq \mathrm{span}(\{T(\mathbf{v}_i): \mathbf{v}_i \in \beta \}) = \mathrm{span}(\{T(\mathbf{v}_1), T(\mathbf{v}_2), \dots, T(\mathbf{v}_n) \}).\]<p>$\therefore$ Como simultaneamente $\mathrm{R}(T) \supseteq \mathrm{span}({T(\mathbf{v}_i): \mathbf{v}_i \in \beta })$ e $\mathrm{R}(T) \subseteq \mathrm{span}({T(\mathbf{v}_i): \mathbf{v}_i \in \beta })$, conclui-se $\mathrm{R}(T) = \mathrm{span}({T(\mathbf{v}): \mathbf{v} \in \beta })$. $\blacksquare$</p></blockquote><p>Este teorema também vale quando a base $\beta$ é infinita.</p><h3 id="teorema-da-dimensão">Teorema da dimensão</h3><p>O núcleo e a imagem são subespaços muito importantes; por isso, suas <a href="/pt-BR/posts/linear-dependence-and-independence-basis-and-dimension/#dimensão">dimensões</a> recebem nomes específicos.</p><blockquote class="prompt-info"><p>Ditos $\mathbb{V}, \mathbb{W}$ e $T:\mathbb{V}\to\mathbb{W}$ lineares, suponha que $\mathrm{N}(T)$ e $\mathrm{R}(T)$ sejam finito-dimensionais.</p><ul><li><strong>Dimensão do núcleo (nulidade, nullity)</strong>: a dimensão de $\mathrm{N}(T)$, denotada por $\mathrm{nullity}(T)$<li><strong>Posto (rank)</strong>: a dimensão de $\mathrm{R}(T)$, denotada por $\mathrm{rank}(T)$</ul></blockquote><p>Quanto maior a nulidade, menor o posto; e, reciprocamente, quanto maior o posto, menor a nulidade.</p><blockquote class="prompt-info"><p><strong>Teorema 3: Teorema da dimensão (dimension theorem)</strong><br /> Se $T:\mathbb{V}\to\mathbb{W}$ é linear e $\mathbb{V}$ é finito-dimensional, então</p>\[\mathrm{nullity}(T) + \mathrm{rank}(T) = \dim(\mathbb{V})\]</blockquote><h4 id="prova">Prova</h4><p>Seja $\dim(\mathbb{V}) = n$ e $\mathrm{nullity}(T) = \dim(\mathrm{N}(T)) = k$, e seja $\{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_k \}$ uma base de $\mathrm{N}(T)$.</p><p>Pelo <strong>Corolário 6-1</strong> de <a href="/pt-BR/posts/linear-dependence-and-independence-basis-and-dimension/#dimensão-de-subespaços">“Dependência linear e independência linear, base e dimensão”</a>, podemos estender $\{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_k \}$ a uma base $\beta = \{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n \}$ de $\mathbb{V}$.</p><p>Mostraremos que $S = \{T(\mathbf{v}_{k+1}), T(\mathbf{v}_{k+2}), \dots, T(\mathbf{v}_n) \}$ é uma base de $\mathrm{R}(T)$. Para $1 \leq i \leq k$, $T(\mathbf{v}_i)=0$; logo, pelo <a href="#definição-de-núcleo-e-imagem"><strong>Teorema 2</strong></a>,</p>\[\begin{align*} \mathrm{R}(T) &amp;= \mathrm{span}(\{T(\mathbf{v}_1), T(\mathbf{v}_2), \dots, T(\mathbf{v}_n) \}) \\ &amp;= \mathrm{span}(\{T(\mathbf{v}_{k+1}), T(\mathbf{v}_{k+2}), \dots, T(\mathbf{v}_n) \}) \\ &amp;= \mathrm{span}(S). \end{align*}\]<p>Ou seja, $S$ gera $\mathrm{R}(T)$. Pelo <strong>Corolário 5-2 do Teorema da troca</strong> de <a href="/pt-BR/posts/linear-dependence-and-independence-basis-and-dimension/#dimensão">Dependência linear e independência linear, base e dimensão</a>, basta provar que $S$ é linearmente independente para concluir que $S$ é base de $\mathrm{R}(T)$.</p><p>Se $\sum_{i=k+1}^n b_i T(\mathbf{v}_i) = 0$ (com $b_{k+1}, \dots, b_n \in F$), como $T$ é linear,</p>\[\sum_{i=k+1}^n b_i T(\mathbf{v}_i) = 0 \Leftrightarrow T\left(\sum_{i=k+1}^n b_i \mathbf{v}_i \right) = 0 \Leftrightarrow \sum_{i=k+1}^n b_i \mathbf{v}_i \in \mathrm{N}(T).\]<p>Portanto,</p>\[\begin{align*} &amp;\exists c_1, \dots, c_k \in F \text{ tais que} \\ &amp;\sum_{i=k+1}^n b_i \mathbf{v}_i = \sum_{i=1}^k c_i \mathbf{v}_i \\ \Leftrightarrow &amp;\sum_{i=1}^k (-c_i)\mathbf{v}_i + \sum_{i=k+1}^n b_i \mathbf{v}_i = 0. \end{align*}\]<p>Como $\beta$ é base de $\mathbb{V}$, a única solução de $\sum_{i=1}^k (-c_i)\mathbf{v}_i + \sum_{i=k+1}^n b_i \mathbf{v}_i = 0$ é</p>\[c_1 = \cdots = c_k = b_{k+1} = \cdots = b_n = 0,\]<p>e daí</p>\[\sum_{i=k+1}^n b_i T(\mathbf{v}_i) = 0 \quad \Rightarrow \quad b_i = 0.\]<p>Logo, $S$ é linearmente independente e é base de $\mathrm{R}(T)$.</p>\[\therefore \mathrm{rank}(T) = n - k = \dim{\mathbb{V}} - \mathrm{nullity}(T). \blacksquare\]<h3 id="transformações-lineares-e-funções-injetorassobrejetoras">Transformações lineares e funções injetoras/sobrejetoras</h3><p>Para transformações lineares, injeção e sobrejeção estão intimamente ligadas ao posto e à nulidade.</p><blockquote class="prompt-info"><p><strong>Teorema 4</strong><br /> Para $T:\mathbb{V}\to\mathbb{W}$ linear,</p>\[T \text{ é injetora} \quad \Leftrightarrow \quad \mathrm{N}(T) = \{\mathbf{0}\}.\]</blockquote><blockquote class="prompt-info"><p><strong>Teorema 5</strong><br /> Se $\mathbb{V}$ e $\mathbb{W}$ são finito-dimensionais e têm a mesma dimensão, então, para $T:\mathbb{V}\to\mathbb{W}$ linear, as quatro afirmações são equivalentes:</p><ol><li>$T$ é injetora.<li>$\mathrm{nullity}(T) = 0$<li>$\mathrm{rank}(T) = \dim(\mathbb{V})$<li>$T$ é sobrejetora.</ol></blockquote><p>Usando o <a href="#teorema-da-dimensão">Teorema da dimensão</a>, as <a href="#transformação-linear">Propriedades 1 e 3 das transformações lineares</a> e o <strong>Teorema 6</strong> de <a href="/pt-BR/posts/linear-dependence-and-independence-basis-and-dimension/#dimensão-de-subespaços">“Dependência linear e independência linear, base e dimensão”</a>, pode-se provar os Teoremas 4 e 5.</p><p>Estes dois teoremas são úteis para decidir se uma transformação linear é injetora ou sobrejetora.</p><blockquote class="prompt-warning"><p>Para um espaço vetorial infinito-dimensional $\mathbb{V}$ e $T:\mathbb{V}\to\mathbb{V}$ linear, injeção e sobrejeção não são, em geral, equivalentes.</p></blockquote><p>Se uma transformação linear é injetora, o seguinte resultado pode ser útil, em certos casos, para testar a independência linear de um subconjunto dado.</p><blockquote class="prompt-info"><p><strong>Teorema 6</strong><br /> Sejam $\mathbb{V}, \mathbb{W}$ espaços vetoriais e $T:\mathbb{V}\to\mathbb{W}$ linear injetora. Para um subconjunto $S\subseteq \mathbb{V}$, vale:</p>\[S \text{ é linearmente independente} \quad \Leftrightarrow \quad \{T(\mathbf{v}): \mathbf{v} \in S \} \text{ é linearmente independente.}\]</blockquote><h2 id="transformações-lineares-e-base">Transformações lineares e base</h2><p>Uma característica importante das transformações lineares é que seu comportamento fica determinado pela escolha de uma base.</p><blockquote class="prompt-info"><p><strong>Teorema 7</strong><br /> Sejam $\mathbb{V}, \mathbb{W}$ espaços vetoriais sobre $F$, $\{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n \}$ uma base de $\mathbb{V}$ e $\mathbf{w}_1, \mathbf{w}_2, \dots, \mathbf{w}_n \in \mathbb{W}$. Existe uma única transformação linear $T:\mathbb{V}\to\mathbb{W}$ tal que</p>\[T(\mathbf{v}_i) = \mathbf{w}_i \quad (i = 1, 2, \dots, n).\]<p><strong>Prova</strong><br /> Para $\mathbf{x}\in\mathbb{V}$, a representação por combinação linear na base é única:</p>\[\mathbf{x} = \sum_{i=1}^n a_i \mathbf{v}_i \quad (a_1, a_2, \dots, a_n \in F).\]<p>Defina $T:\mathbb{V}\to\mathbb{W}$ por</p>\[T(\mathbf{x}) = T\left( \sum_{i=1}^n a_i \mathbf{v}_i \right) = \sum_{i=1}^n a_i \mathbf{w}_i.\]<p>i) Para $i=1,2,\dots,n$, $T(\mathbf{v}_i)=\mathbf{w}_i$.</p><p>ii) Se $U:\mathbb{V}\to\mathbb{W}$ é outra transformação linear com $U(\mathbf{v}_i)=\mathbf{w}_i$ para $i=1,\dots,n$, então, para $\mathbf{x}=\sum_{i=1}^n a_i \mathbf{v}_i \in \mathbb{V}$,</p>\[U(\mathbf{x}) = \sum_{i=1}^n a_i U(\mathbf{v}_i) = \sum_{i=1}^n a_i \mathbf{w}_i = T(\mathbf{x}).\] \[\therefore U = T.\]<p>Pelos itens i) e ii), a única transformação linear com $T(\mathbf{v}_i)=\mathbf{w}_i$ para $i=1,\dots,n$ é</p>\[T(\mathbf{x}) = T\left( \sum_{i=1}^n a_i \mathbf{v}_i \right) = \sum_{i=1}^n a_i \mathbf{w}_i. \quad \blacksquare\]<p><strong>Corolário 7-1</strong><br /> Se $\mathbb{V}, \mathbb{W}$ são espaços vetoriais e $\mathbb{V}$ possui uma base finita $\{\mathbf{v}_1, \mathbf{v}_2, \dots, \mathbf{v}_n \}$, então duas transformações lineares $U, T:\mathbb{V}\to\mathbb{W}$ que satisfaçam $U(\mathbf{v}_i)=T(\mathbf{v}_i)$ para $i=1,\dots,n$ são iguais: $U=T$.<br /> Isto é, <u>se coincidem nos valores da base, são a mesma transformação linear.</u></p></blockquote>]]> </content> </entry> <entry><title xml:lang="pt-BR">Dependência linear e independência linear, base e dimensão</title><link href="https://www.yunseo.kim/pt-BR/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/linear-dependence-and-independence-basis-and-dimension/" rel="alternate" type="text/html" hreflang="cs" /><published>2025-09-16T00:00:00+09:00</published> <updated>2025-10-25T21:21:39+09:00</updated> <id>https://www.yunseo.kim/pt-BR/posts/linear-dependence-and-independence-basis-and-dimension/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Linear Algebra" /> <summary xml:lang="pt-BR">Revisão de dependência e independência linear e das noções de base e dimensão em espaços vetoriais: definições, teoremas essenciais, corolários e exemplos.</summary> <content type="html" xml:lang="pt-BR"> <![CDATA[<p>Revisão de dependência e independência linear e das noções de base e dimensão em espaços vetoriais: definições, teoremas essenciais, corolários e exemplos.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="pré-requisitos">Pré-requisitos</h2><ul><li><a href="/pt-BR/posts/vectors-and-linear-combinations/">Vetores e combinações lineares</a><li><a href="/pt-BR/posts/vector-spaces-subspaces-and-matrices/">Espaços vetoriais, subespaços e matrizes</a></ul><h2 id="dependência-linear-e-independência-linear">Dependência linear e independência linear</h2><p>Dado um <a href="/pt-BR/posts/vector-spaces-subspaces-and-matrices/#espaço-vetorial">espaço vetorial</a> $\mathbb{V}$ e um <a href="/pt-BR/posts/vector-spaces-subspaces-and-matrices/#subespaços">subespaço</a> $\mathbb{W}$, queremos encontrar um subconjunto finito mínimo $S$ que <a href="/pt-BR/posts/vectors-and-linear-combinations/#combinação-linear-de-vetores">gere</a> $\mathbb{W}$.</p><p>Seja $S = \{\mathbf{u}_1, \mathbf{u}_2, \mathbf{u}_3, \mathbf{u}_4 \}$ tal que $\mathrm{span}(S) = \mathbb{W}$. Como decidir se existe um subconjunto próprio de $S$ que ainda gera $\mathbb{W}$? Isso equivale a verificar se algum vetor de $S$ pode ser escrito como <a href="/pt-BR/posts/vectors-and-linear-combinations/#combinação-linear-de-vetores">combinação linear</a> dos demais. Por exemplo, uma condição necessária e suficiente para expressar $\mathbf{u}_4$ como combinação linear dos outros três é a existência de escalares $a_1, a_2, a_3$ que satisfaçam:</p>\[\mathbf{u}_4 = a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + a_3\mathbf{u}_3\]<p>No entanto, montar e resolver um sistema linear assim para cada uma de $\mathbf{u}_1$, $\mathbf{u}_2$, $\mathbf{u}_3$, $\mathbf{u}_4$ é trabalhoso. Em vez disso, reescrevamos:</p>\[a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + a_3\mathbf{u}_3 + a_4\mathbf{u}_4 = \mathbf{0}\]<p>Se algum vetor de $S$ for combinação linear dos outros, então existe uma representação do vetor nulo como combinação linear dos vetores de $S$ em que pelo menos um dos coeficientes $a_1, a_2, a_3, a_4$ é não nulo. A recíproca também é verdadeira: se existe uma representação do vetor nulo como combinação linear dos vetores de $S$ com algum coeficiente não nulo, então algum vetor de $S$ é combinação linear dos demais.</p><p>Generalizando, definimos a seguir <strong>dependência linear</strong> e <strong>independência linear</strong>.</p><blockquote class="prompt-info"><p><strong>Definição</strong><br /> Para um subconjunto $S$ de um espaço vetorial $\mathbb{V}$, se existirem vetores distintos $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n \in S$ e escalares $a_1, a_2, \dots, a_n$, não todos nulos, tais que $a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + \cdots + a_n\mathbf{u}_n = \mathbf{0}$, dizemos que $S$ (e esses vetores) é um conjunto de vetores <strong>linearmente dependentes</strong>. Caso contrário, é um conjunto <strong>linearmente independente</strong>.</p></blockquote><p>Para quaisquer vetores $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$, se $a_1 = a_2 = \cdots = a_n = 0$, então $a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + \cdots + a_n\mathbf{u}_n = \mathbf{0}$. Chamamos isso de <strong>representação trivial do vetor nulo</strong>.</p><p>As três proposições abaixo são sempre verdadeiras em qualquer espaço vetorial. Em particular, a <strong>Proposição 3</strong> é muito útil para testar a independência linear de um conjunto finito.</p><blockquote class="prompt-info"><ul><li><strong>Proposição 1</strong>: O conjunto vazio é linearmente independente. Para um conjunto ser linearmente dependente, ele não pode ser vazio.<li><strong>Proposição 2</strong>: Um conjunto formado por um único vetor não nulo é linearmente independente.<li><strong>Proposição 3</strong>: Um conjunto é linearmente independente se, e somente se, a única maneira de representar $\mathbf{0}$ como combinação linear dos vetores do conjunto é a representação trivial.</ul></blockquote><p>Também são importantes os seguintes resultados.</p><blockquote class="prompt-info"><p><strong>Teorema 1</strong><br /> Seja $\mathbb{V}$ um espaço vetorial e $S_1 \subseteq S_2 \subseteq \mathbb{V}$. Se $S_1$ é linearmente dependente, então $S_2$ também é linearmente dependente.</p><p><strong>Corolário 1-1</strong><br /> Seja $\mathbb{V}$ um espaço vetorial e $S_1 \subseteq S_2 \subseteq \mathbb{V}$. Se $S_2$ é linearmente independente, então $S_1$ também é linearmente independente.</p></blockquote><blockquote class="prompt-info"><p><strong>Teorema 2</strong><br /> Seja $\mathbb{V}$ um espaço vetorial e $S$ um subconjunto linearmente independente. Para $\mathbf{v} \in \mathbb{V}$ com $\mathbf{v} \notin S$, uma condição necessária e suficiente para que $S \cup \{\mathbf{v}\}$ seja linearmente dependente é que $\mathbf{v} \in \mathrm{span}(S)$.</p><p>Em outras palavras, <strong>se nenhum subconjunto próprio de $S$ gera o mesmo espaço que $S$, então $S$ é linearmente independente.</strong></p></blockquote><h2 id="base-e-dimensão">Base e dimensão</h2><h3 id="base">Base</h3><p>Se $S$ é um conjunto gerador de $\mathbb{W}$ e é <a href="#dependência-linear-e-independência-linear">linearmente independente</a>, então todo vetor de $\mathbb{W}$ pode ser expresso como combinação linear de vetores de $S$, e essa expressão é única (<strong>Teorema 3</strong>). Assim, definimos um conjunto gerador linearmente independente como <strong>base (basis)</strong> do espaço.</p><blockquote class="prompt-info"><p><strong>Definição de base</strong><br /> Para um espaço vetorial $\mathbb{V}$ e um subconjunto $\beta$, se $\beta$ é linearmente independente e gera $\mathbb{V}$, então $\beta$ é uma <strong>base (basis)</strong> de $\mathbb{V}$. Dizemos que os vetores de $\beta$ formam uma base de $\mathbb{V}$.</p></blockquote><blockquote class="prompt-tip"><p>$\mathrm{span}(\emptyset) = \{\mathbf{0}\}$ e $\emptyset$ é linearmente independente. Logo, o conjunto vazio é uma base do espaço nulo.</p></blockquote><p>Em particular, a seguinte base especial de $F^n$ é chamada de <strong>base padrão (standard basis)</strong> de $F^n$.</p><blockquote class="prompt-info"><p><strong>Definição de base padrão</strong><br /> Para o espaço vetorial $F^n$, considere os vetores</p>\[\mathbf{e}_1 = (1,0,0,\dots,0),\ \mathbf{e}_2 = (0,1,0,\dots,0),\ \dots, \mathbf{e}_n = (0,0,0,\dots,1)\]<p>O conjunto $\{\mathbf{e}_1, \mathbf{e}_2, \dots, \mathbf{e}_n \}$ é uma base de $F^n$, chamada <strong>base padrão (standard basis)</strong> de $F^n$.</p></blockquote><blockquote class="prompt-info"><p><strong>Teorema 3</strong><br /> Para um espaço vetorial $\mathbb{V}$ e vetores distintos $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n \in \mathbb{V}$, o conjunto $\beta = \{\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n \}$ é uma base de $\mathbb{V}$ se, e somente se, todo vetor $\mathbf{v} \in \mathbb{V}$ pode ser escrito de forma única como combinação linear de vetores de $\beta$. Ou seja, existem escalares únicos $(a_1, a_2, \dots, a_n)$ tais que</p>\[\mathbf{v} = a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + \cdots + a_n\mathbf{u}_n\]</blockquote><p>Pelo <strong>Teorema 3</strong>, quando vetores distintos $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$ formam uma base de um espaço vetorial $\mathbb{V}$, então dentro desse espaço existe uma correspondência biunívoca entre vetores $\mathbf{v}$ e $n$-uplas escalares $(a_1, a_2, \dots, a_n)$. Veremos mais adiante, ao estudar <strong>invertibilidade</strong> e <strong>isomorfismo</strong>, que, nesse caso, $\mathbb{V}$ e $F^n$ são <u>essencialmente iguais</u>.</p><blockquote class="prompt-info"><p><strong>Teorema 4</strong><br /> Se $S$ é um conjunto finito tal que $\mathrm{span}(S) = \mathbb{V}$, então algum subconjunto de $S$ é uma base de $\mathbb{V}$. Portanto, nesse caso, $\mathbb{V}$ admite uma base finita.</p></blockquote><blockquote class="prompt-tip"><p>Muitos espaços vetoriais se enquadram no escopo de aplicação do <strong>Teorema 4</strong>, mas nem todos. <u>Uma base pode ser infinita</u>.</p></blockquote><h3 id="dimensão">Dimensão</h3><blockquote class="prompt-info"><p><strong>Teorema 5: Teorema da troca (replacement theorem)</strong><br /> Seja $G$ um conjunto com $n$ vetores tal que $\mathrm{span}(G) = \mathbb{V}$. Se $L \subseteq \mathbb{V}$ é um conjunto de $m$ vetores linearmente independentes, então $m \leq n$. Além disso, existe um subconjunto $H \subseteq G$ com $n-m$ vetores tal que $\mathrm{span}(L \cup H) = \mathbb{V}$.</p></blockquote><p>Disso seguem dois corolários muito importantes.</p><blockquote class="prompt-info"><p><strong>Corolário 5-1 do Teorema da troca</strong><br /> Se um espaço vetorial $\mathbb{V}$ possui alguma base finita, então toda base de $\mathbb{V}$ é finita e todas têm o mesmo número de vetores.</p></blockquote><p>Portanto, o número de vetores de uma base de $\mathbb{V}$ é uma propriedade intrínseca do espaço e é chamado de <strong>dimensão</strong>.</p><blockquote class="prompt-info"><p><strong>Definição de dimensão</strong><br /> Um espaço vetorial que admite uma base finita é dito de <strong>dimensão finita</strong>; nesse caso, o número $n$ de elementos de uma base é a <strong>dimensão</strong> do espaço e é denotado por $\dim(\mathbb{V})$. Se não admite base finita, o espaço é de <strong>dimensão infinita</strong>.</p></blockquote><blockquote class="prompt-tip"><ul><li>$\dim(\{\mathbf{0}\}) = 0$<li>$\dim(F^n) = n$<li>$\dim(\mathcal{M}_{m \times n}(F)) = mn$</ul></blockquote><blockquote class="prompt-tip"><p>A dimensão de um espaço vetorial pode variar conforme o corpo de escalares.</p><ul><li>Sobre o corpo dos complexos $\mathbb{C}$, o espaço vetorial dos complexos tem dimensão $1$, com base $\{1\}$<li>Sobre o corpo dos reais $\mathbb{R}$, o mesmo espaço (considerado como espaço real) tem dimensão $2$, com base $\{1,i\}$</ul></blockquote><p>Em um espaço vetorial finito-dimensional $\mathbb{V}$, qualquer subconjunto com mais do que $\dim(\mathbb{V})$ vetores nunca é linearmente independente.</p><blockquote class="prompt-info"><p><strong>Corolário 5-2 do Teorema da troca</strong><br /> Seja $\mathbb{V}$ um espaço vetorial de dimensão $n$.</p><ol><li>Todo conjunto gerador finito de $\mathbb{V}$ tem pelo menos $n$ vetores, e todo conjunto gerador com $n$ vetores é uma base de $\mathbb{V}$.<li>Todo subconjunto linearmente independente de $\mathbb{V}$ com $n$ vetores é uma base de $\mathbb{V}$.<li>Todo subconjunto linearmente independente de $\mathbb{V}$ pode ser estendido a uma base. Isto é, se $L \subseteq \mathbb{V}$ é linearmente independente, então existe uma base $\beta \supseteq L$ de $\mathbb{V}$.</ol></blockquote><h3 id="dimensão-de-subespaços">Dimensão de subespaços</h3><blockquote class="prompt-info"><p><strong>Teorema 6</strong><br /> Se $\mathbb{V}$ é finito-dimensional e $\mathbb{W}$ é um subespaço de $\mathbb{V}$, então $\mathbb{W}$ é finito-dimensional e $\dim(\mathbb{W}) \leq \dim(\mathbb{V})$. Em particular, se $\dim(\mathbb{W}) = \dim(\mathbb{V})$, então $\mathbb{W} = \mathbb{V}$.</p><p><strong>Corolário 6-1</strong><br /> Para um subespaço $\mathbb{W}$ de um espaço vetorial finito-dimensional $\mathbb{V}$, toda base de $\mathbb{W}$ pode ser estendida a uma base de $\mathbb{V}$.</p></blockquote><p>Pelo <strong>Teorema 6</strong>, as dimensões dos subespaços de $\mathbb{R}^3$ podem ser $0,1,2,3$.</p><ul><li>Dimensão 0: o espaço nulo $\{\mathbf{0}\}$ (apenas a origem)<li>Dimensão 1: reta que passa pela origem ($\mathbf{0}$)<li>Dimensão 2: plano que contém a origem ($\mathbf{0}$)<li>Dimensão 3: todo o espaço euclidiano tridimensional</ul>]]> </content> </entry> <entry><title xml:lang="pt-BR">Espaços vetoriais, subespaços e matrizes</title><link href="https://www.yunseo.kim/pt-BR/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/vector-spaces-subspaces-and-matrices/" rel="alternate" type="text/html" hreflang="cs" /><published>2025-09-13T00:00:00+09:00</published> <updated>2025-10-28T18:44:54+09:00</updated> <id>https://www.yunseo.kim/pt-BR/posts/vector-spaces-subspaces-and-matrices/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Linear Algebra" /> <summary xml:lang="pt-BR">Definições de espaço vetorial e subespaço, com exemplos: espaços de matrizes e de funções. Destaque para matrizes simétricas, antissimétricas, triangulares e diagonais.</summary> <content type="html" xml:lang="pt-BR"> <![CDATA[<p>Definições de espaço vetorial e subespaço, com exemplos: espaços de matrizes e de funções. Destaque para matrizes simétricas, antissimétricas, triangulares e diagonais.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><ul><li><strong>Matriz</strong><ul><li>O elemento da linha $i$ e coluna $j$ da matriz $A$ é denotado por $A_{ij}$ ou $a_{ij}$<li><strong>Elemento diagonal</strong>: o elemento $a_{ij}$ com $i=j$<li>Os elementos $a_{i1}, a_{i2}, \dots, a_{in}$ formam a <strong>linha</strong> $i$-ésima da matriz<ul><li>Cada linha da matriz pode ser vista como um vetor em $F^n$<li>Além disso, um vetor linha de $F^n$ pode ser visto como outra matriz $1 \times n$</ul><li>Os elementos $a_{1j}, a_{2j}, \dots, a_{mj}$ formam a <strong>coluna</strong> $j$-ésima da matriz<ul><li>Cada coluna da matriz pode ser vista como um vetor em $F^m$<li>Além disso, um vetor coluna de $F^m$ pode ser visto como outra matriz $m \times 1$</ul><li><strong>Matriz nula</strong>: matriz cujos elementos são todos $0$, denotada por $O$<li><strong>Matriz quadrada</strong>: matriz com o mesmo número de linhas e colunas<li>Para duas matrizes $m \times n$ $A, B$, se para todos $1 \leq i \leq m$, $1 \leq j \leq n$ vale $A_{ij} = B_{ij}$ (isto é, todos os elementos correspondentes coincidem), então dizemos que as matrizes são <strong>iguais</strong> ($A=B$)<li><strong>Matriz transposta</strong>: para $A$ de tamanho $m \times n$, a transposta $A^T$ é a matriz $n \times m$ obtida trocando linhas por colunas<li><strong>Matriz simétrica</strong>: matriz quadrada $A$ com $A^T = A$<li><strong>Matriz antissimétrica</strong>: matriz quadrada $B$ com $B^T = -B$<li><strong>Matriz triangular</strong><ul><li><strong>Triangular superior</strong>: matriz cujos elementos abaixo da diagonal são todos $0$ (isto é, $i&gt;j \Rightarrow A_{ij}=0$), geralmente denotada por $U$<li><strong>Triangular inferior</strong>: matriz cujos elementos acima da diagonal são todos $0$ (isto é, $i&lt;j \Rightarrow A_{ij}=0$), geralmente denotada por $L$</ul><li><strong>Matriz diagonal</strong>: matriz quadrada em que todos os elementos fora da diagonal são $0$ (isto é, $i \neq j \Rightarrow M_{ij}=0$ numa $n \times n$), geralmente denotada por $D$</ul><li>Espaços vetoriais representativos<ul><li><strong>$n$-uplas $F^n$</strong>:<ul><li>Conjunto de todas as $n$-uplas com componentes em um corpo $F$<li>Denotado por $F^n$, é um espaço vetorial sobre $F$</ul><li><strong>Espaço de matrizes</strong>:<ul><li>Conjunto de todas as matrizes $m \times n$ com elementos em $F$<li>Denotado por $\mathcal{M}_{m \times n}(F)$, é um espaço vetorial</ul><li><strong>Espaço de funções</strong>:<ul><li>Para um conjunto não vazio $S$ sobre um corpo $F$, o conjunto de todas as funções de $S$ em $F$<li>Denotado por $\mathcal{F}(S,F)$, é um espaço vetorial</ul></ul><li><strong>Subespaço</strong><ul><li>Um subconjunto $\mathbb{W}$ de um espaço vetorial $\mathbb{V}$ sobre $F$ é um <strong>subespaço</strong> de $\mathbb{V}$ se, com as mesmas operações de soma e multiplicação por escalar definidas em $\mathbb{V}$, ele próprio for um espaço vetorial sobre $F$<li>Para todo espaço vetorial $\mathbb{V}$, o próprio $\mathbb{V}$ e $\{0\}$ são subespaços; em particular, $\{0\}$ é o <strong>subespaço nulo</strong><li>Um subconjunto é subespaço se contiver o vetor nulo e for fechado para <a href="/pt-BR/posts/vectors-and-linear-combinations/#combinação-linear-de-vetores">combinação linear</a> (isto é, se $\mathrm{span}(\mathbb{W})=\mathbb{W}$)</ul></ul></blockquote><h2 id="prerequisites">Prerequisites</h2><ul><li><a href="/pt-BR/posts/vectors-and-linear-combinations/">Vetores e combinações lineares</a></ul><h2 id="espaço-vetorial">Espaço vetorial</h2><p>Como vimos brevemente em <a href="/pt-BR/posts/vectors-and-linear-combinations/#vetor-em-sentido-amplo-elemento-de-um-espaço-vetorial">Vetores e combinações lineares</a>, a definição algébrica de vetor e de espaço vetorial é a seguinte.</p><blockquote class="prompt-info"><p><strong>Definição</strong><br /> Um <strong>espaço vetorial</strong> (ou <strong>espaço linear</strong>) $\mathbb{V}$ sobre um corpo $F$ é um conjunto munido de duas operações, <strong>soma</strong> e <strong>multiplicação por escalar</strong>, que satisfazem as 8 condições abaixo. Os elementos de $F$ são chamados de <strong>escalares</strong>, e os de $\mathbb{V}$, de <strong>vetores</strong>.</p><ul><li><strong>Soma</strong>: para quaisquer $\mathbf{x}, \mathbf{y} \in \mathbb{V}$, existe um único elemento $\mathbf{x} + \mathbf{y} \in \mathbb{V}$. Chamamos $\mathbf{x} + \mathbf{y}$ de <strong>soma</strong> de $\mathbf{x}$ e $\mathbf{y}$.<li><strong>Multiplicação por escalar</strong>: para cada $a \in F$ e $\mathbf{x} \in \mathbb{V}$, existe um único elemento $a\mathbf{x} \in \mathbb{V}$. Chamamos $a\mathbf{x}$ de <strong>múltiplo escalar</strong> de $\mathbf{x}$.</ul><ol><li>Para todos $\mathbf{x},\mathbf{y} \in \mathbb{V}$, $\mathbf{x} + \mathbf{y} = \mathbf{y} + \mathbf{x}$. (comutatividade da adição)<li>Para todos $\mathbf{x},\mathbf{y},\mathbf{z} \in \mathbb{V}$, $(\mathbf{x}+\mathbf{y})+\mathbf{z} = \mathbf{x}+(\mathbf{y}+\mathbf{z})$. (associatividade da adição)<li>Existe $\mathbf{0} \in \mathbb{V}$ tal que, para todo $\mathbf{x} \in \mathbb{V}$, $\mathbf{x} + \mathbf{0} = \mathbf{x}$. (vetor nulo, elemento neutro da adição)<li>Para cada $\mathbf{x} \in \mathbb{V}$, existe $\mathbf{y} \in \mathbb{V}$ tal que $\mathbf{x}+\mathbf{y}=\mathbf{0}$. (inverso aditivo)<li>Para todo $\mathbf{x} \in \mathbb{V}$, $1\mathbf{x} = \mathbf{x}$. (identidade multiplicativa)<li>Para todos $a,b \in F$ e todo $\mathbf{x} \in \mathbb{V}$, $(ab)\mathbf{x} = a(b\mathbf{x})$. (associatividade da multiplicação por escalar)<li>Para todo $a \in F$ e todos $\mathbf{x},\mathbf{y} \in \mathbb{V}$, $a(\mathbf{x}+\mathbf{y}) = a\mathbf{x} + a\mathbf{y}$. (distributividade da multiplicação por escalar sobre a adição 1)<li>Para todos $a,b \in F$ e todo $\mathbf{x} \in \mathbb{V}$, $(a+b)\mathbf{x} = a\mathbf{x} + b\mathbf{x}$. (distributividade da multiplicação por escalar sobre a adição 2)</ol></blockquote><p>Mais precisamente, deveríamos escrever “$\mathbb{V}$, espaço vetorial sobre $F$”, mas, ao tratar de espaços vetoriais, o corpo não é o foco principal; assim, quando não houver risco de ambiguidade, omitimos $F$ e escrevemos apenas “espaço vetorial $\mathbb{V}$”.</p><h3 id="espaço-de-matrizes">Espaço de matrizes</h3><h4 id="vetores-linha-e-vetores-coluna">Vetores linha e vetores coluna</h4><p>Denotamos por $F^n$ o conjunto de todas as $n$-uplas com componentes em $F$. Para $u = (a_1, a_2, \dots, a_n) \in F^n$ e $v = (b_1, b_2, \dots, b_n) \in F^n$, definindo a soma e a multiplicação por escalar como abaixo, $F^n$ é um espaço vetorial sobre $F$.</p>\[\begin{align*} u + v &amp;= (a_1+b_1, a_2+b_2, \dots, a_n+b_n), \\ cu &amp;= (ca_1, ca_2, \dots, ca_n) \end{align*}\]<p>Ao escrever um vetor de $F^n$ isoladamente, costuma-se representá-lo não como <strong>vetor linha</strong> $(a_1, a_2, \dots, a_n)$, mas como <strong>vetor coluna</strong></p>\[\begin{pmatrix} a_1 \\ a_2 \\ \vdots \\ a_n \end{pmatrix}\]<blockquote class="prompt-tip"><p>Como a notação em coluna ocupa mais espaço, às vezes usa-se a <a href="#matriz-transposta-matriz-simétrica-e-matriz-antissimétrica">transposição</a> e escreve-se $(a_1, a_2, \dots, a_n)^T$.</p></blockquote><h4 id="matrizes-e-espaço-de-matrizes">Matrizes e espaço de matrizes</h4><p>Por sua vez, uma <strong>matriz</strong> $m \times n$ com elementos em $F$ é um arranjo retangular como abaixo, denotado por letras maiúsculas em itálico ($A, B, C$, etc.).</p>\[\begin{pmatrix} a_{11} &amp; a_{12} &amp; \cdots &amp; a_{1n} \\ a_{21} &amp; a_{22} &amp; \cdots &amp; a_{2n} \\ \vdots &amp; \vdots &amp; &amp; \vdots \\ a_{m1} &amp; a_{m2} &amp; \cdots &amp; a_{mn} \end{pmatrix}\]<ul><li>O elemento da linha $i$ e coluna $j$ da matriz $A$ é denotado por $A_{ij}$ ou $a_{ij}$.<li>Cada $a_{ij}$ ($1 \leq i \leq m$, $1 \leq j \leq n$) pertence a $F$.<li>O elemento $a_{ij}$ com $i=j$ é chamado de <strong>elemento diagonal</strong> da matriz.<li>Os elementos $a_{i1}, a_{i2}, \dots, a_{in}$ formam a <strong>linha</strong> $i$-ésima. Cada linha pode ser vista como um vetor de $F^n$ e, além disso, um vetor linha de $F^n$ pode ser visto como outra matriz $1 \times n$.<li>Os elementos $a_{1j}, a_{2j}, \dots, a_{mj}$ formam a <strong>coluna</strong> $j$-ésima. Cada coluna pode ser vista como um vetor de $F^m$ e, além disso, um vetor coluna de $F^m$ pode ser visto como outra matriz $m \times 1$.<li>A <strong>matriz nula</strong> $m \times n$ é aquela em que todos os elementos são $0$, denotada por $O$.<li>Uma matriz é <strong>quadrada</strong> quando tem o mesmo número de linhas e colunas.<li>Para duas matrizes $m \times n$ $A, B$, se para todos $1 \leq i \leq m$, $1 \leq j \leq n$ vale $A_{ij} = B_{ij}$ (isto é, todos os elementos correspondentes coincidem), definimos que as duas matrizes são <strong>iguais</strong> ($A=B$).</ul><p>Denotamos por $\mathcal{M}_{m \times n}(F)$ o conjunto de todas as matrizes $m \times n$ com elementos em $F$. Para $\mathbf{A},\mathbf{B} \in \mathcal{M}_{m \times n}(F)$ e $c \in F$, definindo a soma e a multiplicação por escalar como abaixo, $\mathcal{M}_{m \times n}(F)$ é um espaço vetorial, chamado <strong>espaço de matrizes</strong>.</p>\[\begin{align*} (\mathbf{A}+\mathbf{B})_{ij} &amp;= \mathbf{A}_{ij} + \mathbf{B}_{ij}, \\ (c\mathbf{A})_{ij} &amp;= c\mathbf{A}_{ij} \\ \text{(onde }1 \leq i \leq &amp;m, 1 \leq j \leq n \text{)} \end{align*}\]<p>Trata-se de uma extensão natural das operações definidas em $F^n$ e $F^m$.</p><h3 id="espaço-de-funções">Espaço de funções</h3><p>Para um conjunto não vazio $S$ sobre um corpo $F$, $\mathcal{F}(S,F)$ é o conjunto de todas as funções de $S$ em $F$. Dizemos que duas funções $f, g \in \mathcal{F}(S,F)$ são <strong>iguais</strong> ($f=g$) se, para todo $s \in S$, $f(s) = g(s)$.</p><p>Para $f,g \in \mathcal{F}(S,F)$, $c \in F$, $s \in S$, definindo a soma e a multiplicação por escalar como abaixo, $\mathcal{F}(S,F)$ é um espaço vetorial, chamado <strong>espaço de funções</strong>.</p>\[\begin{align*} (f + g)(s) &amp;= f(s) + g(s), \\ (cf)(s) &amp;= c[f(s)] \end{align*}\]<h2 id="subespaços">Subespaços</h2><blockquote class="prompt-info"><p><strong>Definição</strong><br /> Um subconjunto $\mathbb{W}$ de um espaço vetorial $\mathbb{V}$ sobre $F$ é chamado de <strong>subespaço</strong> de $\mathbb{V}$ se, com as mesmas operações de soma e multiplicação por escalar definidas em $\mathbb{V}$, ele próprio for um espaço vetorial sobre $F$.</p></blockquote><p>Para todo espaço vetorial $\mathbb{V}$, o próprio $\mathbb{V}$ e $\{0\}$ são subespaços; em particular, $\{0\}$ é o <strong>subespaço nulo</strong>.</p><p>Podemos verificar se um subconjunto é subespaço usando o seguinte teorema.</p><blockquote class="prompt-info"><p><strong>Teorema 1</strong><br /> Para um espaço vetorial $\mathbb{V}$ e um subconjunto $\mathbb{W}$, $\mathbb{W}$ é um subespaço de $\mathbb{V}$ se, e somente se, satisfizer as 3 condições abaixo. As operações são as mesmas definidas em $\mathbb{V}$.</p><ol><li>$\mathbf{0} \in \mathbb{W}$<li>$\mathbf{x}+\mathbf{y} \in \mathbb{W} \quad \forall\ \mathbf{x} \in \mathbb{W},\ \mathbf{y} \in \mathbb{W}$<li>$c\mathbf{x} \in \mathbb{W} \quad \forall\ c \in F,\ \mathbf{x} \in \mathbb{W}$</ol><p>Em resumo, se contém o vetor nulo e é fechado para <a href="/pt-BR/posts/vectors-and-linear-combinations/#combinação-linear-de-vetores">combinação linear</a> (isto é, se $\mathrm{span}(\mathbb{W})=\mathbb{W}$), então é um subespaço.</p></blockquote><p>Além disso, valem os seguintes resultados.</p><blockquote class="prompt-info"><p><strong>Teorema 2</strong></p><ul><li><p>Para qualquer subconjunto $S$ de um espaço vetorial $\mathbb{V}$, o espaço gerado $\mathrm{span}(S)$ é um subespaço de $\mathbb{V}$ que contém $S$.</p>\[S \subset \mathrm{span}(S) \leq \mathbb{V} \quad \forall\ S \subset \mathbb{V}.\]<li><p>Todo subespaço $\mathbb{W}$ de $\mathbb{V}$ que contenha $S$ contém necessariamente o espaço gerado por $S$.</p>\[\mathbb{W}\supset \mathrm{span}(S) \quad \forall\ S \subset \mathbb{W} \leq \mathbb{V}.\]</ul></blockquote><blockquote class="prompt-info"><p><strong>Teorema 3</strong><br /> Para subespaços de um espaço vetorial $\mathbb{V}$, a interseção arbitrária desses subespaços também é um subespaço de $\mathbb{V}$.</p></blockquote><h3 id="matriz-transposta-matriz-simétrica-e-matriz-antissimétrica">Matriz transposta, matriz simétrica e matriz antissimétrica</h3><p>Para uma matriz $m \times n$ $A$, a <strong>matriz transposta</strong> $A^T$ é a matriz $n \times m$ obtida trocando-se as linhas pelas colunas de $A$.</p>\[(A^T)_{ij} = A_{ji}\] \[\begin{pmatrix} 1 &amp; 2 &amp; 3 \\ 4 &amp; 5 &amp; 6 \end{pmatrix}^T = \begin{pmatrix} 1 &amp; 4 \\ 2 &amp; 5 \\ 3 &amp; 6 \end{pmatrix}\]<p>Uma matriz $A$ com $A^T = A$ é chamada de <strong>matriz simétrica</strong>; uma matriz $B$ com $B^T = -B$ é chamada de <strong>matriz antissimétrica</strong>. Matrizes simétricas e antissimétricas devem ser, necessariamente, quadradas.</p><p>Seja $\mathbb{W}_1$ o conjunto de todas as matrizes simétricas em $\mathcal{M}_{n \times n}(F)$ e $\mathbb{W}_2$ o conjunto de todas as matrizes antissimétricas em $\mathcal{M}_{n \times n}(F)$. Então $\mathbb{W}_1$ e $\mathbb{W}_2$ são subespaços de $\mathcal{M}_{n \times n}(F)$; isto é, são fechados para soma e multiplicação por escalar.</p><h3 id="matrizes-triangulares-e-matrizes-diagonais">Matrizes triangulares e matrizes diagonais</h3><p>Esses dois tipos de matrizes também são especialmente importantes.</p><p>Primeiro, chamamos de <strong>matrizes triangulares</strong> os dois tipos a seguir.</p><ul><li><strong>Triangular superior</strong>: matriz em que todos os elementos abaixo da diagonal são $0$ (isto é, $i&gt;j \Rightarrow A_{ij}=0$), usualmente denotada por $U$<li><strong>Triangular inferior</strong>: matriz em que todos os elementos acima da diagonal são $0$ (isto é, $i&lt;j \Rightarrow A_{ij}=0$), usualmente denotada por $L$</ul><p>Uma matriz quadrada em que todos os elementos fora da diagonal são $0$, isto é, uma $n \times n$ com $i \neq j \Rightarrow M_{ij}=0$, é chamada de <strong>matriz diagonal</strong> e geralmente é denotada por $D$. Uma matriz diagonal é simultaneamente triangular superior e triangular inferior.</p><p>Os conjuntos das matrizes triangulares superiores, das triangulares inferiores e das diagonais são todos subespaços de $\mathcal{M}_{m \times n}(F)$.</p>]]> </content> </entry> <entry><title xml:lang="pt-BR">Produto interno e norma</title><link href="https://www.yunseo.kim/pt-BR/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/inner-product-and-norm/" rel="alternate" type="text/html" hreflang="cs" /><published>2025-09-10T00:00:00+09:00</published> <updated>2025-10-15T05:48:53+09:00</updated> <id>https://www.yunseo.kim/pt-BR/posts/inner-product-and-norm/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Linear Algebra" /> <summary xml:lang="pt-BR">Definimos produto interno e produto escalar e, a partir deles, a norma dos vetores e o ângulo entre vetores, com fatos básicos e propriedades úteis.</summary> <content type="html" xml:lang="pt-BR"> <![CDATA[<p>Definimos produto interno e produto escalar e, a partir deles, a norma dos vetores e o ângulo entre vetores, com fatos básicos e propriedades úteis.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="pré-requisitos">Pré-requisitos</h2><ul><li><a href="/pt-BR/posts/vectors-and-linear-combinations/">Vetores e combinações lineares</a></ul><h2 id="produto-interno">Produto interno</h2><p>Em um espaço vetorial sobre $F$, a definição de <strong>produto interno (inner product)</strong> é a seguinte.</p><blockquote class="prompt-info"><p><strong>Definição de produto interno (inner product) e espaço com produto interno (inner product space)</strong><br /> Considere um espaço vetorial $\mathbb{V}$ sobre $F$. Um <strong>produto interno (inner product)</strong> em $\mathbb{V}$, denotado por $\langle \mathbf{x},\mathbf{y} \rangle$, é uma função que associa a cada par ordenado de vetores $\mathbf{x}$ e $\mathbf{y}$ em $\mathbb{V}$ um escalar em $F$, satisfazendo as condições seguintes.</p><p>Para quaisquer $\mathbf{x},\mathbf{y},\mathbf{z} \in \mathbb{V}$ e qualquer $c \in F$:</p><ol><li>$\langle \mathbf{x}+\mathbf{z}, \mathbf{y} \rangle = \langle \mathbf{x}, \mathbf{y} \rangle + \langle \mathbf{z}, \mathbf{y} \rangle$<li>$\langle c\mathbf{x}, \mathbf{y} \rangle = c \langle \mathbf{x}, \mathbf{y} \rangle$<li>$\overline{\langle \mathbf{x}, \mathbf{y} \rangle} = \langle \mathbf{y}, \mathbf{x} \rangle$ (onde $\overline{\mathbf{z}}$ é o conjugado complexo de $\mathbf{z}$)<li>Para $\mathbf{x} \neq \mathbf{0}$, tem-se $\langle \mathbf{x}, \mathbf{x} \rangle &gt; 0$.</ol><p>Um espaço vetorial $\mathbb{V}$ sobre $F$ munido de produto interno é chamado de <strong>espaço com produto interno (inner product space)</strong>. Em particular, se $F=\mathbb{C}$, diz-se <strong>espaço com produto interno complexo (complex inner product space)</strong>; se $F=\mathbb{R}$, <strong>espaço com produto interno real (real inner product space)</strong>.</p></blockquote><p>Em particular, o seguinte é chamado de <strong>produto interno padrão (standard inner product)</strong>. Verifica-se que ele satisfaz as quatro condições acima.</p><blockquote class="prompt-info"><p><strong>Definição de produto interno padrão (standard inner product)</strong><br /> Para dois vetores de $F^n$, $\mathbf{x}=(a_1, a_2, \dots, a_n)$ e $\mathbf{y}=(b_1, b_2, \dots, b_n)$, o <strong>produto interno padrão (standard inner product)</strong> em $F^n$ é definido por</p>\[\langle \mathbf{x}, \mathbf{y} \rangle = \sum_{i=1}^n a_i \overline{b_i}\]</blockquote><p>Se $F=\mathbb{R}$, como o conjugado de um número real é ele próprio, o produto interno padrão torna-se $\sum_{i=1}^n a_i b_i$. Nessa situação, costuma-se escrever $\langle \mathbf{x}, \mathbf{y} \rangle$ como $\mathbf{x} \cdot \mathbf{y}$ e chamá-lo de <strong>produto escalar (dot/scalar product)</strong>.</p><blockquote class="prompt-info"><p><strong>Definição de produto escalar (dot/scalar product)</strong><br /> Para $\mathbf{v}=(v_1, v_2, \dots, v_n)$ e $\mathbf{w}=(w_1, w_2, \dots, w_n)$ em $\mathbb{R}^n$, o <strong>produto escalar (dot/scalar product)</strong> é definido por</p>\[\mathbf{v} \cdot \mathbf{w} = \sum_{i=1}^n v_i w_i = v_1 w_1 + v_2 w_2 + \cdots + v_n w_n\]</blockquote><blockquote class="prompt-warning"><p>Aqui, “produto escalar (<strong>scalar product</strong>)” é uma operação entre vetores, distinta da “multiplicação por escalar (<strong>scalar multiplication</strong>)” — a multiplicação de um vetor por um número — tratada em <a href="/pt-BR/posts/vectors-and-linear-combinations/">Vetores e combinações lineares</a>. Em inglês os termos são parecidos e, <a href="https://www.kms.or.kr/mathdict/list.html?key=kname&amp;keyword=%EC%8A%A4%EC%B9%BC%EB%9D%BC%EA%B3%B1">de acordo com o padrão de tradução da Sociedade Matemática da Coreia, em coreano são de fato idênticos</a>; portanto, cuidado para não confundir.</p><p>Para evitar confusões, doravante usaremos preferencialmente o termo produto escalar (<strong>dot product</strong>).</p></blockquote><blockquote class="prompt-tip"><p>Em espaços euclidianos, o produto interno coincide com o produto escalar; portanto, quando não houver risco de ambiguidade, é comum chamar o produto escalar simplesmente de produto interno. Tecnicamente, porém, produto interno é um conceito mais geral que inclui o produto escalar.</p></blockquote><pre><code class="language-mermaid">flowchart TD
    A["Produto interno (Inner Product)"] --&gt;|contém| B["Produto interno padrão (Standard Inner Product)"]
    B --&gt;|"caso F = R (corpo dos reais)"| C["Produto escalar (Dot/Scalar Product)"]

    %% relação de inclusão
    C -. contido em .-&gt; B
    B -. contido em .-&gt; A
</code></pre><h2 id="comprimentonorma-de-vetores">Comprimento/norma de vetores</h2><p>Para um vetor $\mathbf{v}=(v_1, v_2, \dots, v_n)$ em $\mathbb{R}^n$, o comprimento euclidiano de $\mathbf{v}$ é definido via produto escalar por</p>\[\| \mathbf{v} \| = \sqrt{\mathbf{v} \cdot \mathbf{v}} = \left[ \sum_{i=1}^n |v_i|^2 \right]^{1/2} = \sqrt{v_1^2 + v_2^2 + \cdots + v_n^2}\]<p>Mais geralmente, em um espaço com produto interno arbitrário, a <strong>norma (norm)</strong> ou <strong>comprimento (length)</strong> de um vetor é definida por</p>\[\| \mathbf{x} \| = \sqrt{\langle \mathbf{x}, \mathbf{x} \rangle}\]<p>Em um espaço com produto interno geral, valem as propriedades importantes a seguir para a norma:</p><blockquote class="prompt-info"><p><strong>Teorema</strong><br /> Seja $\mathbb{V}$ um espaço com produto interno sobre $F$ e sejam $\mathbf{x}, \mathbf{y} \in \mathbb{V}$ e $c \in F$. Então:</p><ol><li>$\|c\mathbf{x}\| = |c| \cdot \|\mathbf{x}\|$<li>Valem as duas afirmações:<ul><li>$\|\mathbf{x}\| = 0 \iff \mathbf{x}=\mathbf{0}$<li>$\|\mathbf{x}\| \geq 0 \ \forall \mathbf{x}$</ul><li><strong>Desigualdade de Cauchy–Schwarz</strong>: $| \langle \mathbf{x}, \mathbf{y} \rangle | \leq \|\mathbf{x}\| \cdot \|\mathbf{y}\|$ (com igualdade se e somente se um dos vetores é múltiplo escalar do outro)<li><strong>Desigualdade triangular</strong>: $\| \mathbf{x} + \mathbf{y} \| \leq \|\mathbf{x}\| + \|\mathbf{y}\|$ (com igualdade se e somente se um dos vetores é múltiplo escalar do outro e ambos têm a mesma direção)</ol></blockquote><h2 id="ângulo-entre-vetores-e-vetores-unitários">Ângulo entre vetores e vetores unitários</h2><p>Um vetor de comprimento $1$ é chamado de <strong>vetor unitário (unit vector)</strong>. Além disso, para dois vetores $\mathbf{v}=(v_1, v_2, \dots, v_n)$ e $\mathbf{w}=(w_1, w_2, \dots, w_n)$ em $\mathbb{R}^n$, vale $\mathbf{v} \cdot \mathbf{w} = \|\mathbf{v}\| \cdot \|\mathbf{w}\| \cos\theta$, a partir do que obtemos o ângulo $\theta$ ($0 \leq \theta \leq \pi$) entre $\mathbf{v}$ e $\mathbf{w}$:</p>\[\theta = \arccos{\frac{\mathbf{v} \cdot \mathbf{w}}{\|\mathbf{v}\| \cdot \|\mathbf{w}\|}}\]<p>Se $\mathbf{v} \cdot \mathbf{w} = 0$, diz-se que os vetores são <strong>perpendiculares (perpendicular)</strong> ou <strong>ortogonais (orthogonal)</strong>.</p><blockquote class="prompt-tip"><p>Se dois vetores $\mathbf{v}$ e $\mathbf{w}$ são perpendiculares, então</p>\[\begin{align*} \| \mathbf{v} + \mathbf{w} \|^2 &amp;= (\mathbf{v} + \mathbf{w}) \cdot (\mathbf{v} + \mathbf{w}) \\ &amp;= \mathbf{v} \cdot \mathbf{v} + \mathbf{v} \cdot \mathbf{w} + \mathbf{w} \cdot \mathbf{v} + \mathbf{w} \cdot \mathbf{w} \\ &amp;= \mathbf{v} \cdot \mathbf{v} + \mathbf{w} \cdot \mathbf{w} \\ &amp;= \|\mathbf{v}\|^2 + \|\mathbf{w}\|^2. \end{align*}\]</blockquote><p>Generalizando para um espaço com produto interno arbitrário, temos:</p><blockquote class="prompt-info"><p><strong>Definição</strong><br /> Considere um espaço com produto interno $\mathbb{V}$. Para vetores $\mathbf{x}, \mathbf{y}$ em $\mathbb{V}$, se $\langle \mathbf{x}, \mathbf{y} \rangle = 0$, diz-se que eles são <strong>ortogonais (orthogonal)</strong> ou <strong>perpendiculares (perpendicular)</strong>. Além disso:</p><ol><li>Para um subconjunto $S \subset \mathbb{V}$, se quaisquer dois vetores distintos de $S$ são ortogonais, então $S$ é um <strong>conjunto ortogonal (orthogonal set)</strong>.<li>Um vetor $\mathbf{x} \in \mathbb{V}$ com $\|\mathbf{x}\|=1$ é um <strong>vetor unitário (unit vector)</strong>.<li>Se um subconjunto $S \subset \mathbb{V}$ é ortogonal e é formado apenas por vetores unitários, então $S$ é um <strong>conjunto ortonormal (orthonormal set)</strong>.</ol></blockquote><p>Uma condição necessária e suficiente para que $S = { \mathbf{v}_1, \mathbf{v}_2, \dots }$ seja ortonormal é $\langle \mathbf{v}_i, \mathbf{v}_j \rangle = \delta_{ij}$. Multiplicar um vetor por um escalar não nulo não afeta a ortogonalidade.</p><p>Para qualquer vetor não nulo $\mathbf{x}$, $\cfrac{\mathbf{x}}{\|\mathbf{x}\|}$ é um vetor unitário; obter um vetor unitário multiplicando-se um vetor não nulo pelo inverso de seu comprimento é chamado de <strong>normalização (normalizing)</strong>.</p>]]> </content> </entry> <entry><title xml:lang="pt-BR">Vetores e combinações lineares</title><link href="https://www.yunseo.kim/pt-BR/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/vectors-and-linear-combinations/" rel="alternate" type="text/html" hreflang="cs" /><published>2025-09-07T00:00:00+09:00</published> <updated>2025-10-28T20:47:49+09:00</updated> <id>https://www.yunseo.kim/pt-BR/posts/vectors-and-linear-combinations/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Linear Algebra" /> <summary xml:lang="pt-BR">O que é um vetor, as operações básicas (soma e multiplicação por escalar) e, com isso, entender combinações lineares de vetores e o conceito de espaço gerado. Introdução prática à Álgebra Linear.</summary> <content type="html" xml:lang="pt-BR"> <![CDATA[<p>O que é um vetor, as operações básicas (soma e multiplicação por escalar) e, com isso, entender combinações lineares de vetores e o conceito de espaço gerado. Introdução prática à Álgebra Linear.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><ul><li><strong>Definição de vetor</strong><ul><li><strong>Vetor em sentido estrito (vetor euclidiano)</strong>: grandeza física que possui magnitude e direção<li><strong>Em sentido amplo, na Álgebra Linear</strong>: elemento de um espaço vetorial</ul><li><strong>Formas de representação de vetores</strong><ul><li><strong>Representação por setas</strong>: a magnitude é o comprimento da seta e a direção é o sentido da seta. É intuitiva e fácil de visualizar, mas fica limitada para vetores em dimensão 4 ou superior e para vetores não euclidianos.<li><strong>Representação por componentes</strong>: fixa-se a cauda do vetor na origem do espaço de coordenadas e representa-se o vetor pelas coordenadas de sua ponta.</ul><li><strong>Operações básicas com vetores</strong><ul><li><strong>Soma</strong>: $(a_1, a_2, \cdots, a_n) + (b_1, b_2, \cdots, b_n) := (a_1+b_1, a_2+b_2, \cdots, a_n+b_n)$<li><strong>Multiplicação por escalar</strong>: $c(a_1, a_2, \cdots, a_n) := (ca_1, ca_2, \cdots, ca_n)$</ul><li><strong>Combinação linear de vetores</strong><ul><li>Dado um número finito de vetores $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$ e escalares $a_1, a_2, \dots, a_n$, um vetor $\mathbf{v}$ da forma $\mathbf{v} = a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + \cdots + a_n\mathbf{u}_n$ é chamado de <strong>combinação linear</strong> de $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$<li>Nesse caso, $a_1, a_2, \dots, a_n$ são os <strong>coeficientes</strong> dessa combinação linear</ul><li><strong>Espaço gerado</strong><ul><li>Para um subconjunto não vazio $S$ de um espaço vetorial $\mathbb{V}$, o conjunto de todas as combinações lineares feitas com vetores de $S$, denotado por $\mathrm{span}(S)$<li>Define-se $\mathrm{span}(\emptyset) = {0}$<li>Para um subconjunto $S$ de $\mathbb{V}$, se $\mathrm{span}(S) = \mathbb{V}$, então diz-se que $S$ gera $\mathbb{V}$ (generate, span)</ul></ul></blockquote><h2 id="pré-requisitos">Pré-requisitos</h2><ul><li>Plano/espaco de coordenadas<li>Corpo</ul><h2 id="o-que-é-um-vetor">O que é um vetor?</h2><h3 id="vetor-em-sentido-estrito-vetor-euclidiano">Vetor em sentido estrito: vetor euclidiano</h3><blockquote class="prompt-info"><p>Muitas grandezas físicas como força, velocidade e aceleração possuem não apenas magnitude, mas também direção. Uma grandeza que possui magnitude e direção é chamada de <strong>vetor</strong>.</p></blockquote><p>Essa é a definição de vetor adotada em mecânica e na matemática do ensino médio. Esse vetor, baseado em uma intuição geométrica de “segmento orientado com magnitude e direção”, é chamado mais precisamente de <strong>vetor euclidiano (Euclidean vector)</strong>.</p><h3 id="vetor-em-sentido-amplo-elemento-de-um-espaço-vetorial">Vetor em sentido amplo: elemento de um espaço vetorial</h3><p>Na Álgebra Linear, adota-se uma noção mais ampla e abstrata de vetor, como uma estrutura algébrica, definida assim:</p><blockquote class="prompt-info"><p><strong>Definição</strong><br /> Um <strong>espaço vetorial</strong> (ou <strong>espaço linear</strong>) $\mathbb{V}$ sobre um corpo $F$ é um conjunto equipado com duas operações, <strong>soma</strong> e <strong>multiplicação por escalar</strong>, que satisfazem as 8 condições abaixo. Os elementos de $F$ são chamados de <strong>escalares</strong>, e os elementos de $\mathbb{V}$ são chamados de <strong>vetores</strong>.</p><ul><li><strong>Soma</strong>: para quaisquer $\mathbf{x}, \mathbf{y} \in \mathbb{V}$, existe um único elemento $\mathbf{x} + \mathbf{y} \in \mathbb{V}$. Chamamos $\mathbf{x} + \mathbf{y}$ de <strong>soma</strong> de $\mathbf{x}$ e $\mathbf{y}$.<li><strong>Multiplicação por escalar</strong>: para cada $a \in F$ e $\mathbf{x} \in \mathbb{V}$, existe um único elemento $a\mathbf{x} \in \mathbb{V}$. Chamamos $a\mathbf{x}$ de <strong>múltiplo escalar</strong> de $\mathbf{x}$.</ul><ol><li>Para todos $\mathbf{x},\mathbf{y} \in \mathbb{V}$, $\mathbf{x} + \mathbf{y} = \mathbf{y} + \mathbf{x}$. (comutatividade da adição)<li>Para todos $\mathbf{x},\mathbf{y},\mathbf{z} \in \mathbb{V}$, $(\mathbf{x}+\mathbf{y})+\mathbf{z} = \mathbf{x}+(\mathbf{y}+\mathbf{z})$. (associatividade da adição)<li>Existe $\mathbf{0} \in \mathbb{V}$ tal que, para todo $\mathbf{x} \in \mathbb{V}$, $\mathbf{x} + \mathbf{0} = \mathbf{x}$. (vetor zero, elemento neutro da adição)<li>Para cada $\mathbf{x} \in \mathbb{V}$, existe $\mathbf{y} \in \mathbb{V}$ tal que $\mathbf{x}+\mathbf{y}=\mathbf{0}$. (inverso aditivo)<li>Para todo $\mathbf{x} \in \mathbb{V}$, $1\mathbf{x} = \mathbf{x}$. (identidade multiplicativa)<li>Para todos $a,b \in F$ e todo $\mathbf{x} \in \mathbb{V}$, $(ab)\mathbf{x} = a(b\mathbf{x})$. (associatividade da multiplicação por escalar)<li>Para todo $a \in F$ e todos $\mathbf{x},\mathbf{y} \in \mathbb{V}$, $a(\mathbf{x}+\mathbf{y}) = a\mathbf{x} + a\mathbf{y}$. (distributividade da multiplicação por escalar sobre a adição 1)<li>Para todos $a,b \in F$ e todo $\mathbf{x} \in \mathbb{V}$, $(a+b)\mathbf{x} = a\mathbf{x} + b\mathbf{x}$. (distributividade da multiplicação por escalar sobre a adição 2)</ol></blockquote><p>Essa definição de vetor na Álgebra Linear é mais geral e inclui o <a href="#vetor-em-sentido-estrito-vetor-euclidiano">vetor euclidiano</a>. Pode-se verificar que o <a href="#vetor-em-sentido-estrito-vetor-euclidiano">vetor euclidiano</a> satisfaz as 8 propriedades acima.</p><p>A origem e o desenvolvimento do conceito de vetor estão intimamente ligados a problemas práticos levantados pela Física, como descrever quantitativamente força, movimento, rotação e campos. A necessidade de expressar fenômenos naturais de forma matemática levou primeiro à noção de <a href="#vetor-em-sentido-estrito-vetor-euclidiano">vetor euclidiano</a>; depois, a Matemática generalizou e formalizou essas ideias, estabelecendo estruturas como espaço vetorial, produto interno e produto externo, culminando na definição atual de vetor. Em suma, o vetor é um conceito demandado pela Física e formalizado pela Matemática, fruto de um desenvolvimento interdisciplinar.</p><p>Os <a href="#vetor-em-sentido-estrito-vetor-euclidiano">vetores euclidianos</a> da mecânica clássica podem ser expressos em uma <a href="#vetor-em-sentido-amplo-elemento-de-um-espaco-vetorial">estrutura mais geral</a>, e, na Física contemporânea, além dos <a href="#vetor-em-sentido-estrito-vetor-euclidiano">vetores euclidianos</a>, empregam-se ativamente conceitos mais abstratos definidos na Matemática, como espaços vetoriais e espaços de funções, atribuindo-lhes significado físico. Portanto, não é adequado entender as duas definições de vetor simplesmente como “definição física” e “definição matemática”.</p><p>Voltaremos ao estudo de espaços vetoriais mais adiante; por ora, vamos focar no vetor em sentido estrito, o vetor euclidiano, que pode ser representado geometricamente em um espaço de coordenadas. Ver exemplos intuitivos de vetores euclidianos ajuda quando generalizarmos para outros tipos de vetores.</p><h2 id="representação-de-vetores">Representação de vetores</h2><h3 id="representação-por-setas">Representação por setas</h3><p>É a forma de representação mais comum e geométrica. A magnitude do vetor é o comprimento da seta, e a direção do vetor é o sentido da seta.</p><p><img src="https://upload.wikimedia.org/wikipedia/commons/9/95/Vector_from_A_to_B.svg" alt="Euclidean Vector from A to B" width="972" /></p><blockquote><p><em>Fonte da imagem</em></p><ul><li>Autor: usuário da Wikipédia <a href="https://en.wikipedia.org/wiki/User:Nguyenthephuc">Nguyenthephuc</a><li>Licença: <a href="https://creativecommons.org/licenses/by-sa/3.0/deed.en">CC BY-SA 3.0</a></ul></blockquote><p>Embora intuitiva, essa representação tem limitações claras para vetores de alta dimensão (4D ou mais). Além disso, mais adiante lidaremos com vetores não euclidianos, cuja representação geométrica é difícil; por isso, é útil se familiarizar com a representação por componentes descrita a seguir.</p><h3 id="representação-por-componentes">Representação por componentes</h3><p>Independentemente da posição do vetor, se sua magnitude e direção forem as mesmas, consideramo-lo o mesmo vetor. Assim, dado um espaço de coordenadas, fixando a cauda do vetor na origem desse espaço, <u>um vetor em dimensão $n$ corresponde a um ponto arbitrário no espaço $n$-dimensional</u>; nesse caso, podemos representar o vetor pelas coordenadas de sua ponta. Essa forma de representação é chamada de <strong>representação por componentes</strong>.</p>\[(a_1, a_2, \cdots, a_n) \in \mathbb{R}^n \text{ or } \mathbb{C}^n\]<p><img src="https://upload.wikimedia.org/wikipedia/commons/5/5d/Position_vector.svg" alt="Position vector" /></p><blockquote><p><em>Fonte da imagem</em></p><ul><li>Autor: usuário da Wikimedia <a href="https://commons.wikimedia.org/wiki/User:Acdx">Acdx</a><li>Licença: <a href="https://creativecommons.org/licenses/by-sa/3.0/deed.en">CC BY-SA 3.0</a></ul></blockquote><h2 id="operações-básicas-com-vetores">Operações básicas com vetores</h2><p>As operações básicas são duas: <strong>soma</strong> e <strong>multiplicação por escalar</strong>. Toda operação com vetores pode ser expressa como combinação dessas duas.</p><h3 id="soma-de-vetores">Soma de vetores</h3><p>A soma de dois vetores é um vetor, e seus componentes são as somas componente a componente dos vetores dados.</p>\[(a_1, a_2, \cdots, a_n) + (b_1, b_2, \cdots, b_n) := (a_1+b_1, a_2+b_2, \cdots, a_n+b_n)\]<h3 id="multiplicação-por-escalar">Multiplicação por escalar</h3><p>Podemos ampliar ou reduzir a magnitude de um vetor multiplicando-o por um escalar. O resultado é igual a multiplicar cada componente pelo mesmo escalar.</p>\[c(a_1, a_2, \cdots, a_n) := (ca_1, ca_2, \cdots, ca_n)\]<p><img src="https://upload.wikimedia.org/wikipedia/commons/1/1b/Scalar_multiplication_of_vectors2.svg" alt="Scalar multiplication of vectors" /></p><blockquote><p><em>Fonte da imagem</em></p><ul><li>Autor: usuário da Wikipédia <a href="https://en.wikipedia.org/wiki/User:Silly_rabbit">Silly rabbit</a><li>Licença: <a href="https://creativecommons.org/licenses/by-sa/3.0/deed.en">CC BY-SA 3.0</a></ul></blockquote><h2 id="combinação-linear-de-vetores">Combinação linear de vetores</h2><p>Assim como o Cálculo parte de números $x$ e funções $f(x)$, a Álgebra Linear parte de vetores $\mathbf{v}, \mathbf{w}, \dots$ e de combinações lineares $c\mathbf{v} + d\mathbf{w} + \cdots$. Toda combinação linear de vetores é composta pelas duas operações básicas acima, <a href="#soma-de-vetores">soma</a> e <a href="#multiplicacao-por-escalar">multiplicação por escalar</a>.</p><blockquote class="prompt-info"><p>Dado um número finito de vetores $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$ e escalares $a_1, a_2, \dots, a_n$, um vetor $\mathbf{v}$ é chamado de <strong>combinação linear</strong> de $\mathbf{u}_1, \mathbf{u}_2, \dots, \mathbf{u}_n$ se</p>\[\mathbf{v} = a_1\mathbf{u}_1 + a_2\mathbf{u}_2 + \cdots + a_n\mathbf{u}_n\]<p>Nesse caso, $a_1, a_2, \dots, a_n$ são os <strong>coeficientes</strong> dessa combinação linear.</p></blockquote><p>Por que a combinação linear é importante? Considere a situação em que <strong>$n$ vetores em um espaço de dimensão $m$ compõem as $n$ colunas de uma matriz $m \times n$</strong>.</p>\[\begin{gather*} \mathbf{v}_1 = (a_{11}, a_{21}, \dots, a_{m1}), \\ \mathbf{v}_2 = (a_{12}, a_{22}, \dots, a_{m2}), \\ \vdots \\ \mathbf{v}_n = (a_{1n}, a_{2n}, \dots, a_{mn}) \\ \\ A = \Bigg[ \mathbf{v}_1 \quad \mathbf{v}_2 \quad \cdots \quad \mathbf{v}_n \Bigg] \end{gather*}\]<p>Os pontos essenciais são dois:</p><ol><li><strong>Expresse todas as combinações lineares possíveis $Ax = x_1\mathbf{v}_1 + x_2\mathbf{v}_2 + \cdots + x_n\mathbf{v}_n$. O que elas formam?</strong><li>Dado um vetor de saída desejado $Ax = b$, <strong>encontre os números $x_1, x_2, \dots, x_n$</strong> que o produzem.</ol><p>Responderemos ao segundo ponto depois; por enquanto, foquemos no primeiro. Para simplificar, considere o caso de 2 vetores ($n=2$) em 2 dimensões ($m=2$), distintos de $\mathbf{0}$.</p><h3 id="combinação-linear-cmathbfv--dmathbfw">Combinação linear $c\mathbf{v} + d\mathbf{w}$</h3><p>Um vetor $\mathbf{v}$ em 2D tem dois componentes. Para todo escalar $c$, <u>o vetor $c\mathbf{v}$ é paralelo a $\mathbf{v}$ e forma, no plano $xy$, uma reta infinita que passa pela origem.</u></p><p>Se um segundo vetor $\mathbf{w}$ não está sobre essa reta (isto é, se $\mathbf{v}$ e $\mathbf{w}$ não são paralelos), então $d\mathbf{w}$ forma uma segunda reta. Combinando essas duas retas, vemos que <strong>a combinação linear $c\mathbf{v} + d\mathbf{w}$ preenche um plano que contém a origem</strong>.</p><p><img src="https://upload.wikimedia.org/wikipedia/commons/6/6f/Linjcomb.png" alt="Linear combinations of two vectors" /></p><blockquote><p><em>Fonte da imagem</em></p><ul><li>Autor: usuário da Wikimedia <a href="https://commons.wikimedia.org/wiki/User:Svjo">Svjo</a><li>Licença: <a href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">CC BY-SA 4.0</a></ul></blockquote><h3 id="geração">Geração</h3><p>Assim, as combinações lineares de vetores formam um espaço vetorial; a isso chamamos de <strong>geração</strong> do espaço (span).</p><blockquote class="prompt-info"><p><strong>Definição</strong><br /> Dado um subconjunto não vazio $S$ de um espaço vetorial $\mathbb{V}$, o conjunto de todas as combinações lineares feitas com vetores de $S$ é chamado de <strong>espaço gerado (span)</strong> de $S$ e é denotado por $\mathrm{span}(S)$. Define-se $\mathrm{span}(\emptyset) = {0}$.</p></blockquote><blockquote class="prompt-info"><p><strong>Definição</strong><br /> Para um subconjunto $S$ de $\mathbb{V}$, se $\mathrm{span}(S) = \mathbb{V}$, então diz-se que $S$ <strong>gera</strong> $\mathbb{V}$ (generate, span).</p></blockquote><p>Ainda não estudamos conceitos como subespaço e base, mas ter em mente este exemplo ajudará a entender a noção de espaço vetorial mais adiante.</p>]]> </content> </entry> <entry><title xml:lang="pt-BR">Resumo do curso 'Pandas' do Kaggle (2) - Lições 4–6</title><link href="https://www.yunseo.kim/pt-BR/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/summary-of-kaggle-pandas-course-2/" rel="alternate" type="text/html" hreflang="cs" /><published>2025-08-24T00:00:00+09:00</published> <updated>2025-08-24T00:00:00+09:00</updated> <id>https://www.yunseo.kim/pt-BR/posts/summary-of-kaggle-pandas-course-2/</id> <author> <name>Yunseo Kim</name> </author> <category term="AI & Data" /> <category term="Machine Learning" /> <summary xml:lang="pt-BR">Resumo do uso do Pandas para limpar e transformar dados. Síntese do curso &apos;Pandas&apos; do Kaggle, com complementos. Parte 2: Lições 4–6 — groupby, ordenação, dtypes/NaN e joins.</summary> <content type="html" xml:lang="pt-BR"> <![CDATA[<p>Resumo do uso do Pandas para limpar e transformar dados. Síntese do curso 'Pandas' do Kaggle, com complementos. Parte 2: Lições 4–6 — groupby, ordenação, dtypes/NaN e joins.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><p>Aqui organizo o que estudei por meio do curso <a href="https://www.kaggle.com/learn/pandas">Pandas</a> do Kaggle.<br /> Como o conteúdo é extenso, dividi em 2 partes.</p><ul><li><a href="/pt-BR/posts/summary-of-kaggle-pandas-course-1/">Parte 1: Lições 1–3</a><li>Parte 2: Lições 4–6 (este post)</ul><p><img src="/assets/img/kaggle-pandas/certificate.png" alt="Certificado de Conclusão" /></p><h2 id="lesson-4-grouping-and-sorting">Lesson 4. Grouping and Sorting</h2><p>Às vezes, é preciso agrupar dados e aplicar operações por grupo ou ordená-los por algum critério.</p><h3 id="análise-por-grupo">Análise por grupo</h3><p>Com o método <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.groupby.html"><code class="language-plaintext highlighter-rouge">groupby()</code></a>, podemos agrupar registros cujos valores em determinada coluna sejam iguais e, em seguida, obter visões gerais ou aplicar transformações por grupo.</p><p>Vimos antes o <a href="/pt-BR/posts/summary-of-kaggle-pandas-course-1/#visão-geral-dos-dados">método <code class="language-plaintext highlighter-rouge">value_counts()</code></a>; o mesmo comportamento pode ser implementado com <code class="language-plaintext highlighter-rouge">groupby()</code> assim:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="nf">groupby</span><span class="p">(</span><span class="sh">'</span><span class="s">taster_name</span><span class="sh">'</span><span class="p">).</span><span class="nf">size</span><span class="p">()</span>
</pre></div></div><ol><li>Agrupa o DataFrame <code class="language-plaintext highlighter-rouge">reviews</code> por valores iguais na coluna <code class="language-plaintext highlighter-rouge">taster_name</code><li>Retorna uma Series com o tamanho (número de registros) de cada grupo</ol><p>Ou então:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="nf">groupby</span><span class="p">(</span><span class="sh">'</span><span class="s">taster_name</span><span class="sh">'</span><span class="p">).</span><span class="n">taster_name</span><span class="p">.</span><span class="nf">count</span><span class="p">()</span>
</pre></div></div><ol><li>Agrupa o DataFrame <code class="language-plaintext highlighter-rouge">reviews</code> por valores iguais na coluna <code class="language-plaintext highlighter-rouge">taster_name</code><li>Em cada grupo, seleciona a coluna <code class="language-plaintext highlighter-rouge">taster_name</code><li>Retorna uma Series com a contagem de valores não nulos</ol><p>Ou seja, o método <code class="language-plaintext highlighter-rouge">value_counts()</code> é um atalho para a lógica acima. Além de <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.count.html"><code class="language-plaintext highlighter-rouge">count()</code></a>, podemos usar qualquer função de resumo. Por exemplo, para obter o menor preço por nota:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="nf">groupby</span><span class="p">(</span><span class="sh">'</span><span class="s">points</span><span class="sh">'</span><span class="p">).</span><span class="n">price</span><span class="p">.</span><span class="nf">min</span><span class="p">()</span>
</pre></div></div><div class="language-plaintext highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
</pre><td class="rouge-code"><pre>points
80      5.0
81      5.0
       ... 
99     44.0
100    80.0
Name: price, Length: 21, dtype: float64
</pre></div></div><ol><li>Agrupa o DataFrame <code class="language-plaintext highlighter-rouge">reviews</code> por valores iguais na coluna <code class="language-plaintext highlighter-rouge">points</code><li>Em cada grupo, seleciona a coluna <code class="language-plaintext highlighter-rouge">price</code><li>Retorna uma Series com o valor mínimo em cada grupo</ol><p>Também é possível agrupar por mais de uma coluna. Para selecionar, por país e estado/província, apenas o vinho com maior nota:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="nf">groupby</span><span class="p">([</span><span class="sh">'</span><span class="s">country</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">province</span><span class="sh">'</span><span class="p">]).</span><span class="nf">apply</span><span class="p">(</span><span class="k">lambda</span> <span class="n">df</span><span class="p">:</span> <span class="n">df</span><span class="p">.</span><span class="n">loc</span><span class="p">[</span><span class="n">df</span><span class="p">.</span><span class="n">points</span><span class="p">.</span><span class="nf">idxmax</span><span class="p">()])</span>
</pre></div></div><p>Outro método útil do objeto DataFrameGroupBy é <a href="https://pandas.pydata.org/docs/reference/api/pandas.core.groupby.DataFrameGroupBy.agg.html"><code class="language-plaintext highlighter-rouge">agg()</code></a>, que permite aplicar várias funções ao mesmo tempo em cada grupo.</p><blockquote class="prompt-tip"><p>Como argumento, podem ser passados:</p><ul><li>uma função<li>uma string com o nome da função<li>uma lista de funções ou de nomes de função<li>um dicionário cujo rótulo do eixo é a chave e a(s) função(ões) a aplicar nesse eixo é o valor</ul><p>A função deve:</p><ul><li>aceitar um DataFrame como entrada ou<li>ser utilizável como argumento de <a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html"><code class="language-plaintext highlighter-rouge">DataFrame.apply()</code></a>, <a href="/pt-BR/posts/summary-of-kaggle-pandas-course-1/#mapeamentos-maps">visto anteriormente</a></ul><p>Esta explicação não consta no curso original do Kaggle; foi complementada a partir da documentação oficial do pandas.</p></blockquote><p>Exemplo: estatísticas de preço por país.</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="nf">groupby</span><span class="p">([</span><span class="sh">'</span><span class="s">country</span><span class="sh">'</span><span class="p">]).</span><span class="n">price</span><span class="p">.</span><span class="nf">agg</span><span class="p">([</span><span class="nb">len</span><span class="p">,</span> <span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="p">])</span>
</pre></div></div><blockquote class="prompt-tip"><p>Aqui, <code class="language-plaintext highlighter-rouge">len</code> é a função nativa do Python <a href="https://docs.python.org/3/library/functions.html#len"><code class="language-plaintext highlighter-rouge">len()</code></a>. No exemplo, foi usada para retornar a contagem de registros de preço (<code class="language-plaintext highlighter-rouge">price</code>) por agrupamento (<code class="language-plaintext highlighter-rouge">country</code>), <u>incluindo valores ausentes</u>. Como <code class="language-plaintext highlighter-rouge">len</code> aceita DataFrames/Series, seu uso é válido nesse contexto.</p><p>Já o método <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.count.html"><code class="language-plaintext highlighter-rouge">count()</code></a> do pandas retorna a contagem de <u>valores não nulos</u>, o que difere do comportamento acima.</p><p>Esta nota também não está no curso original; foi complementada com base na documentação oficial de Python e pandas.</p></blockquote><h3 id="índice-múltiplo">Índice múltiplo</h3><p>Ao usar <code class="language-plaintext highlighter-rouge">groupby()</code> em transformações/análises, muitas vezes obtemos DataFrames com índice em múltiplos níveis (MultiIndex), em vez de rótulos simples.</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
</pre><td class="rouge-code"><pre><span class="n">countries_reviewed</span> <span class="o">=</span> <span class="n">reviews</span><span class="p">.</span><span class="nf">groupby</span><span class="p">([</span><span class="sh">'</span><span class="s">country</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">province</span><span class="sh">'</span><span class="p">]).</span><span class="n">description</span><span class="p">.</span><span class="nf">agg</span><span class="p">([</span><span class="nb">len</span><span class="p">])</span>
<span class="n">countries_reviewed</span>
</pre></div></div><table><tr><th><th><th>len<tr><th>Country<th>province<th><tr><td rowspan="2">Argentina<td>Mendoza Province<td>3264<tr><td>Other<td>536<tr><td>...<td>...<td>...<tr><td rowspan="2">Uruguay<td>San Jose<td>3<tr><td>Uruguay<td>24</table><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
</pre><td class="rouge-code"><pre><span class="n">mi</span> <span class="o">=</span> <span class="n">countries_reviewed</span><span class="p">.</span><span class="n">index</span>
<span class="nf">type</span><span class="p">(</span><span class="n">mi</span><span class="p">)</span>
</pre></div></div><div class="language-plaintext highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre>pandas.core.indexes.multi.MultiIndex
</pre></div></div><p>Um MultiIndex tem métodos próprios para lidar com hierarquia, inexistentes em índices simples. Veja a seção MultiIndex / advanced indexing no <a href="https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html">User Guide do pandas</a> para exemplos e diretrizes detalhadas.</p><p>O método mais usado no dia a dia é <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.reset_index.html"><code class="language-plaintext highlighter-rouge">reset_index()</code></a>, para voltar a um índice “plano”.</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">countries_reviewed</span><span class="p">.</span><span class="nf">reset_index</span><span class="p">()</span>
</pre></div></div><table><thead><tr><th> <th>country<th>province<th>len<tbody><tr><td>0<td>Argentina<td>Mendoza Province<td>3264<tr><td>1<td>Argentina<td>Other<td>536<tr><td>…<td>…<td>…<td>…<tr><td>423<td>Uruguay<td>San Jose<td>3<tr><td>424<td>Uruguay<td>Uruguay<td>24</table><h3 id="ordenação">Ordenação</h3><p>Observando <code class="language-plaintext highlighter-rouge">countries_reviewed</code>, percebemos que o resultado do agrupamento vem ordenado pelo índice. Ou seja, a ordem das linhas do <code class="language-plaintext highlighter-rouge">groupby</code> é determinada pelos valores do índice, não pelo conteúdo dos dados.</p><p>Se necessário, podemos ordenar manualmente de outra forma. O método <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_values.html"><code class="language-plaintext highlighter-rouge">sort_values()</code></a> é conveniente. Por exemplo, para ordenar país e estado pelo número de registros (“len”) em ordem crescente:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
</pre><td class="rouge-code"><pre><span class="n">countries_reviewed</span> <span class="o">=</span> <span class="n">countries_reviewed</span><span class="p">.</span><span class="nf">reset_index</span><span class="p">()</span>
<span class="n">countries_reviewed</span><span class="p">.</span><span class="nf">sort_values</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="sh">'</span><span class="s">len</span><span class="sh">'</span><span class="p">)</span>
</pre></div></div><table><thead><tr><th> <th>country<th>province<th>len<tbody><tr><td>179<td>Greece<td>Muscat of Kefallonian<td>1<tr><td>192<td>Greece<td>Sterea Ellada<td>1<tr><td>…<td>…<td>…<td>…<tr><td>415<td>US<td>Washington<td>8639<tr><td>392<td>US<td>California<td>36247</table><p><code class="language-plaintext highlighter-rouge">sort_values()</code> usa ordem crescente por padrão, mas podemos inverter com <code class="language-plaintext highlighter-rouge">ascending=False</code>:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">countries_reviewed</span><span class="p">.</span><span class="nf">sort_values</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="sh">'</span><span class="s">len</span><span class="sh">'</span><span class="p">,</span> <span class="n">ascending</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
</pre></div></div><table><thead><tr><th> <th>country<th>province<th>len<tbody><tr><td>392<td>US<td>California<td>36247<tr><td>415<td>US<td>Washington<td>8639<tr><td>…<td>…<td>…<td>…<tr><td>63<td>Chile<td>Coelemu<td>1<tr><td>149<td>Greece<td>Beotia<td>1</table><p>Para ordenar pelo índice, use <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_index.html"><code class="language-plaintext highlighter-rouge">sort_index()</code></a>. Ele tem os mesmos parâmetros e ordem padrão de classificação que <code class="language-plaintext highlighter-rouge">sort_values()</code>.</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">countries_reviewed</span><span class="p">.</span><span class="nf">sort_index</span><span class="p">()</span>
</pre></div></div><table><thead><tr><th> <th>country<th>province<th>len<tbody><tr><td>0<td>Argentina<td>Mendoza Province<td>3264<tr><td>1<td>Argentina<td>Other<td>536<tr><td>…<td>…<td>…<td>…<tr><td>423<td>Uruguay<td>San Jose<td>3<tr><td>424<td>Uruguay<td>Uruguay<td>24</table><p>Por fim, é possível ordenar de uma só vez por mais de uma coluna:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">countries_reviewed</span><span class="p">.</span><span class="nf">sort_values</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="p">[</span><span class="sh">'</span><span class="s">country</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">len</span><span class="sh">'</span><span class="p">])</span>
</pre></div></div><h2 id="lesson-5-data-types-and-missing-values">Lesson 5. Data Types and Missing Values</h2><p>Na prática, os dados raramente chegam perfeitamente limpos. Muitas vezes é preciso converter tipos, e lidar com valores ausentes no meio do caminho é a parte mais trabalhosa do pipeline de análise.</p><h3 id="tipos-de-dados">Tipos de dados</h3><p>O tipo de uma coluna (ou de uma Series) em um DataFrame é o <strong>dtype</strong>. A propriedade <code class="language-plaintext highlighter-rouge">dtype</code> permite inspecionar o tipo de uma coluna. Exemplo: verificar o <code class="language-plaintext highlighter-rouge">dtype</code> da coluna <code class="language-plaintext highlighter-rouge">price</code> do DataFrame <code class="language-plaintext highlighter-rouge">reviews</code>.</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="n">price</span><span class="p">.</span><span class="n">dtype</span>
</pre></div></div><div class="language-plaintext highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre>dtype('float64')
</pre></div></div><p>Também podemos inspecionar os tipos de todas as colunas de uma vez, via <code class="language-plaintext highlighter-rouge">dtypes</code>:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="n">dtypes</span>
</pre></div></div><div class="language-plaintext highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
</pre><td class="rouge-code"><pre>country        object
description    object
                ...  
variety        object
winery         object
Length: 13, dtype: object
</pre></div></div><p>O <code class="language-plaintext highlighter-rouge">dtype</code> indica como o pandas armazena internamente os dados. <code class="language-plaintext highlighter-rouge">float64</code> é ponto flutuante de 64 bits; <code class="language-plaintext highlighter-rouge">int64</code> é inteiro de 64 bits.</p><p>Uma particularidade: colunas de strings não têm um tipo próprio, sendo tratadas como objetos (<code class="language-plaintext highlighter-rouge">object</code>).</p><p>Com <a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.astype.html"><code class="language-plaintext highlighter-rouge">astype()</code></a>, podemos converter o tipo de uma coluna. Por exemplo, converter a coluna <code class="language-plaintext highlighter-rouge">points</code> (antes <code class="language-plaintext highlighter-rouge">int64</code>) para <code class="language-plaintext highlighter-rouge">float64</code>:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="n">points</span><span class="p">.</span><span class="nf">astype</span><span class="p">(</span><span class="sh">'</span><span class="s">float64</span><span class="sh">'</span><span class="p">)</span>
</pre></div></div><div class="language-plaintext highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
</pre><td class="rouge-code"><pre>0         87.0
1         87.0
          ... 
129969    90.0
129970    90.0
Name: points, Length: 129971, dtype: float64
</pre></div></div><p>O índice de um DataFrame/Series também tem tipo:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="n">index</span><span class="p">.</span><span class="n">dtype</span>
</pre></div></div><div class="language-plaintext highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre>dtype('int64')
</pre></div></div><p>O pandas também oferece suporte a tipos externos, como dados categóricos e séries temporais.</p><h3 id="valores-ausentes">Valores ausentes</h3><p>Entradas vazias são representadas por <code class="language-plaintext highlighter-rouge">NaN</code> (de “Not a Number”). Por razões técnicas, <code class="language-plaintext highlighter-rouge">NaN</code> tem sempre tipo <code class="language-plaintext highlighter-rouge">float64</code>.</p><p>O pandas fornece funções específicas para ausência de dados. <a href="/pt-BR/posts/summary-of-kaggle-pandas-course-1/#seleção-condicional">Já vimos algo semelhante</a>: existem as funções independentes <a href="https://pandas.pydata.org/docs/reference/api/pandas.isna.html"><code class="language-plaintext highlighter-rouge">pd.isna</code></a> e <a href="https://pandas.pydata.org/docs/reference/api/pandas.notna.html"><code class="language-plaintext highlighter-rouge">pd.notna</code></a>. Elas retornam um booleano (ou array booleano) indicando se a entrada é ausente (ou não) e podem ser usadas assim:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">[</span><span class="n">pd</span><span class="p">.</span><span class="nf">isna</span><span class="p">(</span><span class="n">reviews</span><span class="p">.</span><span class="n">country</span><span class="p">)]</span>
</pre></div></div><p>Geralmente, verificamos se há ausências e, caso haja, definimos uma estratégia para preenchê-las. Com <a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.fillna.html"><code class="language-plaintext highlighter-rouge">fillna()</code></a>, substituímos <code class="language-plaintext highlighter-rouge">NaN</code> por um valor conveniente. Exemplo: trocar todos os <code class="language-plaintext highlighter-rouge">NaN</code> de <code class="language-plaintext highlighter-rouge">reviews.region_2</code> por <code class="language-plaintext highlighter-rouge">"Unknown"</code>:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="n">region_2</span><span class="p">.</span><span class="nf">fillna</span><span class="p">(</span><span class="sh">"</span><span class="s">Unknown</span><span class="sh">"</span><span class="p">)</span>
</pre></div></div><p>Outra estratégia é copiar o valor válido mais próximo antes (forward fill) ou depois (backward fill). Use <a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.ffill.html"><code class="language-plaintext highlighter-rouge">ffill()</code></a> e <a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.bfill.html"><code class="language-plaintext highlighter-rouge">bfill()</code></a>.</p><blockquote class="prompt-danger"><p>Antigamente, podia-se usar <code class="language-plaintext highlighter-rouge">fillna()</code> com o parâmetro <code class="language-plaintext highlighter-rouge">method='ffill'</code>/<code class="language-plaintext highlighter-rouge">'bfill'</code>. Desde o pandas 2.1.0, essa forma foi depreciada; prefira <code class="language-plaintext highlighter-rouge">ffill()</code>/<code class="language-plaintext highlighter-rouge">bfill()</code> conforme o caso.</p></blockquote><p>Em outras situações, mesmo não sendo ausências, pode ser necessário substituir valores em massa. No curso do Kaggle, o exemplo é a troca do handle do Twitter de um revisor. Um exemplo mais próximo da realidade brasileira: imagine que o norte da província de Gyeonggi, na Coreia do Sul, foi separado para formar a nova unidade administrativa <strong>Gyeonggibuk-do</strong>; existe um dataset com esse nome, mas alguém decide renomeá-la para <strong>Pyeonghwanuri Special Self-Governing Province</strong> e consegue emplacar essa ideia. <del>É um cenário hipotético, mas assusta pensar que algo parecido quase aconteceu.</del> Para refletir essa mudança no dataset, teríamos que substituir <code class="language-plaintext highlighter-rouge">"Gyeonggibuk-do"</code> por <code class="language-plaintext highlighter-rouge">"Pyeonghwanuri State"</code> ou <code class="language-plaintext highlighter-rouge">"Pyeonghwanuri Special Self-Governing Province"</code>. Uma forma de fazer isso no pandas é com <a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.replace.html"><code class="language-plaintext highlighter-rouge">replace()</code></a>:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">rok_2030_census</span><span class="p">.</span><span class="n">province</span><span class="p">.</span><span class="nf">replace</span><span class="p">(</span><span class="sh">"</span><span class="s">Gyeonggibuk-do</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">Pyeonghwanuri Special Self-Governing Province</span><span class="sh">"</span><span class="p">)</span>
</pre></div></div><p>Com o código acima, trocamos eficientemente todas as ocorrências de <code class="language-plaintext highlighter-rouge">"Gyeonggibuk-do"</code> na coluna <code class="language-plaintext highlighter-rouge">province</code> do dataset <code class="language-plaintext highlighter-rouge">rok_2030_census</code> por “aquele nome comprido”. <del>Reconforta saber que ninguém precisou realmente rodar um código desses.</del></p><p>Substituições de strings também são úteis na limpeza de ausências quando elas aparecem como textos como <code class="language-plaintext highlighter-rouge">"Unknown"</code>, <code class="language-plaintext highlighter-rouge">"Undisclosed"</code>, <code class="language-plaintext highlighter-rouge">"Invalid"</code>, em vez de <code class="language-plaintext highlighter-rouge">NaN</code>. Em fluxos que digitalizam documentos antigos via OCR, isso é até mais comum.</p><h2 id="lesson-6-renaming-and-combining">Lesson 6. Renaming and Combining</h2><p>Às vezes, precisamos renomear colunas ou o índice de um dataset. Também é comum combinar DataFrames e Series.</p><h3 id="renomeando">Renomeando</h3><p>Com <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.rename.html"><code class="language-plaintext highlighter-rouge">rename()</code></a>, renomeamos colunas ou o índice. Embora aceite formatos variados, o mais prático costuma ser um dicionário Python. Exemplos: renomear a coluna <code class="language-plaintext highlighter-rouge">points</code> para <code class="language-plaintext highlighter-rouge">score</code> e, no índice, trocar <code class="language-plaintext highlighter-rouge">0</code>, <code class="language-plaintext highlighter-rouge">1</code> por <code class="language-plaintext highlighter-rouge">firstEntry</code>, <code class="language-plaintext highlighter-rouge">secondEntry</code>:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="nf">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="sh">'</span><span class="s">points</span><span class="sh">'</span><span class="p">:</span> <span class="sh">'</span><span class="s">score</span><span class="sh">'</span><span class="p">})</span>
</pre></div></div><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="nf">rename</span><span class="p">(</span><span class="n">index</span><span class="o">=</span><span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="sh">'</span><span class="s">firstEntry</span><span class="sh">'</span><span class="p">,</span> <span class="mi">1</span><span class="p">:</span> <span class="sh">'</span><span class="s">secondEntry</span><span class="sh">'</span><span class="p">})</span>
</pre></div></div><p>Renomear colunas é comum; renomear valores do índice, nem tanto. Para esse fim, geralmente é mais conveniente usar <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.set_index.html"><code class="language-plaintext highlighter-rouge">set_index()</code></a>, como <a href="/pt-BR/posts/summary-of-kaggle-pandas-course-1/#manipulando-o-índice">vimos antes</a>.</p><p>As dimensões de linhas e colunas também têm a propriedade <code class="language-plaintext highlighter-rouge">name</code>. Com <code class="language-plaintext highlighter-rouge">rename_axis()</code>, podemos nomear esses eixos. Ex.: chamar o eixo do índice de <code class="language-plaintext highlighter-rouge">wines</code> e o das colunas de <code class="language-plaintext highlighter-rouge">fields</code>:</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
</pre><td class="rouge-code"><pre><span class="n">reviews</span><span class="p">.</span><span class="nf">rename_axis</span><span class="p">(</span><span class="sh">"</span><span class="s">wines</span><span class="sh">"</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="sh">'</span><span class="s">index</span><span class="sh">'</span><span class="p">).</span><span class="nf">rename_axis</span><span class="p">(</span><span class="sh">"</span><span class="s">fields</span><span class="sh">"</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="sh">'</span><span class="s">columns</span><span class="sh">'</span><span class="p">)</span>
</pre></div></div><h3 id="combinando-datasets">Combinando datasets</h3><p>Com frequência, é preciso combinar DataFrames ou Series. O pandas oferece três funções principais, em ordem crescente de complexidade: <a href="https://pandas.pydata.org/docs/reference/api/pandas.concat.html"><code class="language-plaintext highlighter-rouge">concat()</code></a>, <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.join.html"><code class="language-plaintext highlighter-rouge">join()</code></a> e <a href="https://pandas.pydata.org/docs/reference/api/pandas.merge.html"><code class="language-plaintext highlighter-rouge">merge()</code></a>. O curso do Kaggle observa que a maior parte do que se faz com <code class="language-plaintext highlighter-rouge">merge()</code> pode ser feita de modo mais simples com <code class="language-plaintext highlighter-rouge">join()</code>, então foca nos dois primeiros.</p><p><code class="language-plaintext highlighter-rouge">concat()</code> é a mais simples: concatena DataFrames/Series ao longo de um eixo. É útil quando todos têm as mesmas colunas. Por padrão, concatena ao longo do eixo do índice; com <code class="language-plaintext highlighter-rouge">axis=1</code> ou <code class="language-plaintext highlighter-rouge">axis='columns'</code>, concatena por colunas.</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
</pre><td class="rouge-code"><pre><span class="o">&gt;&gt;&gt;</span> <span class="n">s1</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nc">Series</span><span class="p">([</span><span class="sh">'</span><span class="s">a</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">b</span><span class="sh">'</span><span class="p">])</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">s2</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nc">Series</span><span class="p">([</span><span class="sh">'</span><span class="s">c</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">d</span><span class="sh">'</span><span class="p">])</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">pd</span><span class="p">.</span><span class="nf">concat</span><span class="p">([</span><span class="n">s1</span><span class="p">,</span> <span class="n">s2</span><span class="p">])</span>
<span class="mi">0</span>    <span class="n">a</span>
<span class="mi">1</span>    <span class="n">b</span>
<span class="mi">0</span>    <span class="n">c</span>
<span class="mi">1</span>    <span class="n">d</span>
<span class="n">dtype</span><span class="p">:</span> <span class="nb">object</span>
</pre></div></div><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
</pre><td class="rouge-code"><pre><span class="o">&gt;&gt;&gt;</span> <span class="n">df1</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nc">DataFrame</span><span class="p">([[</span><span class="sh">'</span><span class="s">a</span><span class="sh">'</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="p">[</span><span class="sh">'</span><span class="s">b</span><span class="sh">'</span><span class="p">,</span> <span class="mi">2</span><span class="p">]],</span>
<span class="p">...</span>                    <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="sh">'</span><span class="s">letter</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">number</span><span class="sh">'</span><span class="p">])</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">df1</span>
  <span class="n">letter</span>  <span class="n">number</span>
<span class="mi">0</span>      <span class="n">a</span>       <span class="mi">1</span>
<span class="mi">1</span>      <span class="n">b</span>       <span class="mi">2</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">df2</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nc">DataFrame</span><span class="p">([[</span><span class="sh">'</span><span class="s">c</span><span class="sh">'</span><span class="p">,</span> <span class="mi">3</span><span class="p">],</span> <span class="p">[</span><span class="sh">'</span><span class="s">d</span><span class="sh">'</span><span class="p">,</span> <span class="mi">4</span><span class="p">]],</span>
<span class="p">...</span>                    <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="sh">'</span><span class="s">letter</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">number</span><span class="sh">'</span><span class="p">])</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">df2</span>
  <span class="n">letter</span>  <span class="n">number</span>
<span class="mi">0</span>      <span class="n">c</span>       <span class="mi">3</span>
<span class="mi">1</span>      <span class="n">d</span>       <span class="mi">4</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">pd</span><span class="p">.</span><span class="nf">concat</span><span class="p">([</span><span class="n">df1</span><span class="p">,</span> <span class="n">df2</span><span class="p">])</span>
  <span class="n">letter</span>  <span class="n">number</span>
<span class="mi">0</span>      <span class="n">a</span>       <span class="mi">1</span>
<span class="mi">1</span>      <span class="n">b</span>       <span class="mi">2</span>
<span class="mi">0</span>      <span class="n">c</span>       <span class="mi">3</span>
<span class="mi">1</span>      <span class="n">d</span>       <span class="mi">4</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">df4</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nc">DataFrame</span><span class="p">([[</span><span class="sh">'</span><span class="s">bird</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">polly</span><span class="sh">'</span><span class="p">],</span> <span class="p">[</span><span class="sh">'</span><span class="s">monkey</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">george</span><span class="sh">'</span><span class="p">]],</span>
<span class="p">...</span>                    <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="sh">'</span><span class="s">animal</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">name</span><span class="sh">'</span><span class="p">])</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">df4</span>
   <span class="n">animal</span>    <span class="n">name</span>
<span class="mi">0</span>    <span class="n">bird</span>   <span class="n">polly</span>
<span class="mi">1</span>  <span class="n">monkey</span>  <span class="n">george</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">pd</span><span class="p">.</span><span class="nf">concat</span><span class="p">([</span><span class="n">df1</span><span class="p">,</span> <span class="n">df4</span><span class="p">],</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
  <span class="n">letter</span>  <span class="n">number</span>  <span class="n">animal</span>    <span class="n">name</span>
<span class="mi">0</span>      <span class="n">a</span>       <span class="mi">1</span>    <span class="n">bird</span>   <span class="n">polly</span>
<span class="mi">1</span>      <span class="n">b</span>       <span class="mi">2</span>  <span class="n">monkey</span>  <span class="n">george</span>
</pre></div></div><blockquote class="prompt-tip"><p>De acordo com a <a href="(https://pandas.pydata.org/docs/reference/api/pandas.concat.html)">documentação oficial do pandas</a>, ao construir um DataFrame a partir de várias linhas, evite adicionar uma a uma dentro de um loop. Em vez disso, junte as linhas em uma lista e faça uma única chamada a <code class="language-plaintext highlighter-rouge">concat()</code>.</p></blockquote><p><code class="language-plaintext highlighter-rouge">join()</code> é um pouco mais complexo: ele “anexa” um DataFrame a outro, alinhando pelo índice. Se houver nomes de colunas em conflito, use os parâmetros <code class="language-plaintext highlighter-rouge">lsuffix</code> e <code class="language-plaintext highlighter-rouge">rsuffix</code> para definir sufixos distintos e evitar colisões.</p><div class="language-python highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
</pre><td class="rouge-code"><pre><span class="o">&gt;&gt;&gt;</span> <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nc">DataFrame</span><span class="p">({</span><span class="sh">'</span><span class="s">key</span><span class="sh">'</span><span class="p">:</span> <span class="p">[</span><span class="sh">'</span><span class="s">K0</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">K1</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">K2</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">K3</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">K4</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">K5</span><span class="sh">'</span><span class="p">],</span>
<span class="p">...</span>                    <span class="sh">'</span><span class="s">A</span><span class="sh">'</span><span class="p">:</span> <span class="p">[</span><span class="sh">'</span><span class="s">A0</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">A1</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">A2</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">A3</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">A4</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">A5</span><span class="sh">'</span><span class="p">]})</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">df</span>
  <span class="n">key</span>   <span class="n">A</span>
<span class="mi">0</span>  <span class="n">K0</span>  <span class="n">A0</span>
<span class="mi">1</span>  <span class="n">K1</span>  <span class="n">A1</span>
<span class="mi">2</span>  <span class="n">K2</span>  <span class="n">A2</span>
<span class="mi">3</span>  <span class="n">K3</span>  <span class="n">A3</span>
<span class="mi">4</span>  <span class="n">K4</span>  <span class="n">A4</span>
<span class="mi">5</span>  <span class="n">K5</span>  <span class="n">A5</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">other</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nc">DataFrame</span><span class="p">({</span><span class="sh">'</span><span class="s">key</span><span class="sh">'</span><span class="p">:</span> <span class="p">[</span><span class="sh">'</span><span class="s">K0</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">K1</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">K2</span><span class="sh">'</span><span class="p">],</span>
<span class="p">...</span>                       <span class="sh">'</span><span class="s">B</span><span class="sh">'</span><span class="p">:</span> <span class="p">[</span><span class="sh">'</span><span class="s">B0</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">B1</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">B2</span><span class="sh">'</span><span class="p">]})</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">other</span>
  <span class="n">key</span>   <span class="n">B</span>
<span class="mi">0</span>  <span class="n">K0</span>  <span class="n">B0</span>
<span class="mi">1</span>  <span class="n">K1</span>  <span class="n">B1</span>
<span class="mi">2</span>  <span class="n">K2</span>  <span class="n">B2</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">df</span><span class="p">.</span><span class="nf">join</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">lsuffix</span><span class="o">=</span><span class="sh">'</span><span class="s">_caller</span><span class="sh">'</span><span class="p">,</span> <span class="n">rsuffix</span><span class="o">=</span><span class="sh">'</span><span class="s">_other</span><span class="sh">'</span><span class="p">)</span>
  <span class="n">key_caller</span>   <span class="n">A</span> <span class="n">key_other</span>    <span class="n">B</span>
<span class="mi">0</span>         <span class="n">K0</span>  <span class="n">A0</span>        <span class="n">K0</span>   <span class="n">B0</span>
<span class="mi">1</span>         <span class="n">K1</span>  <span class="n">A1</span>        <span class="n">K1</span>   <span class="n">B1</span>
<span class="mi">2</span>         <span class="n">K2</span>  <span class="n">A2</span>        <span class="n">K2</span>   <span class="n">B2</span>
<span class="mi">3</span>         <span class="n">K3</span>  <span class="n">A3</span>       <span class="n">NaN</span>  <span class="n">NaN</span>
<span class="mi">4</span>         <span class="n">K4</span>  <span class="n">A4</span>       <span class="n">NaN</span>  <span class="n">NaN</span>
<span class="mi">5</span>         <span class="n">K5</span>  <span class="n">A5</span>       <span class="n">NaN</span>  <span class="n">NaN</span>
</pre></div></div>]]> </content> </entry> <entry><title xml:lang="pt-BR">Métricas de desempenho da web (Web Vitals)</title><link href="https://www.yunseo.kim/pt-BR/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/about-web-vitals/" rel="alternate" type="text/html" hreflang="cs" /><published>2025-08-05T00:00:00+09:00</published> <updated>2025-08-28T18:22:07+09:00</updated> <id>https://www.yunseo.kim/pt-BR/posts/about-web-vitals/</id> <author> <name>Yunseo Kim</name> </author> <category term="Dev" /> <category term="Web Dev" /> <summary xml:lang="pt-BR">Resumo dos Web Vitals e dos critérios de medição e pontuação do Lighthouse; entenda FCP, LCP, INP, CLS, TBT e SI e como eles afetam o desempenho e o SEO.</summary> <content type="html" xml:lang="pt-BR"> <![CDATA[<p>Resumo dos Web Vitals e dos critérios de medição e pontuação do Lighthouse; entenda FCP, LCP, INP, CLS, TBT e SI e como eles afetam o desempenho e o SEO.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="fatores-que-determinam-o-desempenho-da-web">Fatores que determinam o desempenho da web</h2><p>Ao otimizar a performance na web, os fatores que a determinam podem ser classificados em dois grandes grupos: desempenho de carregamento e desempenho de renderização.</p><h3 id="desempenho-de-carregamento-do-html">Desempenho de carregamento do HTML</h3><ul><li>Tempo desde a primeira solicitação da página ao servidor pela rede até o momento em que o navegador recebe o documento HTML e começa a renderizar<li>Determina quão rápido a página começa a ser exibida<li>Otimização por meio de minimizar redirecionamentos, cachear a resposta HTML, comprimir recursos e usar um CDN de forma adequada, entre outros</ul><h3 id="desempenho-de-renderização">Desempenho de renderização</h3><ul><li>Tempo que o navegador leva para desenhar a interface que o usuário vê e torná-la interativa<li>Determina quão suave e rapidamente a tela é desenhada<li>Otimização removendo CSS e JS desnecessários, evitando atraso no carregamento de fontes e miniaturas, separando operações pesadas em Web Workers para minimizar a ocupação da thread principal, e otimizando animações, entre outros</ul><h2 id="métricas-de-desempenho-da-web-web-vitals">Métricas de desempenho da web (Web Vitals)</h2><p>Com base no <a href="https://web.dev/performance?hl=pt-BR">web.dev</a> do Google e na <a href="https://developer.chrome.com/docs/lighthouse/performance/performance-scoring?hl=pt-BR">documentação para desenvolvedores do Chrome</a>. Em geral, salvo motivo específico, é melhor mirar melhorias holísticas do que focar em uma única métrica, identificando quais partes da página estão causando gargalos. Se você tiver estatísticas de dados reais de usuários, é recomendável observar valores do quartil inferior (Q1), em vez de médias ou topos, e garantir que, mesmo nesses casos, as metas sejam atingidas.</p><h3 id="métricas-essenciais-da-web-core-web-vitals">Métricas essenciais da web (Core Web Vitals)</h3><p>Há várias métricas de Web Vitals. Entre elas, três têm relação direta com a experiência do usuário e podem ser medidas em campo (e não apenas em laboratório). O Google as considera especialmente importantes e as denomina <a href="https://web.dev/articles/vitals?hl=pt-BR#core-web-vitals">Core Web Vitals</a>. Como o Google também reflete essas métricas nos rankings de resultados de busca, administradores de sites devem observá-las atentamente sob a ótica de SEO.</p><ul><li><a href="#lcp-maior-exibicao-de-conteudo">Maior exibição de conteúdo (LCP)</a>: reflete o <em>desempenho de carregamento</em>; deve ser de até 2,5 s<li><a href="https://web.dev/articles/inp?hl=pt-BR">Interação até a próxima pintura (INP)</a>: reflete a <em>responsividade</em>; deve ser ≤ 200 ms<li><a href="#cls-mudanca-de-layout-cumulativa">Mudança cumulativa de layout (CLS)</a>: reflete a <em>estabilidade visual</em>; deve permanecer ≤ 0,1</ul><p>As Core Web Vitals são, por definição, métricas de campo. Porém, exceto pelo INP, as outras duas podem ser medidas em ambientes de laboratório como as DevTools do Chrome ou o Lighthouse. O INP requer entradas reais do usuário e, portanto, não é medido em laboratório. Nesses casos, como <a href="#tbt-tempo-total-de-bloqueio">o TBT</a> é altamente correlacionado ao INP e é uma métrica semelhante, pode ser usado como referência; <a href="https://web.dev/articles/vitals?hl=pt-BR#lab_tools_to_measure_core_web_vitals">em geral, ao melhorar o TBT, o INP também melhora</a>.</p><h3 id="pesos-da-pontuação-de-desempenho-no-lighthouse-10">Pesos da pontuação de desempenho no Lighthouse 10</h3><p><a href="https://developer.chrome.com/docs/lighthouse/performance/performance-scoring?hl=pt-BR">A pontuação de desempenho do Lighthouse é calculada como a média ponderada das pontuações de cada métrica, seguindo os pesos da tabela a seguir</a>.</p><table><thead><tr><th>Métrica<th>Peso<tbody><tr><td><a href="#fcp-primeira-exibicao-com-conteudo">Primeira exibição com conteúdo</a><td>10%<tr><td><a href="#si-indice-de-velocidade">Índice de Velocidade</a><td>10%<tr><td><a href="#lcp-maior-exibicao-de-conteudo">Maior exibição de conteúdo</a><td>25%<tr><td><a href="#tbt-tempo-total-de-bloqueio">Tempo total de bloqueio</a><td>30%<tr><td><a href="#cls-mudanca-de-layout-cumulativa">Mudança cumulativa de layout</a><td>25%</table><h3 id="fcp-primeira-exibicao-com-conteudo">FCP (Primeira exibição com conteúdo)</h3><ul><li>Mede o tempo até a renderização do primeiro conteúdo do DOM após a solicitação da página<li>Imagens na página, elementos <code class="language-plaintext highlighter-rouge">&lt;canvas&gt;</code> não brancos, SVG etc. são considerados conteúdo do DOM; conteúdo dentro de <code class="language-plaintext highlighter-rouge">iframe</code> não é considerado</ul><blockquote class="prompt-tip"><p>Um dos fatores que mais impactam o FCP é o tempo de carregamento de fontes. Para otimizações a esse respeito, a <a href="https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/?hl=pt-BR">documentação do Chrome para desenvolvedores</a> recomenda consultar <a href="https://developer.chrome.com/docs/lighthouse/performance/font-display?hl=pt-BR">este post relacionado</a>.</p></blockquote><h4 id="critérios-de-avaliação-do-lighthouse">Critérios de avaliação do Lighthouse</h4><p>De acordo com a <a href="https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/?hl=pt-BR">documentação do Chrome para desenvolvedores</a>, os critérios do Lighthouse são:</p><table><thead><tr><th>Cor/nível<th>FCP em dispositivos móveis (s)<th>FCP em desktop (s)<tbody><tr><td>Verde (rápido)<td>0–1,8<td>0–0,9<tr><td>Laranja (médio)<td>1,8–3<td>0,9–1,6<tr><td>Vermelho (lento)<td>acima de 3<td>acima de 1,6</table><h3 id="lcp-maior-exibicao-de-conteudo">LCP (Maior exibição de conteúdo)</h3><ul><li>Toma como referência a área visível inicial (viewport) quando a página é aberta e mede o tempo até a renderização do maior elemento exibido nessa área (imagem, bloco de texto, vídeo etc.)<li>Quanto maior a área ocupada na tela, maior a probabilidade de o usuário percebê-lo como conteúdo principal<li>Quando o LCP é uma imagem, o tempo pode ser decomposto em 4 subperíodos; identificar onde está o gargalo é fundamental:<ol><li>Time to first byte (TTFB): tempo do início do carregamento da página até o recebimento do primeiro byte da resposta do documento HTML<li>Atraso de carregamento (Load delay): diferença entre o momento em que o navegador começa a carregar o recurso LCP e o TTFB<li>Tempo de carregamento (Load time): tempo necessário para carregar o próprio recurso LCP<li>Atraso de renderização (Render delay): tempo do término do carregamento do recurso LCP até a renderização completa do elemento LCP</ol></ul><h4 id="critérios-de-avaliação-do-lighthouse-1">Critérios de avaliação do Lighthouse</h4><p>De acordo com a <a href="https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/?hl=pt-BR">documentação do Chrome para desenvolvedores</a>, os critérios do Lighthouse são:</p><table><thead><tr><th>Cor/nível<th>LCP em dispositivos móveis (s)<th>LCP em desktop (s)<tbody><tr><td>Verde (rápido)<td>0–2,5<td>0–1,2<tr><td>Laranja (médio)<td>2,5–4<td>1,2–2,4<tr><td>Vermelho (lento)<td>acima de 4<td>acima de 2,4</table><h3 id="tbt-tempo-total-de-bloqueio">TBT (Tempo total de bloqueio)</h3><ul><li>Mede o tempo total em que a página não consegue responder a entradas do usuário (cliques, toques, teclado etc.)<li>Entre o FCP e o <a href="https://developer.chrome.com/docs/lighthouse/performance/interactive?hl=pt-BR">TTI (Tempo até interativo, Time to Interactive)</a>, tarefas que executam por 50 ms ou mais são consideradas <a href="https://web.dev/articles/long-tasks-devtools?hl=pt-BR">tarefas longas</a>. De cada tarefa longa, subtrai-se 50 ms para obter a sua <em>porção de bloqueio (blocking portion)</em>, e o TBT é a soma de todas as porções de bloqueio</ul><blockquote class="prompt-info"><p>O próprio TTI é excessivamente sensível a outliers de rede e a tarefas longas, apresentando baixa consistência e alta variabilidade; por isso, <a href="https://developer.chrome.com/blog/lighthouse-10-0#scoring-changes">a partir do Lighthouse 10 foi removido da pontuação de performance</a>.</p></blockquote><blockquote class="prompt-tip"><p>Em geral, as causas mais comuns de tarefas longas são o carregamento, parsing e execução de JavaScript desnecessário ou ineficiente. A <a href="https://developer.chrome.com/docs/lighthouse/performance/lighthouse-total-blocking-time/?hl=pt-BR">documentação do Chrome para desenvolvedores</a> e o <a href="https://web.dev/articles/long-tasks-devtools#what_is_causing_my_long_tasks?hl=pt-BR">web.dev do Google</a> recomendam usar <a href="https://web.dev/articles/reduce-javascript-payloads-with-code-splitting?hl=pt-BR">code splitting</a> para reduzir o payload de JS de modo que cada parte execute em ≤ 50 ms e, se necessário, mover trabalho para fora da thread principal, executando em múltiplas threads (por exemplo, em um Service Worker).</p></blockquote><h4 id="critérios-de-avaliação-do-lighthouse-2">Critérios de avaliação do Lighthouse</h4><p>De acordo com a <a href="https://developer.chrome.com/docs/lighthouse/performance/lighthouse-total-blocking-time/?hl=pt-BR">documentação do Chrome para desenvolvedores</a>, os critérios do Lighthouse são:</p><table><thead><tr><th>Cor/nível<th>TBT em dispositivos móveis (ms)<th>TBT em desktop (ms)<tbody><tr><td>Verde (rápido)<td>0–200<td>0–150<tr><td>Laranja (médio)<td>200–600<td>150–350<tr><td>Vermelho (lento)<td>acima de 600<td>acima de 350</table><h3 id="cls-mudanca-de-layout-cumulativa">CLS (Mudança cumulativa de layout)</h3><p> <video class="embed-video file" controls="" autoplay="" loop=""> <source src="https://web.dev/static/articles/cls/video/web-dev-assets/layout-instability-api/layout-instability2.webm" type="video/webm" /> Your browser does not support the video tag. Here is a <a href="https://web.dev/static/articles/cls/video/web-dev-assets/layout-instability-api/layout-instability2.webm">link to the video file</a> instead. </video> <em>Exemplo de mudança inesperada de layout</em></p><blockquote><p>Fonte do vídeo: <a href="https://web.dev/articles/cls?hl=pt-BR">Cumulative Layout Shift (CLS) | Articles | web.dev</a></p></blockquote><p><del>Sinto uma fúria profunda no movimento do cursor</del></p><ul><li>Mudanças inesperadas de layout prejudicam a experiência do usuário de várias formas: o texto se desloca e você perde o ponto de leitura, clica no link ou botão errado, etc.<li>O cálculo detalhado da pontuação de CLS está descrito no <a href="https://web.dev/articles/cls">web.dev do Google</a><li>Como se vê na imagem abaixo, a meta deve ser ≤ 0,1</ul><p><img src="https://web.dev/static/articles/cls/image/good-cls-values.svg" alt="Qual é uma boa pontuação de CLS?" width="640" height="480" /></p><blockquote><p>Fonte da imagem: <a href="https://web.dev/articles/cls#what-is-a-good-cls-score?hl=pt-BR">Cumulative Layout Shift (CLS) | Articles | web.dev</a></p></blockquote><h3 id="si-indice-de-velocidade">SI (Índice de Velocidade)</h3><ul><li>Mede quão rapidamente o conteúdo é exibido visualmente durante o carregamento da página<li>O Lighthouse grava em vídeo o processo de carregamento no navegador, analisa o progresso entre quadros e usa o <a href="https://github.com/paulirish/speedline">Speedline (módulo Node.js)</a> para calcular a pontuação de SI</ul><blockquote class="prompt-tip"><p>Medidas que aceleram o carregamento da página — incluindo as já citadas em <a href="#fcp-primeira-exibicao-com-conteudo">FCP</a>, <a href="#lcp-maior-exibicao-de-conteudo">LCP</a> e <a href="#tbt-tempo-total-de-bloqueio">TBT</a> — também beneficiam o SI. Ele não representa apenas um estágio do carregamento, mas reflete o processo como um todo em certo grau.</p></blockquote><h4 id="critérios-de-avaliação-do-lighthouse-3">Critérios de avaliação do Lighthouse</h4><p>De acordo com a <a href="https://developer.chrome.com/docs/lighthouse/performance/speed-index/?hl=pt-BR">documentação do Chrome para desenvolvedores</a>, os critérios do Lighthouse são:</p><table><thead><tr><th>Cor/nível<th>SI em dispositivos móveis (s)<th>SI em desktop (s)<tbody><tr><td>Verde (rápido)<td>0–3,4<td>0–1,3<tr><td>Laranja (médio)<td>3,4–5,8<td>1,3–2,3<tr><td>Vermelho (lento)<td>acima de 5,8<td>acima de 2,3</table>]]> </content> </entry> <entry><title xml:lang="pt-BR">Campo gravitacional e potencial gravitacional</title><link href="https://www.yunseo.kim/pt-BR/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/gravitational-field-and-potential/" rel="alternate" type="text/html" hreflang="cs" /><published>2025-05-17T00:00:00+09:00</published> <updated>2025-11-03T20:50:45+09:00</updated> <id>https://www.yunseo.kim/pt-BR/posts/gravitational-field-and-potential/</id> <author> <name>Yunseo Kim</name> </author> <category term="Physics" /> <category term="Classical Dynamics" /> <summary xml:lang="pt-BR">Aprenda sobre a definição do vetor campo gravitacional e do potencial gravitacional segundo a lei da gravitação universal de Newton, e examine dois exemplos importantes relacionados: o teorema da casca esférica e as curvas de rotação galácticas.</summary> <content type="html" xml:lang="pt-BR"> <![CDATA[<p>Aprenda sobre a definição do vetor campo gravitacional e do potencial gravitacional segundo a lei da gravitação universal de Newton, e examine dois exemplos importantes relacionados: o teorema da casca esférica e as curvas de rotação galácticas.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><ul><li>Lei da gravitação universal de Newton: $\mathbf{F} = -G\cfrac{mM}{r^2}\mathbf{e}_r$<li>Para objetos com distribuição contínua de massa e tamanho finito: $\mathbf{F} = -Gm\int_V \cfrac{dM}{r^2}\mathbf{e}_r = -Gm\int_V \cfrac{\rho(\mathbf{r^\prime})\mathbf{e}_r}{r^2} dv^{\prime}$<ul><li>$\rho(\mathbf{r^{\prime}})$: densidade de massa no ponto localizado no vetor posição $\mathbf{r^{\prime}}$ a partir de uma origem arbitrária<li>$dv^{\prime}$: elemento de volume no ponto localizado no vetor posição $\mathbf{r^{\prime}}$ a partir de uma origem arbitrária</ul><li><strong>Vetor campo gravitacional</strong>:<ul><li>Vetor que representa a força por unidade de massa que uma partícula recebe em um campo criado por um objeto de massa $M$<li>$\mathbf{g} = \cfrac{\mathbf{F}}{m} = - G \cfrac{M}{r^2}\mathbf{e}_r = - G \int_V \cfrac{\rho(\mathbf{r^\prime})\mathbf{e}_r}{r^2}dv^\prime$<li>Tem dimensão de <em>força por unidade de massa</em> ou <em>aceleração</em></ul><li><strong>Potencial gravitacional</strong>:<ul><li>$\mathbf{g} \equiv -\nabla \Phi$<li>Tem dimensão de (<em>força por unidade de massa</em>) $\times$ (<em>distância</em>) ou <em>energia por unidade de massa</em><li>$\Phi = -G\cfrac{M}{r}$<li>Apenas a diferença relativa do potencial gravitacional tem significado, não o valor específico em si<li>Geralmente define-se arbitrariamente a condição $\Phi \to 0$ quando $r \to \infty$ para eliminar a ambiguidade<li>$U = m\Phi, \quad \mathbf{F} = -\nabla U$</ul><li><strong>Potencial gravitacional dentro e fora de uma casca esférica (teorema da casca esférica)</strong><ul><li>Quando $R&gt;a$:<ul><li>$\Phi(R&gt;a) = -\cfrac{GM}{R}$<li>Ao calcular o potencial gravitacional em um ponto externo devido a uma distribuição esfericamente simétrica de matéria, pode-se considerar o objeto como uma massa pontual</ul><li>Quando $R&lt;b$:<ul><li>$\Phi(R&lt;b) = -2\pi\rho G(a^2 - b^2)$<li>Dentro de uma casca de massa esfericamente simétrica, o potencial gravitacional é constante independentemente da posição, e a gravidade atuante é $0$</ul><li>Quando $b&lt;R&lt;a$: $\Phi(b&lt;R&lt;a) = -4\pi\rho G \left( \cfrac{a^2}{2} - \cfrac{b^3}{3R} - \cfrac{R^2}{6} \right)$</ul></ul></blockquote><h2 id="campo-gravitacional">Campo gravitacional</h2><h3 id="lei-da-gravitação-universal-de-newton">Lei da gravitação universal de Newton</h3><p>Newton já havia sistematizado e verificado numericamente a lei da gravitação universal antes de 11666 HE. No entanto, levou mais 20 anos até publicar seus resultados no livro <em>Principia</em> em 11687 HE, porque não conseguia justificar o método de cálculo que assumia a Terra e a Lua como massas pontuais sem tamanho. Felizmente, usando o cálculo que o próprio Newton inventou posteriormente, podemos provar muito mais facilmente esse problema que não era simples para Newton nos anos 1600.</p><p>Segundo a lei da gravitação universal de Newton, <em>cada partícula de massa atrai todas as outras partículas no universo com uma força proporcional ao produto das duas massas e inversamente proporcional ao quadrado da distância entre elas.</em> Matematicamente, isso é expresso como:</p>\[\mathbf{F} = -G\frac{mM}{r^2}\mathbf{e}_r \label{eqn:law_of_gravitation}\tag{1}\]<p><img src="https://upload.wikimedia.org/wikipedia/commons/0/0e/NewtonsLawOfUniversalGravitation.svg" alt="Newton's law of universal gravitation" /></p><blockquote><p><em>Fonte da imagem</em></p><ul><li>Autor: usuário da Wikimedia <a href="https://commons.wikimedia.org/wiki/User:Dna-webmaster">Dennis Nilsson</a><li>Licença: <a href="https://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a></ul></blockquote><p>O vetor unitário $\mathbf{e}_r$ aponta de $M$ para $m$, e o sinal negativo indica que a força é atrativa. Ou seja, $m$ é atraída em direção a $M$.</p><h3 id="experimento-de-cavendish">Experimento de Cavendish</h3><p>A verificação experimental desta lei e a determinação do valor de $G$ foram realizadas pelo físico inglês Henry Cavendish em 11798 HE. O experimento de Cavendish usa uma balança de torção composta por duas pequenas esferas fixadas nas extremidades de uma haste leve. Essas duas esferas são atraídas em direção a duas outras esferas maiores posicionadas próximas a elas. O valor oficial de $G$ determinado até hoje é $6.673 \pm 0.010 \times 10^{-11} \mathrm{N\cdot m^2/kg^2}$.</p><blockquote class="prompt-tip"><p>Embora $G$ seja uma das constantes fundamentais conhecidas há mais tempo, ela é conhecida com menor precisão do que a maioria das outras constantes fundamentais como $e$, $c$, $\hbar$. Ainda hoje, muitas pesquisas estão sendo realizadas para determinar o valor de $G$ com maior precisão.</p></blockquote><h3 id="caso-de-objetos-com-tamanho-finito">Caso de objetos com tamanho finito</h3><p>A lei da equação ($\ref{eqn:law_of_gravitation}$) pode ser aplicada rigorosamente apenas a <em>partículas pontuais</em>. Se um ou ambos os objetos têm tamanho finito, é necessário fazer a suposição adicional de que o campo gravitacional é um <em>campo linear</em> para calcular a força. Ou seja, assume-se que a força gravitacional total que uma partícula de massa $m$ recebe de várias outras partículas pode ser obtida pela soma vetorial de cada força. Para objetos com distribuição contínua de matéria, a soma é substituída por uma integral:</p>\[\mathbf{F} = -Gm\int_V \frac{dM}{r^2}\mathbf{e}_r = -Gm\int_V \frac{\rho(\mathbf{r^\prime})\mathbf{e}_r}{r^2} dv^{\prime} \label{eqn:integral_form}\tag{2}\]<ul><li>$\rho(\mathbf{r^{\prime}})$: densidade de massa no ponto localizado no vetor posição $\mathbf{r^{\prime}}$ a partir de uma origem arbitrária<li>$dv^{\prime}$: elemento de volume no ponto localizado no vetor posição $\mathbf{r^{\prime}}$ a partir de uma origem arbitrária</ul><p>Se tanto o objeto de massa $M$ quanto o objeto de massa $m$ têm tamanho finito, uma segunda integral de volume sobre $m$ também é necessária para obter a força gravitacional total.</p><h3 id="vetor-campo-gravitacional">Vetor campo gravitacional</h3><p>O <strong>vetor campo gravitacional</strong> $\mathbf{g}$ é definido como o vetor que representa a força por unidade de massa que uma partícula recebe em um campo criado por um objeto de massa $M$:</p>\[\mathbf{g} = \frac{\mathbf{F}}{m} = - G \frac{M}{r^2}\mathbf{e}_r \label{eqn:g_vector}\tag{3}\]<p>ou</p>\[\boxed{\mathbf{g} = - G \int_V \frac{\rho(\mathbf{r^\prime})\mathbf{e}_r}{r^2}dv^\prime} \tag{4}\]<p>Aqui, a direção de $\mathbf{e}_r$ varia conforme $\mathbf{r^\prime}$.</p><p>Esta quantidade $\mathbf{g}$ tem dimensão de <em>força por unidade de massa</em> ou <em>aceleração</em>. A magnitude do vetor campo gravitacional $\mathbf{g}$ próximo à superfície da Terra é igual à quantidade que chamamos de <strong>constante de aceleração gravitacional</strong>, com $|\mathbf{g}| \approx 9.80\mathrm{m/s^2}$.</p><h2 id="potencial-gravitacional">Potencial gravitacional</h2><h3 id="definição">Definição</h3><p>O vetor campo gravitacional $\mathbf{g}$ varia como $1/r^2$ e, portanto, satisfaz a condição ($\nabla \times \mathbf{g} \equiv 0$) para ser expresso como o gradiente de alguma função escalar (potencial). Assim, podemos escrever:</p>\[\mathbf{g} \equiv -\nabla \Phi \label{eqn:gradient_phi}\tag{5}\]<p>onde $\Phi$ é chamado de <strong>potencial gravitacional</strong> e tem dimensão de (<em>força por unidade de massa</em>) $\times$ (<em>distância</em>) ou <em>energia por unidade de massa</em>.</p><p>Como $\mathbf{g}$ depende apenas do raio, $\Phi$ também varia com $r$. Das equações ($\ref{eqn:g_vector}$) e ($\ref{eqn:gradient_phi}$):</p>\[\nabla\Phi = \frac{d\Phi}{dr}\mathbf{e}_r = G\frac{M}{r^2}\mathbf{e}_r\]<p>Integrando isso, obtemos:</p>\[\boxed{\Phi = -G\frac{M}{r}} \label{eqn:g_potential}\tag{6}\]<p>Como apenas a diferença relativa do potencial gravitacional tem significado, não a magnitude do valor absoluto, a constante de integração pode ser omitida. Geralmente define-se arbitrariamente a condição $\Phi \to 0$ quando $r \to \infty$ para eliminar a ambiguidade, e a equação ($\ref{eqn:g_potential}$) também satisfaz esta condição.</p><p>Para distribuições contínuas de matéria, o potencial gravitacional é:</p>\[\Phi = -G\int_V \frac{\rho(\mathbf{r\prime})}{r}dv^\prime \label{eqn:g_potential_v}\tag{7}\]<p>Para distribuições superficiais de massa em cascas finas:</p>\[\Phi = -G\int_S \frac{\rho_s}{r}da^\prime. \label{eqn:g_potential_s}\tag{8}\]<p>E para fontes de massa lineares com densidade linear $\rho_l$:</p>\[\Phi = -G\int_\Gamma \frac{\rho_l}{r}ds^\prime. \label{eqn:g_potential_l}\tag{9}\]<h3 id="significado-físico">Significado físico</h3><p>Considere o trabalho por unidade de massa $dW^\prime$ que um objeto realiza quando se move $d\mathbf{r}$ em um campo gravitacional.</p>\[\begin{align*} dW^\prime &amp;= -\mathbf{g}\cdot d\mathbf{r} = (\nabla \Phi)\cdot d\mathbf{r} \\ &amp;= \sum_i \frac{\partial \Phi}{\partial x_i}dx_i = d\Phi \label{eqn:work}\tag{10} \end{align*}\]<p>Nesta equação, $\Phi$ é uma função apenas das coordenadas de posição, expressa como $\Phi=\Phi(x_1, x_2, x_3) = \Phi(x_i)$. Portanto, o trabalho por unidade de massa que um objeto realiza ao se mover de um ponto a outro em um campo gravitacional é igual à diferença de potencial entre esses dois pontos.</p><p>Se definirmos o potencial gravitacional no infinito como $0$, então $\Phi$ em qualquer ponto pode ser interpretado como o trabalho por unidade de massa necessário para mover o objeto do infinito até esse ponto. A energia potencial do objeto é igual ao produto de sua massa e o potencial gravitacional $\Phi$, então se $U$ é a energia potencial:</p>\[U = m\Phi. \label{eqn:potential_e}\tag{11}\]<p>Portanto, a força gravitacional que atua sobre o objeto é obtida aplicando um sinal negativo ao gradiente de sua energia potencial.</p>\[\mathbf{F} = -\nabla U \label{eqn:force_and_potential}\tag{12}\]<p>Quando um objeto está em um campo gravitacional criado por alguma massa, sempre existe alguma energia potencial. Esta energia potencial está rigorosamente no próprio campo, mas convencionalmente é expressa como a energia potencial do objeto.</p><h2 id="exemplo-potencial-gravitacional-dentro-e-fora-de-uma-casca-esférica-teorema-da-casca-esférica">Exemplo: Potencial gravitacional dentro e fora de uma casca esférica (teorema da casca esférica)</h2><h3 id="configuração-de-coordenadas-e-expressão-do-potencial-gravitacional-como-integral">Configuração de coordenadas e expressão do potencial gravitacional como integral</h3><p>Vamos encontrar o potencial gravitacional dentro e fora de uma casca esférica uniforme com raio interno $b$ e raio externo $a$. Embora a gravidade devido à casca esférica possa ser obtida calculando diretamente os componentes da força que atuam sobre uma massa unitária no campo, usar o método do potencial é mais simples.</p><p><img src="/assets/img/gravitational-field-and-potential/spherical-shell.png" alt="Spherical shell" /></p><p>Na figura acima, vamos calcular o potencial no ponto $P$ a uma distância $R$ do centro. Assumindo distribuição uniforme de massa na casca, $\rho(r^\prime)=\rho$, e como há simetria em relação ao ângulo azimutal $\phi$ com base na linha que conecta o centro da esfera ao ponto $P$:</p>\[\begin{align*} \Phi &amp;= -G\int_V \frac{\rho(r^\prime)}{r}dv^\prime \\ &amp;= -\rho G \int_0^{2\pi} \int_0^\pi \int_b^a \frac{1}{r}(dr^\prime)(r^\prime d\theta)(r^\prime \sin\theta\, d\phi) \\ &amp;= -\rho G \int_0^{2\pi} d\phi \int_b^a {r^\prime}^2 dr^\prime \int_0^\pi \frac{\sin\theta}{r}d\theta \\ &amp;= -2\pi\rho G \int_b^a {r^\prime}^2 dr^\prime \int_0^\pi \frac{\sin\theta}{r}d\theta. \label{eqn:spherical_shell_1}\tag{13} \end{align*}\]<p>Pela lei dos cossenos:</p>\[r^2 = {r^\prime}^2 + R^2 - 2r^\prime R \cos\theta \label{eqn:law_of_cosines}\tag{14}\]<p>Como $R$ é constante, diferenciando esta equação em relação a $r^\prime$:</p>\[2rdr = 2r^\prime R \sin\theta d\theta\] \[\frac{\sin\theta}{r}d\theta = \frac{dr}{r^\prime R} \tag{15}\]<p>Substituindo isso na equação ($\ref{eqn:spherical_shell_1}$):</p>\[\Phi = -\frac{2\pi\rho G}{R} \int_b^a r^\prime dr^\prime \int_{r_\mathrm{min}}^{r_\mathrm{max}} dr. \label{eqn:spherical_shell_2}\tag{16}\]<p>Aqui, $r_\mathrm{max}$ e $r_\mathrm{min}$ são determinados pela posição do ponto $P$.</p><h3 id="quando-ra">Quando $R&gt;a$</h3>\[\begin{align*} \Phi(R&gt;a) &amp;= -\frac{2\pi\rho G}{R} \int_b^a r^\prime dr^\prime \int_{R-r^\prime}^{R+r^\prime} dr \\ &amp;= - \frac{4\pi\rho G}{R} \int_b^a {r^\prime}^2 dr^\prime \\ &amp;= - \frac{4}{3}\frac{\pi\rho G}{R}(a^3 - b^3). \label{eqn:spherical_shell_outside_1}\tag{17} \end{align*}\]<p>A massa $M$ da casca esférica é:</p>\[M = \frac{4}{3}\pi\rho(a^3 - b^3) \label{eqn:mass_of_shell}\tag{18}\]<p>Portanto, o potencial é:</p>\[\boxed{\Phi(R&gt;a) = -\frac{GM}{R}} \label{eqn:spherical_shell_outside_2}\tag{19}\]<blockquote class="prompt-info"><p>Comparando o potencial gravitacional devido a uma massa pontual de massa $M$ na equação ($\ref{eqn:g_potential}$) com o resultado que acabamos de obter ($\ref{eqn:spherical_shell_outside_2}$), vemos que são idênticos. Isso significa que ao calcular o potencial gravitacional em um ponto externo devido a uma distribuição esfericamente simétrica de matéria, podemos considerar toda a massa como concentrada no centro. A maioria dos corpos celestes esféricos de tamanho considerável, como a Terra ou a Lua, se enquadra nesta categoria, pois podem ser considerados como inúmeras cascas esféricas concêntricas com diferentes diâmetros sobrepostas como uma <a href="https://en.wikipedia.org/wiki/Matryoshka_doll">matryoshka</a>. Isso fornece a <a href="#lei-da-gravitação-universal-de-newton">base válida para assumir corpos celestes como a Terra ou a Lua como massas pontuais sem tamanho nos cálculos</a> mencionada no início deste artigo.</p></blockquote><h3 id="quando-rb">Quando $R&lt;b$</h3>\[\begin{align*} \Phi(R&lt;b) &amp;= -\frac{2\pi\rho G}{R} \int_b^a r^\prime dr^\prime \int_{r^\prime - R}^{r^\prime + R}dr \\ &amp;= -4\pi\rho G \int_b^a r^\prime dr^\prime \\ &amp;= -2\pi\rho G(a^2 - b^2). \label{eqn:spherical_shell_inside}\tag{20} \end{align*}\]<blockquote class="prompt-info"><p>Dentro de uma casca de massa esfericamente simétrica, o potencial gravitacional é constante independentemente da posição, e a gravidade atuante é $0$.</p></blockquote><blockquote class="prompt-tip"><p>Isso também é uma das principais evidências de que a “teoria da Terra oca”, uma das pseudociências representativas, é absurda. Se a Terra fosse uma casca esférica com interior vazio, como afirma a teoria da Terra oca, a gravidade terrestre não atuaria sobre todos os objetos dentro dessa cavidade. Considerando a massa e o volume da Terra, não pode haver uma cavidade terrestre, e mesmo que houvesse, os seres vivos lá não viveriam usando o interior da casca esférica como solo, mas flutuariam em estado de ausência de peso como em uma estação espacial.<br /> <a href="https://youtu.be/VD6xJq8NguY?si=szgtuLkuk6rPJag3">Embora microrganismos possam viver em camadas profundas a alguns quilômetros subterrâneos</a>, pelo menos não é possível da forma que a teoria da Terra oca afirma. Eu também gosto muito do romance de Júlio Verne “Viagem ao Centro da Terra” e do filme “Jornada ao Centro da Terra”, mas devemos apreciar as obras de ficção como ficção e não levá-las a sério.</p></blockquote><h3 id="quando-bra">Quando $b&lt;R&lt;a$</h3>\[\begin{align*} \Phi(b&lt;R&lt;a) &amp;= -\frac{4\pi\rho G}{3R}(R^3 - b^3) - 2\pi\rho G(a^2 - R^2) \\ &amp;= -4\pi\rho G \left( \frac{a^2}{2} - \frac{b^3}{3R} - \frac{R^2}{6} \right) \label{eqn:within_spherical_shell}\tag{21} \end{align*}\]<h3 id="resultados">Resultados</h3><p>O potencial gravitacional $\Phi$ nas três regiões calculadas anteriormente e a magnitude correspondente do vetor campo gravitacional $|\mathbf{g}|$ como função da distância $R$ são mostrados nos gráficos a seguir.</p><p><img src="/physics-visualizations/figs/shell-theorem-gravitational-potential.png" alt="Gravitational Potential as a Function of R" /><br /> <img src="/physics-visualizations/figs/shell-theorem-field-vector.png" alt="Magnitude of the Field Vector as a Function of R" /></p><blockquote><ul><li>Código de visualização Python: <a href="https://github.com/yunseo-kim/physics-visualizations/blob/main/src/shell_theorem.py">repositório yunseo-kim/physics-visualizations</a><li>Licença: <a href="https://github.com/yunseo-kim/physics-visualizations?tab=readme-ov-file#license">Ver aqui</a></ul></blockquote><p>Pode-se ver que o potencial gravitacional e a magnitude do vetor campo gravitacional são contínuos. Se o potencial gravitacional fosse descontínuo em algum ponto, o gradiente do potencial nesse ponto, ou seja, a magnitude da gravidade, se tornaria infinita, o que não é fisicamente válido, então a função potencial deve ser contínua em todos os pontos. No entanto, a <em>derivada</em> do vetor campo gravitacional é descontínua nas superfícies interna e externa da casca.</p><h2 id="exemplo-curvas-de-rotação-galácticas">Exemplo: Curvas de rotação galácticas</h2><p>Segundo observações astronômicas, em muitas galáxias espirais que rotam em torno do centro, como a Via Láctea ou a galáxia de Andrômeda, a maioria das massas observáveis está concentrada próximo ao centro. No entanto, as velocidades orbitais das massas nessas galáxias espirais diferem significativamente dos valores teoricamente previstos a partir da distribuição de massa observável, como pode ser confirmado no gráfico a seguir, e são quase constantes além de uma certa distância.</p><p><img src="https://upload.wikimedia.org/wikipedia/commons/b/b9/GalacticRotation2.svg" alt="Galactic Rotation" width="972" /></p><blockquote><p><em>Fonte da imagem</em></p><ul><li>Autor: usuário da Wikipedia <a href="https://en.wikipedia.org/wiki/User:PhilHibbs">PhilHibbs</a><li>Licença: Domínio Público</ul></blockquote><p> <video class="embed-video file" controls="" autoplay="" loop=""> <source src="https://cdn.jsdelivr.net/gh/yunseo-kim/yunseo-kim.github.io/assets/video/gravitational-field-and-potential/Galaxy_rotation_under_the_influence_of_dark_matter.webm" type="video/webm" /> <source src="https://cdn.jsdelivr.net/gh/yunseo-kim/yunseo-kim.github.io/assets/video/gravitational-field-and-potential/Galaxy_rotation_under_the_influence_of_dark_matter.ogg" type="video/ogg" /> Your browser does not support the video tag. Here is a <a href="https://cdn.jsdelivr.net/gh/yunseo-kim/yunseo-kim.github.io/assets/video/gravitational-field-and-potential/Galaxy_rotation_under_the_influence_of_dark_matter.webm">link to the video file</a> instead. </video> <em>Esq.: rotação galáctica prevista a partir da massa observável | Dir.: rotação galáctica realmente observada.</em></p><blockquote><p><em>Fonte do vídeo</em></p><ul><li>Link do arquivo original (vídeo Ogg Theora): <a href="https://commons.wikimedia.org/wiki/File:Galaxy_rotation_under_the_influence_of_dark_matter.ogv">https://commons.wikimedia.org/wiki/File:Galaxy_rotation_under_the_influence_of_dark_matter.ogv</a><li>Autor: <a href="https://beltoforion.de/en/index.php">Ingo Berg</a><li>Licença: <a href="https://creativecommons.org/licenses/by-sa/3.0/deed.en">CC BY-SA 3.0</a><li>Método e código de simulação utilizados: <a href="https://beltoforion.de/en/spiral_galaxy_renderer/">https://beltoforion.de/en/spiral_galaxy_renderer/</a></ul></blockquote><blockquote class="prompt-danger"><p>A imagem anteriormente inserida nesta página, <code class="language-plaintext highlighter-rouge">Rotation curve of spiral galaxy Messier 33 (Triangulum).png</code>, <a href="https://commons.wikimedia.org/wiki/Commons:Deletion_requests/File:Rotation_curve_of_spiral_galaxy_Messier_33_(Triangulum).png">foi eliminada do Wikimedia Commons por ter sido considerada uma obra derivada plagiada sem citação adequada</a> de um trabalho não livre do <a href="https://markwhittle.uvacreate.virginia.edu/">professor Mark Whittle da Universidade da Virgínia</a>, criada pelo usuário da Wikimedia <a href="https://commons.wikimedia.org/wiki/User:Accrama">Mario De Leo</a>; por isso, foi removida também desta página.</p></blockquote><p>Vamos prever a velocidade orbital em função da distância quando a massa da galáxia está concentrada no centro, confirmar que essa previsão não coincide com os resultados observacionais, e mostrar que a massa $M(R)$ distribuída dentro da distância $R$ do centro galáctico deve ser proporcional a $R$ para explicar os resultados observacionais.</p><p>Primeiro, quando a massa galáctica $M$ está concentrada no centro, a velocidade orbital à distância $R$ é:</p>\[\frac{GMm}{R^2} = \frac{mv^2}{R}\] \[v = \sqrt{\frac{GM}{R}} \propto \frac{1}{\sqrt{R}}.\]<p>Neste caso, prevê-se uma velocidade orbital que diminui como $1/\sqrt{R}$, como mostrado pelas linhas pontilhadas nos dois gráficos acima, mas segundo os resultados observacionais, a velocidade orbital $v$ é quase constante independentemente da distância $R$, então a previsão e os resultados observacionais não coincidem. Esses resultados observacionais só podem ser explicados se $M(R)\propto R$.</p><p>Definindo $M(R) = kR$ usando a constante de proporcionalidade $k$:</p>\[v = \sqrt{\frac{GM(R)}{R}} = \sqrt{Gk}\ \text{(constante)}.\]<p>A partir disso, os astrofísicos concluem que deve haver ‘matéria escura’ não descoberta em muitas galáxias, e que essa matéria escura deve constituir mais de 90% da massa do universo. No entanto, a identidade da matéria escura ainda não foi claramente revelada, e embora não seja a teoria principal, existem tentativas como a Dinâmica Newtoniana Modificada (MOND) que tentam explicar os resultados observacionais sem assumir a existência de matéria escura. Hoje, esses campos de pesquisa estão na vanguarda da astrofísica.</p>]]> </content> </entry> <entry><title xml:lang="pt-BR">Método dos Coeficientes Indeterminados</title><link href="https://www.yunseo.kim/pt-BR/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/method-of-undetermined-coefficients/" rel="alternate" type="text/html" hreflang="cs" /><published>2025-04-20T00:00:00+09:00</published> <updated>2025-07-11T20:37:36+09:00</updated> <id>https://www.yunseo.kim/pt-BR/posts/method-of-undetermined-coefficients/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="pt-BR">Vamos explorar o método dos coeficientes indeterminados, uma técnica que permite resolver facilmente problemas de valor inicial para certos tipos de EDOs lineares não homogêneas com coeficientes constantes, frequentemente utilizada em engenharia para sistemas vibratórios e circuitos RLC.</summary> <content type="html" xml:lang="pt-BR"> <![CDATA[<p>Vamos explorar o método dos coeficientes indeterminados, uma técnica que permite resolver facilmente problemas de valor inicial para certos tipos de EDOs lineares não homogêneas com coeficientes constantes, frequentemente utilizada em engenharia para sistemas vibratórios e circuitos RLC.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><ul><li>O <strong>método dos coeficientes indeterminados</strong> se aplica a:<ul><li>EDOs lineares com <strong>coeficientes constantes $a$ e $b$</strong><li>Onde a entrada $r(x)$ consiste de funções exponenciais, potências de $x$, $\cos$ ou $\sin$, ou somas e produtos dessas funções<li>Equação da forma $y^{\prime\prime} + ay^{\prime} + by = r(x)$</ul><li><strong>Regras de seleção para o método dos coeficientes indeterminados</strong><ul><li><strong>(a) Regra básica</strong>: Se $r(x)$ na equação ($\ref{eqn:linear_ode_with_constant_coefficients}$) for uma das funções na primeira coluna da tabela, escolha $y_p$ da mesma linha na segunda coluna e determine os coeficientes indeterminados substituindo $y_p$ e suas derivadas na equação ($\ref{eqn:linear_ode_with_constant_coefficients}$).<li><strong>(b) Regra de modificação</strong>: Se o termo escolhido para $y_p$ for uma solução da EDO homogênea correspondente $y^{\prime\prime} + ay^{\prime} + by = 0$, multiplique este termo por $x$ (ou por $x^2$ se esta solução corresponder a uma raiz dupla da equação característica da EDO homogênea).<li><strong>(c) Regra da soma</strong>: Se $r(x)$ for uma soma de funções da primeira coluna da tabela, escolha para $y_p$ a soma das funções correspondentes na segunda coluna.</ul></ul><table><thead><tr><th style="text-align: left">Termo em $r(x)$<th style="text-align: left">Escolha para $y_p(x)$<tbody><tr><td style="text-align: left">$ke^{\gamma x}$<td style="text-align: left">$Ce^{\gamma x}$<tr><td style="text-align: left">$kx^n\ (n=0,1,\cdots)$<td style="text-align: left">$K_nx^n + K_{n-1}x^{n-1} + \cdots + K_1x + K_0$<tr><td style="text-align: left">$k\cos{\omega x}$<br />$k\sin{\omega x}$<td style="text-align: left">$K\cos{\omega x} + M\sin{\omega x}$<tr><td style="text-align: left">$ke^{\alpha x}\cos{\omega x}$<br />$ke^{\alpha x}\sin{\omega x}$<td style="text-align: left">$e^{\alpha x}(K\cos{\omega x} + M\sin{\omega x})$</table></blockquote><h2 id="pré-requisitos">Pré-requisitos</h2><ul><li><a href="/pt-BR/posts/homogeneous-linear-odes-of-second-order/">EDOs Lineares Homogêneas de Segunda Ordem</a><li><a href="/pt-BR/posts/homogeneous-linear-odes-with-constant-coefficients/">EDOs Lineares Homogêneas com Coeficientes Constantes</a><li><a href="/pt-BR/posts/euler-cauchy-equation/">Equação de Euler-Cauchy</a><li><a href="/pt-BR/posts/wronskian-existence-and-uniqueness-of-solutions/">Wronskiano, Existência e Unicidade de Soluções</a><li><a href="/pt-BR/posts/nonhomogeneous-linear-odes-of-second-order/">EDOs Lineares Não Homogêneas de Segunda Ordem</a><li>Espaços vetoriais, geração linear (álgebra linear)</ul><h2 id="método-dos-coeficientes-indeterminados">Método dos Coeficientes Indeterminados</h2><p>Consideremos uma equação diferencial ordinária linear não homogênea de segunda ordem</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = r(x) \label{eqn:nonhomogeneous_linear_ode}\tag{1}\]<p>onde $r(x) \not\equiv 0$, e a equação diferencial homogênea correspondente</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0 \label{eqn:homogeneous_linear_ode}\tag{2}\]<p>De acordo com o que vimos em <a href="/pt-BR/posts/nonhomogeneous-linear-odes-of-second-order/">EDOs Lineares Não Homogêneas de Segunda Ordem</a>, para resolver um problema de valor inicial para a equação diferencial não homogênea ($\ref{eqn:nonhomogeneous_linear_ode}$), precisamos encontrar $y_h$ resolvendo a equação homogênea ($\ref{eqn:homogeneous_linear_ode}$) e depois encontrar uma solução particular $y_p$ da equação ($\ref{eqn:nonhomogeneous_linear_ode}$) para obter a solução geral</p>\[y(x) = y_h(x) + y_p(x) \label{eqn:general_sol}\tag{3}\]<p>Então, como encontramos $y_p$? O método geral para encontrar $y_p$ é o <strong>método da variação de parâmetros</strong>, mas em certos casos podemos aplicar o <strong>método dos coeficientes indeterminados</strong>, que é muito mais simples. Este método é particularmente útil na engenharia para sistemas vibratórios e modelos de circuitos RLC.</p><p>O método dos coeficientes indeterminados é adequado para equações diferenciais lineares com <strong>coeficientes constantes $a$ e $b$</strong> e onde a entrada $r(x)$ consiste de funções exponenciais, potências de $x$, $\cos$ ou $\sin$, ou somas e produtos dessas funções:</p>\[y^{\prime\prime} + ay^{\prime} + by = r(x) \label{eqn:linear_ode_with_constant_coefficients}\tag{4}\]<p>A ideia central do método dos coeficientes indeterminados é que essas formas de $r(x)$ têm derivadas que mantêm uma forma similar. Para aplicar o método, escolhemos um $y_p$ com forma similar a $r(x)$, mas com coeficientes indeterminados que serão determinados substituindo $y_p$ e suas derivadas na equação diferencial dada. As regras para escolher a forma apropriada de $y_p$ são as seguintes:</p><blockquote class="prompt-info"><p><strong>Regras de seleção para o método dos coeficientes indeterminados</strong><br /> <strong>(a) Regra básica</strong>: Se $r(x)$ na equação ($\ref{eqn:linear_ode_with_constant_coefficients}$) for uma das funções na primeira coluna da tabela, escolha $y_p$ da mesma linha na segunda coluna e determine os coeficientes indeterminados substituindo $y_p$ e suas derivadas na equação ($\ref{eqn:linear_ode_with_constant_coefficients}$).<br /> <strong>(b) Regra de modificação</strong>: Se o termo escolhido para $y_p$ for uma solução da EDO homogênea correspondente $y^{\prime\prime} + ay^{\prime} + by = 0$, multiplique este termo por $x$ (ou por $x^2$ se esta solução corresponder a uma raiz dupla da equação característica da equação homogênea).<br /> <strong>(c) Regra da soma</strong>: Se $r(x)$ for uma soma de funções da primeira coluna da tabela, escolha para $y_p$ a soma das funções correspondentes na segunda coluna.</p><table><thead><tr><th style="text-align: left">Termo em $r(x)$<th style="text-align: left">Escolha para $y_p(x)$<tbody><tr><td style="text-align: left">$ke^{\gamma x}$<td style="text-align: left">$Ce^{\gamma x}$<tr><td style="text-align: left">$kx^n\ (n=0,1,\cdots)$<td style="text-align: left">$K_nx^n + K_{n-1}x^{n-1} + \cdots + K_1x + K_0$<tr><td style="text-align: left">$k\cos{\omega x}$<br />$k\sin{\omega x}$<td style="text-align: left">$K\cos{\omega x} + M\sin{\omega x}$<tr><td style="text-align: left">$ke^{\alpha x}\cos{\omega x}$<br />$ke^{\alpha x}\sin{\omega x}$<td style="text-align: left">$e^{\alpha x}(K\cos{\omega x} + M\sin{\omega x})$</table></blockquote><p>Este método tem a vantagem de ser não apenas simples, mas também autocorretivo. Se você escolher $y_p$ incorretamente ou com poucos termos, chegará a uma contradição; se escolher muitos termos, os coeficientes dos termos desnecessários serão zero, levando ao resultado correto. Mesmo que algo dê errado ao aplicar o método, você perceberá naturalmente durante o processo de resolução, então pode tentar com confiança seguindo as regras de seleção acima.</p><h3 id="prova-da-regra-da-soma">Prova da regra da soma</h3><p>Considere uma equação diferencial linear não homogênea da forma</p>\[y^{\prime\prime} + ay^{\prime} + by = r_1(x) + r_2(x)\]<p>Agora, considere as duas equações com o mesmo lado esquerdo, mas com entradas $r_1$ e $r_2$:</p>\[\begin{gather*} y^{\prime\prime} + ay^{\prime} + by = r_1(x) \\ y^{\prime\prime} + ay^{\prime} + by = r_2(x) \end{gather*}\]<p>Suponha que estas equações tenham soluções ${y_p}_1$ e ${y_p}_2$, respectivamente. Denotando o lado esquerdo da equação por $L[y]$, pela linearidade de $L[y]$, temos que $y_p = {y_p}_1 + {y_p}_2$ satisfaz:</p>\[L[y_p] = L[{y_p}_1 + {y_p}_2] = L[{y_p}_1] + L[{y_p}_2] = r_1 + r_2 = r. \ \blacksquare\]<h2 id="exemplo-yprimeprime--ayprime--by--kegamma-x">Exemplo: $y^{\prime\prime} + ay^{\prime} + by = ke^{\gamma x}$</h2><p>De acordo com a regra básica (a), escolhemos $y_p = Ce^{\gamma x}$ e substituímos na equação dada $y^{\prime\prime} + ay^{\prime} + by = ke^{\gamma x}$:</p>\[\gamma^2 Ce^{\gamma x} + \gamma aCe^{\gamma x} + bCe^{\gamma x} = ke^{\gamma x}\] \[C(\gamma^2 + a\gamma + b)e^{\gamma x} = ke^{\gamma x}\] \[C(\gamma^2 + a\gamma + b) = k.\]<h3 id="caso-em-que-gamma2--agamma--b-neq-0">Caso em que $\gamma^2 + a\gamma + b \neq 0$</h3><p>Podemos determinar o coeficiente indeterminado $C$ e encontrar $y_p$ da seguinte forma:</p>\[C = \frac{k}{\gamma^2 + a\gamma + b}\] \[y_p = Ce^{\gamma x} = \frac{k}{\gamma^2 + a\gamma + b} e^{\gamma x}.\]<h3 id="caso-em-que-gamma2--agamma--b--0">Caso em que $\gamma^2 + a\gamma + b = 0$</h3><p>Neste caso, precisamos aplicar a regra de modificação (b). Primeiro, usando $b = -\gamma^2 - a\gamma = -\gamma(a + \gamma)$, encontramos as raízes da equação característica da equação homogênea $y^{\prime\prime} + ay^{\prime} + by = 0$:</p>\[y^{\prime\prime} + ay^{\prime} - \gamma(a + \gamma)y = 0\] \[\lambda^2 + a\lambda - \gamma(a + \gamma) = 0\] \[(\lambda + (a + \gamma))(\lambda - \gamma) = 0\] \[\lambda = \gamma, -a -\gamma.\]<p>Isso nos dá a base da equação homogênea:</p>\[y_1 = e^{\gamma x}, \quad y_2 = e^{(-a - \gamma)x}\]<h4 id="caso-em-que-gamma-neq--a-gamma">Caso em que $\gamma \neq -a-\gamma$</h4><p>Como $Ce^{\gamma x}$ é uma solução da equação homogênea correspondente (mas não corresponde a uma raiz dupla), pela regra de modificação (b), multiplicamos por $x$ e escolhemos $y_p = Cxe^{\gamma x}$.</p><p>Substituindo esta nova forma de $y_p$ na equação original $y^{\prime\prime} + ay^{\prime} - \gamma(a + \gamma)y = ke^{\gamma x}$:</p>\[C(2\gamma + \gamma^2 x)e^{\gamma x} + aC(1 + \gamma x)e^{\gamma x} - \gamma(a + \gamma)Cxe^{\gamma x} = ke^{\gamma x}\] \[C \left[\left\{\gamma^2 + a\gamma -\gamma(a + \gamma)\right\}x + 2\gamma + a \right]e^{\gamma x} = ke^{\gamma x}\] \[C(2\gamma + a)e^{\gamma x} = ke^{\gamma x}\] \[C(2\gamma + a) = k\] \[\therefore C = \frac{k}{2\gamma + a}, \quad y_p = Cxe^{\gamma x} = \frac{k}{2\gamma + a}xe^{\gamma x}.\]<h4 id="caso-em-que-gamma---a-gamma">Caso em que $\gamma = -a-\gamma$</h4><p>Neste caso, $Ce^{\gamma x}$ corresponde a uma raiz dupla da equação característica da equação homogênea, então pela regra de modificação (b), multiplicamos por $x^2$ e escolhemos $y_p = Cx^2 e^{\gamma x}$.</p><p>Substituindo na equação original $y^{\prime\prime} - 2\gamma y^{\prime} + \gamma^2 y = ke^{\gamma x}$:</p>\[C(2 + 4\gamma x + \gamma^2 x^2)e^{\gamma x} + C(-4\gamma x - 2\gamma^2 x^2)e^{\gamma x} + C(\gamma^2 x^2)e^{\gamma x} = ke^{\gamma x}\] \[2Ce^{\gamma x} = ke^{\gamma x}\] \[2C = k\] \[\therefore C = \frac{k}{2}, \quad y_p = Cx^2 e^{\gamma x} = \frac{k}{2}x^2 e^{\gamma x}.\]<h2 id="extensão-do-método-dos-coeficientes-indeterminados-rx-na-forma-de-produtos-de-funções">Extensão do método dos coeficientes indeterminados: $r(x)$ na forma de produtos de funções</h2><p>Considere uma EDO linear não homogênea com $r(x) = k x^n e^{\alpha x}\cos(\omega x)$:</p>\[y^{\prime\prime} + ay^{\prime} + by = C x^n e^{\alpha x}\cos(\omega x)\]<p>Se $r(x)$ puder ser expresso como produtos de funções exponenciais $e^{\alpha x}$, potências de $x$ como $x^m$, e funções trigonométricas como $\cos{\omega x}$ ou $\sin{\omega x}$ (aqui assumimos $\cos$ sem perda de generalidade), ou somas e produtos dessas funções (ou seja, se puder ser expresso como somas e produtos das funções na primeira coluna da tabela anterior), então existe uma solução particular $y_p$ que é uma soma e produto das funções na segunda coluna da tabela.</p><blockquote class="prompt-tip"><p>Para uma prova rigorosa, usamos álgebra linear em algumas partes, que estão marcadas com *. Você pode pular essas partes e ainda compreender a ideia geral.</p></blockquote><h3 id="definição-do-espaço-vetorial-v">Definição do espaço vetorial $V$*</h3><p>Para $r(x)$ da forma \(\begin{align*} r(x) &amp;= C_1x^{n_1}e^{\alpha_1 x} \times C_2x^{n_2}e^{\alpha_2 x}\cos(\omega x) \times \cdots \\ &amp;= C x^n e^{\alpha x}\cos(\omega x) \end{align*}\)</p><p>podemos definir um espaço vetorial $V$ tal que $r(x) \in V$:</p>\[V = \mathrm{span}\left\{x^k e^{\alpha x}\cos(\omega x), \; x^k e^{\alpha x}\sin(\omega x) \bigm| k=0,1,\dots,n \right\}\]<h3 id="forma-das-derivadas-de-funções-exponenciais-polinomiais-e-trigonométricas">Forma das derivadas de funções exponenciais, polinomiais e trigonométricas</h3><p>As derivadas das funções básicas apresentadas na primeira coluna da tabela têm as seguintes formas:</p><ul><li>Função exponencial: $\cfrac{d}{dx}e^{\alpha x} = \alpha e^{\alpha x}$<li>Função polinomial: $\cfrac{d}{dx}x^m = mx^{m-1}$<li>Funções trigonométricas: $\cfrac{d}{dx}\cos\omega x = -\omega\sin\omega x, \quad \cfrac{d}{dx}\sin\omega x = \omega\cos\omega x$</ul><p>Observe que as derivadas dessas funções também podem ser expressas como <u>somas de funções do mesmo tipo</u>.</p><p>Portanto, se $f$ e $g$ são funções do tipo acima ou somas delas, e $r(x) = f(x)g(x)$, aplicando a regra do produto para derivadas:</p>\[\begin{align*} (fg)^{\prime} &amp;= f^{\prime}g + fg^{\prime}, \\ (fg)^{\prime\prime} &amp;= f^{\prime\prime}g + 2f^{\prime}g^{\prime} + fg^{\prime\prime} \end{align*}\]<p>onde $f$, $f^{\prime}$, $f^{\prime\prime}$ e $g$, $g^{\prime}$, $g^{\prime\prime}$ podem todos ser escritos como somas ou múltiplos constantes de funções exponenciais, polinomiais e trigonométricas. Portanto, $r^{\prime}(x) = (fg)^{\prime}$ e $r^{\prime\prime}(x) = (fg)^{\prime\prime}$ também podem ser expressos como somas e produtos dessas funções, assim como $r(x)$.</p><h3 id="invariância-de-v-sob-o-operador-de-diferenciação-d-e-a-transformação-linear-l">Invariância de $V$ sob o operador de diferenciação $D$ e a transformação linear $L$*</h3><p>Ou seja, não apenas $r(x)$, mas também $r^{\prime}(x)$ e $r^{\prime\prime}(x)$ são combinações lineares de termos da forma $x^k e^{\alpha x}\cos(\omega x)$ e $x^k e^{\alpha x}\sin(\omega x)$, então:</p>\[r(x) \in V \implies r^{\prime}(x) \in V,\ r^{\prime\prime}(x) \in V.\]<p>Generalizando para todos os elementos do espaço vetorial $V$ definido anteriormente e introduzindo o operador de diferenciação $D$, podemos dizer que <em>o espaço vetorial $V$ é fechado sob a operação de diferenciação $D$</em>. Portanto, se denotarmos o lado esquerdo da equação $y^{\prime\prime} + ay^{\prime} + by$ como $L[y]$, então <em>$V$ é invariante sob $L$</em>.</p>\[D^2(V)\subseteq V,\quad aD(V)\subseteq V,\quad b\,V\subseteq V \implies L(V)\subseteq V.\]<p>Como $r(x) \in V$ e $V$ é invariante sob $L$, existe outro elemento $y_p \in V$ tal que $L[y_p] = r$.</p>\[\exists y_p \in V: L[y_p] = r\]<h3 id="ansatz">Ansatz</h3><p>Portanto, podemos escolher um $y_p$ apropriado usando coeficientes indeterminados $A_0, A_1, \dots, A_n$ e $K$, $M$ da seguinte forma, que inclui a soma de todos os possíveis termos produto:</p>\[y_p = e^{\alpha x}(A_nx^n + A_{n-1}x^{n-1} + \cdots + A_1x + A_0)(K\cos{\omega x} + M \sin{\omega x}).\]<p>Aqui, $n$ é determinado pelo grau de $x$ em $r(x)$. Seguindo as regras básica (a) e de modificação (b), podemos determinar os coeficientes indeterminados substituindo $y_p$ (ou $xy_p$, $x^2y_p$ conforme necessário) e suas derivadas na equação dada.</p><p>$\blacksquare$</p><blockquote class="prompt-warning"><p>Se a entrada dada $r(x)$ contiver diferentes valores de $\alpha_i$ e $\omega_j$, você deve incluir todos os possíveis termos da forma $x^{k}e^{\alpha_i x}\cos(\omega_j x)$ e $x^{k}e^{\alpha_i x}\sin(\omega_j x)$ para cada valor de $\alpha_i$ e $\omega_j$ ao escolher $y_p$.<br /> A vantagem do método dos coeficientes indeterminados é sua simplicidade, mas se o ansatz se tornar muito complicado, perdendo essa vantagem, pode ser melhor aplicar o método da variação de parâmetros, que discutiremos posteriormente.</p></blockquote><h2 id="extensão-do-método-dos-coeficientes-indeterminados-equação-de-euler-cauchy">Extensão do método dos coeficientes indeterminados: equação de Euler-Cauchy</h2><p>O método dos coeficientes indeterminados pode ser aplicado não apenas a <a href="/pt-BR/posts/homogeneous-linear-odes-with-constant-coefficients/">EDOs Lineares Homogêneas de Segunda Ordem com Coeficientes Constantes</a>, mas também à <a href="/pt-BR/posts/euler-cauchy-equation/">Equação de Euler-Cauchy</a>:</p>\[x^2y^{\prime\prime} + axy^{\prime} + by = r(x) \label{eqn:euler_cauchy}\tag{5}\]<h3 id="substituição-de-variável">Substituição de variável</h3><p>Como vimos em <a href="/pt-BR/posts/euler-cauchy-equation/#transformação-para-uma-edo-linear-homogênea-de-segunda-ordem-com-coeficientes-constantes">transformação para uma EDO linear homogênea de segunda ordem com coeficientes constantes</a>, fazendo a substituição $x = e^t$, temos:</p>\[\frac{d}{dx} = \frac{1}{x}\frac{d}{dt}, \quad \frac{d^2}{dx^2} = \frac{1}{x^2}\left(\frac{d^2}{dt^2} - \frac{d}{dt} \right)\]<p>e a equação de Euler-Cauchy pode ser transformada em uma EDO linear homogênea com coeficientes constantes em termos de $t$:</p>\[y^{\prime\prime} + (a-1)y^{\prime} + by = r(e^t). \label{eqn:substituted}\tag{6}\]<p>Podemos então aplicar o <a href="#método-dos-coeficientes-indeterminados">método dos coeficientes indeterminados</a> à equação ($\ref{eqn:substituted}$) em termos de $t$ e, finalmente, substituir $t = \ln x$ para obter a solução em termos de $x$.</p><h3 id="caso-em-que-rx-é-uma-potência-de-x-logaritmo-natural-ou-somas-e-produtos-dessas-funções">Caso em que $r(x)$ é uma potência de $x$, logaritmo natural, ou somas e produtos dessas funções</h3><p>Especialmente quando a entrada $r(x)$ consiste de potências de $x$, logaritmos naturais, ou somas e produtos dessas funções, podemos selecionar diretamente um $y_p$ apropriado seguindo as regras de seleção para a equação de Euler-Cauchy:</p><blockquote class="prompt-info"><p><strong>Regras de seleção para o método dos coeficientes indeterminados: versão para a equação de Euler-Cauchy</strong><br /> <strong>(a) Regra básica</strong>: Se $r(x)$ na equação ($\ref{eqn:euler_cauchy}$) for uma das funções na primeira coluna da tabela, escolha $y_p$ da mesma linha na segunda coluna e determine os coeficientes indeterminados substituindo $y_p$ e suas derivadas na equação ($\ref{eqn:euler_cauchy}$).<br /> <strong>(b) Regra de modificação</strong>: Se o termo escolhido para $y_p$ for uma solução da EDO homogênea correspondente $x^2y^{\prime\prime} + axy^{\prime} + by = 0$, multiplique este termo por $\ln{x}$ (ou por $(\ln{x})^2$ se esta solução corresponder a uma raiz dupla da equação característica da equação homogênea).<br /> <strong>(c) Regra da soma</strong>: Se $r(x)$ for uma soma de funções da primeira coluna da tabela, escolha para $y_p$ a soma das funções correspondentes na segunda coluna.</p><table><thead><tr><th style="text-align: left">Termo em $r(x)$<th style="text-align: left">Escolha para $y_p(x)$<tbody><tr><td style="text-align: left">$kx^m\ (m=0,1,\cdots)$<td style="text-align: left">$Ax^m$<tr><td style="text-align: left">$kx^m \ln{x}\ (m=0,1,\cdots)$<td style="text-align: left">$x^m(B\ln x + C)$<tr><td style="text-align: left">$k(\ln{x})^s\ (s=0,1,\cdots)$<td style="text-align: left">$D_0 + D_1\ln{x} + \cdots + D_{s-1}(\ln{x})^{s-1} + D_s(\ln{x})^s$<tr><td style="text-align: left">$kx^m (\ln{x})^s$<br />$(m=0,1,\cdots ;\; s=0,1,\cdots)$<td style="text-align: left">$x^m \left( D_0 + D_1\ln{x} + \cdots + D_{s-1}(\ln{x})^{s-1} + D_s(\ln{x})^s \right)$</table></blockquote><p>Isso nos permite encontrar $y_p$ de forma mais rápida e simples para formas práticas importantes de entrada $r(x)$, sem precisar fazer a <a href="#substituição-de-variável">substituição de variável</a>. Estas regras de seleção para a equação de Euler-Cauchy podem ser derivadas das <a href="#método-dos-coeficientes-indeterminados">regras de seleção originais</a> substituindo $x$ por $\ln{x}$.</p>]]> </content> </entry> <entry><title xml:lang="pt-BR">EDOs Lineares Não-Homogêneas de Segunda Ordem</title><link href="https://www.yunseo.kim/pt-BR/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/nonhomogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="cs" /><published>2025-04-16T00:00:00+09:00</published> <updated>2025-07-11T20:37:36+09:00</updated> <id>https://www.yunseo.kim/pt-BR/posts/nonhomogeneous-linear-odes-of-second-order/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="pt-BR">Entenda a solução geral de EDOs lineares não-homogêneas de segunda ordem, a relação entre soluções homogêneas e não-homogêneas, e a existência e unicidade de soluções.</summary> <content type="html" xml:lang="pt-BR"> <![CDATA[<p>Entenda a solução geral de EDOs lineares não-homogêneas de segunda ordem, a relação entre soluções homogêneas e não-homogêneas, e a existência e unicidade de soluções.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><ul><li>A <strong>solução geral</strong> de uma EDO linear não-homogênea de segunda ordem $y^{\prime\prime} + p(x)y^{\prime} + q(x)y = r(x)$:<ul><li>$y(x) = y_h(x) + y_p(x)$<li>$y_h$: solução geral da EDO homogênea $y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0$, onde $y_h = c_1y_1 + c_2y_2$<li>$y_p$: solução particular da EDO não-homogênea</ul><li>O termo de resposta $y_p$ é determinado apenas pela entrada $r(x)$, e não muda mesmo que as condições iniciais sejam alteradas para a mesma EDO não-homogênea. A diferença entre duas soluções particulares de uma EDO não-homogênea é uma solução da EDO homogênea correspondente.<li><strong>Existência da solução geral</strong>: Se os coeficientes $p(x)$, $q(x)$ e a função de entrada $r(x)$ são contínuos, a solução geral sempre existe<li><strong>Inexistência de soluções singulares</strong>: A solução geral inclui todas as soluções possíveis (ou seja, não existem soluções singulares)</ul></blockquote><h2 id="pré-requisitos">Pré-requisitos</h2><ul><li><a href="/pt-BR/posts/homogeneous-linear-odes-of-second-order/">EDOs Lineares Homogêneas de Segunda Ordem</a><li><a href="/pt-BR/posts/wronskian-existence-and-uniqueness-of-solutions/">Wronskiano, Existência e Unicidade de Soluções</a></ul><h2 id="solução-geral-e-solução-particular-de-edos-lineares-não-homogêneas-de-segunda-ordem">Solução Geral e Solução Particular de EDOs Lineares Não-Homogêneas de Segunda Ordem</h2><p>Consideremos a EDO linear não-homogênea de segunda ordem</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = r(x) \label{eqn:nonhomogeneous_linear_ode}\tag{1}\]<p>onde $r(x) \not\equiv 0$. A <strong>solução geral</strong> da equação ($\ref{eqn:nonhomogeneous_linear_ode}$) em um intervalo aberto $I$ é a soma da solução geral $y_h = c_1y_1 + c_2y_2$ da EDO homogênea correspondente</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0 \label{eqn:homogeneous_linear_ode}\tag{2}\]<p>e uma solução particular $y_p$ da equação ($\ref{eqn:nonhomogeneous_linear_ode}$):</p>\[y(x) = y_h(x) + y_p(x) \label{eqn:general_sol}\tag{3}\]<p>Uma <strong>solução particular</strong> da equação ($\ref{eqn:nonhomogeneous_linear_ode}$) no intervalo $I$ é obtida atribuindo valores específicos às constantes arbitrárias $c_1$ e $c_2$ em $y_h$.</p><p>Em outras palavras, quando adicionamos uma entrada $r(x)$ que depende apenas da variável independente $x$ à EDO homogênea ($\ref{eqn:homogeneous_linear_ode}$), um termo de resposta correspondente $y_p$ é adicionado à solução, e este termo adicional $y_p$ é determinado apenas pela entrada $r(x)$, independentemente das condições iniciais. Como veremos adiante, se calcularmos a diferença entre duas soluções particulares $y_1$ e $y_2$ da equação ($\ref{eqn:nonhomogeneous_linear_ode}$) (ou seja, a diferença entre soluções para diferentes condições iniciais), o termo $y_p$ independente das condições iniciais é eliminado, restando apenas a diferença entre ${y_h}_1$ e ${y_h}_2$, que pelo <a href="/pt-BR/posts/homogeneous-linear-odes-of-second-order/#princípio-da-superposição">princípio da superposição</a> é uma solução da equação ($\ref{eqn:homogeneous_linear_ode}$).</p><h2 id="relação-entre-soluções-de-edos-não-homogêneas-e-suas-edos-homogêneas-correspondentes">Relação entre Soluções de EDOs Não-Homogêneas e suas EDOs Homogêneas Correspondentes</h2><blockquote class="prompt-info"><p><strong>Teorema 1: Relação entre soluções de EDOs não-homogêneas e suas EDOs homogêneas correspondentes</strong><br /> <strong>(a)</strong> Em um intervalo aberto $I$, a soma de uma solução $y$ da EDO não-homogênea ($\ref{eqn:nonhomogeneous_linear_ode}$) e uma solução $\tilde{y}$ da EDO homogênea ($\ref{eqn:homogeneous_linear_ode}$) é uma solução da equação ($\ref{eqn:nonhomogeneous_linear_ode}$) no intervalo $I$. Em particular, a expressão ($\ref{eqn:general_sol}$) é uma solução da equação ($\ref{eqn:nonhomogeneous_linear_ode}$) no intervalo $I$.<br /> <strong>(b)</strong> A diferença entre duas soluções da EDO não-homogênea ($\ref{eqn:nonhomogeneous_linear_ode}$) no intervalo $I$ é uma solução da EDO homogênea ($\ref{eqn:homogeneous_linear_ode}$) no intervalo $I$.</p></blockquote><h3 id="demonstração">Demonstração</h3><h4 id="a">(a)</h4><p>Denotemos o lado esquerdo das equações ($\ref{eqn:nonhomogeneous_linear_ode}$) e ($\ref{eqn:homogeneous_linear_ode}$) como $L[y]$. Então, para qualquer solução $y$ da equação ($\ref{eqn:nonhomogeneous_linear_ode}$) e qualquer solução $\tilde{y}$ da equação ($\ref{eqn:homogeneous_linear_ode}$) no intervalo $I$, temos:</p>\[L[y + \tilde{y}] = L[y] + L[\tilde{y}] = r + 0 = r.\]<h4 id="b">(b)</h4><p>Para quaisquer duas soluções $y$ e $y^*$ da equação ($\ref{eqn:nonhomogeneous_linear_ode}$) no intervalo $I$, temos:</p>\[L[y - y^*] = L[y] - L[y^*] = r - r = 0.\ \blacksquare\]<h2 id="a-solução-geral-inclui-todas-as-soluções">A Solução Geral Inclui Todas as Soluções</h2><p>Sabemos que para EDOs homogêneas ($\ref{eqn:homogeneous_linear_ode}$), a <a href="/pt-BR/posts/wronskian-existence-and-uniqueness-of-solutions/#a-solução-geral-inclui-todas-as-soluções">solução geral inclui todas as soluções possíveis</a>. Vamos mostrar que o mesmo é válido para EDOs não-homogêneas ($\ref{eqn:nonhomogeneous_linear_ode}$).</p><blockquote class="prompt-info"><p><strong>Teorema 2: A solução geral de uma EDO não-homogênea inclui todas as soluções</strong><br /> Se os coeficientes $p(x)$, $q(x)$ e a função de entrada $r(x)$ da equação ($\ref{eqn:nonhomogeneous_linear_ode}$) são contínuos em um intervalo aberto $I$, então todas as soluções da equação ($\ref{eqn:nonhomogeneous_linear_ode}$) no intervalo $I$ podem ser obtidas da solução geral ($\ref{eqn:general_sol}$) atribuindo valores apropriados às constantes arbitrárias $c_1$ e $c_2$ em $y_h$.</p></blockquote><h3 id="demonstração-1">Demonstração</h3><p>Seja $y^*$ uma solução qualquer da equação ($\ref{eqn:nonhomogeneous_linear_ode}$) no intervalo $I$, e seja $x_0$ um ponto qualquer nesse intervalo. Pelo <a href="/pt-BR/posts/wronskian-existence-and-uniqueness-of-solutions/#existência-da-solução-geral">teorema de existência da solução geral</a> para EDOs homogêneas com coeficientes contínuos, sabemos que $y_h = c_1y_1 + c_2y_2$ existe, e pelo <strong>método de variação de parâmetros</strong> (que veremos posteriormente), $y_p$ também existe. Portanto, a solução geral ($\ref{eqn:general_sol}$) da equação ($\ref{eqn:nonhomogeneous_linear_ode}$) existe no intervalo $I$. Pelo teorema <a href="#relação-entre-soluções-de-edos-não-homogêneas-e-suas-edos-homogêneas-correspondentes">1(b)</a> demonstrado anteriormente, $Y = y^* - y_p$ é uma solução da EDO homogênea ($\ref{eqn:homogeneous_linear_ode}$) no intervalo $I$, e no ponto $x_0$:</p>\[\begin{gather*} Y(x_0) = y^*(x_0) - y_p(x_0) \\ Y^{\prime}(x_0) = {y^*}^{\prime}(x_0) - y_p^{\prime}(x_0) \end{gather*}\]<p>Pelo <a href="/pt-BR/posts/wronskian-existence-and-uniqueness-of-solutions/#teorema-de-existência-e-unicidade-para-problemas-de-valor-inicial">teorema de existência e unicidade para problemas de valor inicial</a>, existe uma única solução particular $Y$ da EDO homogênea ($\ref{eqn:homogeneous_linear_ode}$) no intervalo $I$ que satisfaz as condições iniciais acima, e esta solução pode ser obtida atribuindo valores apropriados às constantes $c_1$ e $c_2$ em $y_h$. Como $y^* = Y + y_p$, demonstramos que qualquer solução particular $y^*$ da EDO não-homogênea ($\ref{eqn:nonhomogeneous_linear_ode}$) pode ser obtida da solução geral ($\ref{eqn:general_sol}$). $\blacksquare$</p>]]> </content> </entry> <entry><title xml:lang="pt-BR">Wronskiano, Existência e Unicidade de Soluções</title><link href="https://www.yunseo.kim/pt-BR/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/wronskian-existence-and-uniqueness-of-solutions/" rel="alternate" type="text/html" hreflang="cs" /><published>2025-04-06T00:00:00+09:00</published> <updated>2025-07-11T21:22:11+09:00</updated> <id>https://www.yunseo.kim/pt-BR/posts/wronskian-existence-and-uniqueness-of-solutions/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="pt-BR">Para EDOs lineares homogêneas de segunda ordem com coeficientes variáveis contínuos, exploramos o teorema de existência e unicidade para problemas de valor inicial, o método do Wronskiano para determinar dependência/independência linear de soluções, e demonstramos que tais equações sempre possuem solução geral que inclui todas as soluções possíveis.</summary> <content type="html" xml:lang="pt-BR"> <![CDATA[<p>Para EDOs lineares homogêneas de segunda ordem com coeficientes variáveis contínuos, exploramos o teorema de existência e unicidade para problemas de valor inicial, o método do Wronskiano para determinar dependência/independência linear de soluções, e demonstramos que tais equações sempre possuem solução geral que inclui todas as soluções possíveis.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><p>Para um intervalo $I$ onde os coeficientes variáveis $p$ e $q$ são contínuos, considere a equação diferencial ordinária linear homogênea de segunda ordem</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0\]<p>e as condições iniciais</p>\[y(x_0)=K_0, \qquad y^{\prime}(x_0)=K_1\]<p>Os seguintes quatro teoremas são válidos:</p><ol><li><strong>Teorema de existência e unicidade para problemas de valor inicial</strong>: O problema de valor inicial formado pela equação dada e pelas condições iniciais possui uma única solução $y(x)$ no intervalo $I$.<li><strong>Determinação de dependência/independência linear usando o Wronskiano</strong>: Para duas soluções $y_1$ e $y_2$ da equação, se existir um ponto $x_0$ no intervalo $I$ onde o <strong>Wronskiano</strong> $W(y_1, y_2) = y_1y_2^{\prime} - y_2y_1^{\prime}$ é igual a zero, então as soluções são linearmente dependentes. Além disso, se existir um ponto $x_1$ no intervalo $I$ onde $W\neq 0$, então as soluções são linearmente independentes.<li><strong>Existência da solução geral</strong>: A equação dada possui uma solução geral no intervalo $I$.<li><strong>Inexistência de soluções singulares</strong>: Esta solução geral inclui todas as soluções da equação (ou seja, não existem soluções singulares).</ol></blockquote><h2 id="pré-requisitos">Pré-requisitos</h2><ul><li><a href="/pt-BR/posts/Solution-of-First-Order-Linear-ODE/">Solução de EDOs Lineares de Primeira Ordem</a><li><a href="/pt-BR/posts/homogeneous-linear-odes-of-second-order/">EDOs Lineares Homogêneas de Segunda Ordem</a><li><a href="/pt-BR/posts/homogeneous-linear-odes-with-constant-coefficients/">EDOs Lineares Homogêneas de Segunda Ordem com Coeficientes Constantes</a><li><a href="/pt-BR/posts/euler-cauchy-equation/">Equação de Euler-Cauchy</a><li>Matriz inversa e matriz singular, determinante</ul><h2 id="edos-lineares-homogêneas-com-coeficientes-variáveis-contínuos">EDOs Lineares Homogêneas com Coeficientes Variáveis Contínuos</h2><p>Anteriormente, estudamos a <a href="/pt-BR/posts/homogeneous-linear-odes-with-constant-coefficients/">solução geral de EDOs lineares homogêneas de segunda ordem com coeficientes constantes</a> e a <a href="/pt-BR/posts/euler-cauchy-equation/">equação de Euler-Cauchy</a>. Neste artigo, expandiremos nossa discussão para um caso mais geral, examinando a existência e a forma da solução geral de uma equação diferencial ordinária linear homogênea de segunda ordem com <strong>coeficientes variáveis</strong> $p$ e $q$ contínuos:</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0 \label{eqn:homogeneous_linear_ode_with_var_coefficients}\tag{1}\]<p>Além disso, também examinaremos a unicidade do <a href="/pt-BR/posts/homogeneous-linear-odes-of-second-order/#problema-de-valor-inicial-e-condições-iniciais">problema de valor inicial</a> formado pela equação diferencial ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) e pelas seguintes duas condições iniciais:</p>\[y(x_0)=K_0, \qquad y^{\prime}(x_0)=K_1 \label{eqn:initial_conditions}\tag{2}\]<p>Antecipando a conclusão, o ponto central do que discutiremos é que equações diferenciais ordinárias <u>lineares</u> com coeficientes contínuos não possuem <em>soluções singulares</em> (soluções que não podem ser obtidas da solução geral).</p><h2 id="teorema-de-existência-e-unicidade-para-problemas-de-valor-inicial">Teorema de Existência e Unicidade para Problemas de Valor Inicial</h2><blockquote class="prompt-info"><p><strong>Teorema de Existência e Unicidade para Problemas de Valor Inicial</strong><br /> Se $p(x)$ e $q(x)$ são funções contínuas em algum intervalo aberto $I$, e $x_0$ está nesse intervalo $I$, então o problema de valor inicial formado pelas equações ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) e ($\ref{eqn:initial_conditions}$) possui uma única solução $y(x)$ no intervalo $I$.</p></blockquote><p>Aqui abordaremos apenas a prova da unicidade, não da existência. Geralmente, provar a unicidade é mais simples do que provar a existência.<br /> Se você não estiver interessado na demonstração, pode pular esta seção e ir diretamente para <a href="#dependência-linear-e-independência-linear-de-soluções">Dependência Linear e Independência Linear de Soluções</a>.</p><h3 id="prova-da-unicidade">Prova da Unicidade</h3><p>Suponha que o problema de valor inicial formado pela equação diferencial ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) e pelas condições iniciais ($\ref{eqn:initial_conditions}$) tenha duas soluções $y_1(x)$ e $y_2(x)$ no intervalo $I$. Se pudermos mostrar que a diferença entre essas soluções</p>\[y(x) = y_1(x) - y_2(x)\]<p>é identicamente zero no intervalo $I$, isso significará que $y_1 \equiv y_2$ no intervalo $I$, provando assim a unicidade da solução.</p><p>Como a equação ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) é uma EDO linear homogênea, a combinação linear de $y_1$ e $y_2$, que é $y$, também é uma solução da equação no intervalo $I$. Como $y_1$ e $y_2$ satisfazem as mesmas condições iniciais ($\ref{eqn:initial_conditions}$), $y$ satisfaz as condições</p>\[\begin{align*} &amp; y(x_0) = y_1(x_0) - y_2(x_0) = 0, \\ &amp; y^{\prime}(x_0) = y_1^{\prime}(x_0) - y_2^{\prime}(x_0) = 0 \end{align*} \label{eqn:initial_conditions_*}\tag{3}\]<p>Agora, consideremos a função</p>\[z(x) = y(x)^2 + y^{\prime}(x)^2\]<p>e sua derivada</p>\[z^{\prime} = 2yy^{\prime} + 2y^{\prime}y^{\prime\prime}\]<p>Da equação diferencial, temos</p>\[y^{\prime\prime} = -py^{\prime} - qy\]<p>Substituindo na expressão de $z^{\prime}$, obtemos</p>\[z^{\prime} = 2yy^{\prime} - 2p{y^{\prime}}^2 - 2qyy^{\prime} \label{eqn:z_prime}\tag{4}\]<p>Como $y$ e $y^{\prime}$ são números reais, temos</p>\[(y\pm y^{\prime})^2 = y^2 \pm 2yy^{\prime} + {y^{\prime}}^2 \geq 0\]<p>Pela definição de $z$, obtemos duas desigualdades:</p>\[(a)\ 2yy^{\prime} \leq y^2 + {y^{\prime}}^2 = z, \qquad (b)\ 2yy^{\prime} \geq -(y^2 + {y^{\prime}}^2) = -z \label{eqn:inequalities}\tag{5}\]<p>Dessas duas desigualdades, podemos concluir que $|2yy^{\prime}|\leq z$, e portanto, para o último termo da equação ($\ref{eqn:z_prime}$), temos a seguinte desigualdade:</p>\[\pm2qyy^{\prime} \leq |\pm 2qyy^{\prime}| = |q||2yy^{\prime}| \leq |q|z.\]<p>Usando este resultado junto com o fato de que $-p \leq |p|$, e aplicando a desigualdade ($\ref{eqn:inequalities}$a) ao termo $2yy^{\prime}$ na equação ($\ref{eqn:z_prime}$), obtemos:</p>\[z^{\prime} \leq z + 2|p|{y^{\prime}}^2 + |q|z\]<p>Como ${y^{\prime}}^2 \leq y^2 + {y^{\prime}}^2 = z$, temos:</p>\[z^{\prime} \leq (1 + 2|p| + |q|)z\]<p>Definindo a função entre parênteses como $h = 1 + 2|p| + |q|$, temos:</p>\[z^{\prime} \leq hz \quad \forall x \in I \label{eqn:inequality_6a}\tag{6a}\]<p>De maneira similar, usando as equações ($\ref{eqn:z_prime}$) e ($\ref{eqn:inequalities}$), obtemos:</p>\[\begin{align*} -z^{\prime} &amp;= -2yy^{\prime} + 2p{y^{\prime}}^2 + 2qyy^{\prime} \\ &amp;\leq z + 2|p|z + |q|z = hz \end{align*} \label{eqn:inequality_6b}\tag{6b}\]<p>Estas duas desigualdades ($\ref{eqn:inequality_6a}$) e ($\ref{eqn:inequality_6b}$) são equivalentes a:</p>\[z^{\prime} - hz \leq 0, \qquad z^{\prime} + hz \geq 0 \label{eqn:inequalities_7}\tag{7}\]<p>Os <a href="/pt-BR/posts/Solution-of-First-Order-Linear-ODE/#equação-diferencial-ordinária-linear-não-homogênea">fatores integrantes</a> para os lados esquerdos dessas equações são:</p>\[F_1 = e^{-\int h(x)\ dx} \qquad \text{e} \qquad F_2 = e^{\int h(x)\ dx}\]<p>Como $h$ é contínua, a integral indefinida $\int h(x)\ dx$ existe, e como $F_1$ e $F_2$ são positivos, das equações ($\ref{eqn:inequalities_7}$) obtemos:</p>\[F_1(z^{\prime} - hz) = (F_1 z)^{\prime} \leq 0, \qquad F_2(z^{\prime} + hz) = (F_2 z)^{\prime} \geq 0\]<p>Isso significa que $F_1 z$ não aumenta e $F_2 z$ não diminui no intervalo $I$. Como $z(x_0) = 0$ pela equação ($\ref{eqn:initial_conditions_*}$), temos:</p>\[\begin{cases} \left(F_1 z \geq (F_1 z)_{x_0} = 0\right)\ \&amp; \ \left(F_2 z \leq (F_2 z)_{x_0} = 0\right) &amp; (x \leq x_0) \\ \left(F_1 z \leq (F_1 z)_{x_0} = 0\right)\ \&amp; \ \left(F_2 z \geq (F_2 z)_{x_0} = 0\right) &amp; (x \geq x_0) \end{cases}\]<p>Finalmente, dividindo ambos os lados das desigualdades pelos valores positivos $F_1$ e $F_2$, podemos provar a unicidade da solução:</p>\[(z \leq 0) \ \&amp; \ (z \geq 0) \quad \forall x \in I\] \[z = y^2 + {y^{\prime}}^2 = 0 \quad \forall x \in I\] \[\therefore y \equiv y_1 - y_2 \equiv 0 \quad \forall x \in I. \ \blacksquare\]<h2 id="dependência-linear-e-independência-linear-de-soluções">Dependência Linear e Independência Linear de Soluções</h2><p>Relembrando o que vimos em <a href="/pt-BR/posts/homogeneous-linear-odes-of-second-order/#base-e-solução-geral">EDOs Lineares Homogêneas de Segunda Ordem</a>, a solução geral em um intervalo aberto $I$ é construída a partir de uma <strong>base</strong> $y_1$, $y_2$, ou seja, um par de soluções linearmente independentes. Duas funções $y_1$ e $y_2$ são <strong>linearmente independentes</strong> no intervalo $I$ se, para todos os pontos nesse intervalo:</p>\[k_1y_1(x) + k_2y_2(x) = 0 \Leftrightarrow k_1=0\text{ e }k_2=0 \label{eqn:linearly_independent}\tag{8}\]<p>Se a condição acima não for satisfeita, ou seja, se existirem valores $k_1$, $k_2$ não ambos nulos tais que $k_1y_1(x) + k_2y_2(x) = 0$, então $y_1$ e $y_2$ são <strong>linearmente dependentes</strong> no intervalo $I$. Neste caso, para todos os pontos no intervalo $I$:</p>\[\text{(a) } y_1 = ky_2 \quad \text{ou} \quad \text{(b) } y_2 = ly_1 \label{eqn:linearly_dependent}\tag{9}\]<p>ou seja, $y_1$ e $y_2$ são proporcionais.</p><p>Agora, vejamos o método para determinar a dependência/independência linear de soluções:</p><blockquote class="prompt-info"><p><strong>Determinação de Dependência/Independência Linear usando o Wronskiano</strong><br /> <strong>i.</strong> Se a equação diferencial ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) tem coeficientes $p(x)$ e $q(x)$ contínuos em um intervalo aberto $I$, então uma condição necessária e suficiente para que duas soluções $y_1$ e $y_2$ da equação ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) no intervalo $I$ sejam linearmente dependentes é que o <em>determinante wronskiano</em>, ou simplesmente <strong>Wronskiano</strong></p>\[W(y_1, y_2) = \begin{vmatrix} y_1 &amp; y_2 \\ y_1^{\prime} &amp; y_2^{\prime} \\ \end{vmatrix} = y_1y_2^{\prime} - y_2y_1^{\prime} \label{eqn:wronskian}\tag{10}\]<p>seja igual a zero em algum ponto $x_0$ do intervalo $I$.</p>\[\exists x_0 \in I: W(x_0)=0 \iff y_1 \text{ e } y_2 \text{ são linearmente dependentes}\]<p><strong>ii.</strong> Se o Wronskiano $W=0$ em um ponto $x=x_0$ do intervalo $I$, então $W=0$ para todos os pontos $x$ do intervalo $I$.</p>\[\exists x_0 \in I: W(x_0)=0 \implies \forall x \in I: W(x)=0\]<p>Em outras palavras, se existir um ponto $x_1$ no intervalo $I$ onde $W\neq 0$, então $y_1$ e $y_2$ são linearmente independentes no intervalo $I$.</p>\[\begin{align*} \exists x_1 \in I: W(x_1)\neq 0 &amp;\implies \forall x \in I: W(x)\neq 0 \\ &amp;\implies y_1 \text{ e } y_2 \text{ são linearmente independentes} \end{align*}\]</blockquote><blockquote class="prompt-tip"><p>O Wronskiano foi introduzido pelo matemático polonês Józef Maria Hoene-Wroński e recebeu seu nome atual do matemático escocês Sir Thomas Muir em 11882 EH, após a morte de Wroński.</p></blockquote><h3 id="demonstração">Demonstração</h3><h4 id="i-a">i. (a)</h4><p>Suponha que $y_1$ e $y_2$ sejam linearmente dependentes no intervalo $I$. Então, no intervalo $I$, vale a equação ($\ref{eqn:linearly_dependent}$a) ou ($\ref{eqn:linearly_dependent}$b). Se a equação ($\ref{eqn:linearly_dependent}$a) for válida, então:</p>\[W(y_1, y_2) = y_1y_2^{\prime} - y_2y_1^{\prime} = ky_2ky_2^{\prime} - y_2ky_2^{\prime} = 0\]<p>Da mesma forma, se a equação ($\ref{eqn:linearly_dependent}$b) for válida:</p>\[W(y_1, y_2) = y_1y_2^{\prime} - y_2y_1^{\prime} = y_1ly_1^{\prime} - ly_1y_1^{\prime} = 0\]<p>Portanto, podemos verificar que <u>para todos os pontos $x$ no intervalo $I$</u>, o Wronskiano $W(y_1, y_2)=0$.</p><h4 id="i-b">i. (b)</h4><p>Reciprocamente, vamos mostrar que se $W(y_1, y_2)=0$ em algum ponto $x = x_0$, então $y_1$ e $y_2$ são linearmente dependentes no intervalo $I$. Considere o sistema linear de equações com incógnitas $k_1$ e $k_2$:</p>\[\begin{gather*} k_1y_1(x_0) + k_2y_2(x_0) = 0 \\ k_1y_1^{\prime}(x_0) + k_2y_2^{\prime}(x_0) = 0 \end{gather*} \label{eqn:linear_system}\tag{11}\]<p>Isso pode ser expresso como uma equação vetorial:</p>\[\left[\begin{matrix} y_1(x_0) &amp; y_2(x_0) \\ y_1^{\prime}(x_0) &amp; y_2^{\prime}(x_0) \end{matrix}\right] \left[\begin{matrix} k_1 \\ k_2 \end{matrix}\right] = 0 \label{eqn:vector_equation}\tag{12}\]<p>A matriz de coeficientes desta equação vetorial é:</p>\[A = \left[\begin{matrix} y_1(x_0) &amp; y_2(x_0) \\ y_1^{\prime}(x_0) &amp; y_2^{\prime}(x_0) \end{matrix}\right]\]<p>e seu determinante é $W(y_1(x_0), y_2(x_0))$. Como $\det(A) = W=0$, $A$ é uma <strong>matriz singular</strong> que não possui <strong>matriz inversa</strong>, e portanto o sistema de equações ($\ref{eqn:linear_system}$) tem uma solução não-trivial $(c_1, c_2)$ onde pelo menos um dos valores $c_1$ ou $c_2$ é não-nulo. Agora, definamos a função:</p>\[y(x) = c_1y_1(x) + c_2y_2(x)\]<p>Como a equação ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) é linear homogênea, pelo <a href="/pt-BR/posts/homogeneous-linear-odes-of-second-order/#princípio-da-superposição">princípio da superposição</a>, esta função é uma solução da equação ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) no intervalo $I$. Da equação ($\ref{eqn:linear_system}$), esta solução satisfaz as condições iniciais $y(x_0)=0$ e $y^{\prime}(x_0)=0$.</p><p>Por outro lado, existe a solução trivial $y^* \equiv 0$ que satisfaz as mesmas condições iniciais $y^*(x_0)=0$ e ${y^*}^{\prime}(x_0)=0$. Como os coeficientes $p$ e $q$ da equação ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) são contínuos, pelo <a href="#teorema-de-existência-e-unicidade-para-problemas-de-valor-inicial">Teorema de Existência e Unicidade para Problemas de Valor Inicial</a>, a unicidade da solução é garantida, e portanto $y \equiv y^*$. Ou seja, no intervalo $I$:</p>\[c_1y_1 + c_2y_2 \equiv 0\]<p>Como pelo menos um dos valores $c_1$ ou $c_2$ é não-nulo, a condição ($\ref{eqn:linearly_independent}$) não é satisfeita, o que significa que $y_1$ e $y_2$ são linearmente dependentes no intervalo $I$.</p><h4 id="ii">ii.</h4><p>Se o Wronskiano for zero em algum ponto $x_0$ do intervalo $I$, então pelo item <a href="#i-b">i.(b)</a>, $y_1$ e $y_2$ são linearmente dependentes no intervalo $I$, e pelo item <a href="#i-a">i.(a)</a>, $W\equiv 0$. Portanto, se existir um ponto $x_1$ no intervalo $I$ onde $W(x_1)\neq 0$, então $y_1$ e $y_2$ são linearmente independentes. $\blacksquare$</p><h2 id="a-solução-geral-inclui-todas-as-soluções">A Solução Geral Inclui Todas as Soluções</h2><h3 id="existência-da-solução-geral">Existência da Solução Geral</h3><blockquote class="prompt-info"><p>Se $p(x)$ e $q(x)$ são contínuas em um intervalo aberto $I$, então a equação ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) possui uma solução geral no intervalo $I$.</p></blockquote><h4 id="demonstração-1">Demonstração</h4><p>Pelo <a href="#teorema-de-existência-e-unicidade-para-problemas-de-valor-inicial">Teorema de Existência e Unicidade para Problemas de Valor Inicial</a>, a equação diferencial ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) possui uma solução $y_1(x)$ no intervalo $I$ que satisfaz as condições iniciais:</p>\[y_1(x_0) = 1, \qquad y_1^{\prime}(x_0) = 0\]<p>e uma solução $y_2(x)$ no intervalo $I$ que satisfaz as condições iniciais:</p>\[y_2(x_0) = 0, \qquad y_2^{\prime}(x_0) = 1\]<p>O Wronskiano dessas duas soluções no ponto $x=x_0$ é não-nulo:</p>\[W(y_1(x_0), y_2(x_0)) = y_1(x_0)y_2^{\prime}(x_0) - y_2(x_0)y_1^{\prime}(x_0) = 1\cdot 1 - 0\cdot 0 = 1\]<p>Portanto, pela <a href="#dependência-linear-e-independência-linear-de-soluções">Determinação de Dependência/Independência Linear usando o Wronskiano</a>, $y_1$ e $y_2$ são linearmente independentes no intervalo $I$. Assim, essas duas soluções formam uma base para as soluções da equação ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) no intervalo $I$, e a solução geral $y = c_1y_1 + c_2y_2$, com constantes arbitrárias $c_1$ e $c_2$, existe necessariamente no intervalo $I$. $\blacksquare$</p><h3 id="inexistência-de-soluções-singulares">Inexistência de Soluções Singulares</h3><blockquote class="prompt-info"><p>Se a equação diferencial ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) tem coeficientes $p(x)$ e $q(x)$ contínuos em algum intervalo aberto $I$, então qualquer solução $y=Y(x)$ da equação ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) no intervalo $I$ pode ser escrita na forma:</p>\[Y(x) = C_1y_1(x) + C_2y_2(x) \label{eqn:particular_solution}\tag{13}\]<p>onde $y_1$ e $y_2$ formam uma base para as soluções da equação ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) no intervalo $I$, e $C_1$ e $C_2$ são constantes apropriadas.<br /> Em outras palavras, a equação ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) não possui <strong>soluções singulares</strong> (soluções que não podem ser obtidas da solução geral).</p></blockquote><h4 id="demonstração-2">Demonstração</h4><p>Seja $y=Y(x)$ uma solução qualquer da equação ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) no intervalo $I$. Pelo <a href="#existência-da-solução-geral">teorema de existência da solução geral</a>, a equação diferencial ($\ref{eqn:homogeneous_linear_ode_with_var_coefficients}$) possui uma solução geral no intervalo $I$:</p>\[y(x) = c_1y_1(x) + c_2y_2(x) \label{eqn:general_solution}\tag{14}\]<p>Precisamos mostrar que, para qualquer $Y(x)$, existem constantes $c_1$ e $c_2$ tais que $y(x)=Y(x)$ no intervalo $I$. Primeiro, vamos mostrar que podemos encontrar valores de $c_1$ e $c_2$ tais que $y(x_0)=Y(x_0)$ e $y^{\prime}(x_0)=Y^{\prime}(x_0)$ para qualquer ponto $x_0$ escolhido no intervalo $I$. Da equação ($\ref{eqn:general_solution}$), temos:</p>\[\begin{gather*} \left[\begin{matrix} y_1(x_0) &amp; y_2(x_0) \\ y_1^{\prime}(x_0) &amp; y_2^{\prime}(x_0) \end{matrix}\right] \left[\begin{matrix} c_1 \\ c_2 \end{matrix}\right] = \left[\begin{matrix} Y(x_0) \\ Y^{\prime}(x_0) \end{matrix}\right] \end{gather*} \label{eqn:vector_equation_2}\tag{15}\]<p>Como $y_1$ e $y_2$ formam uma base, o determinante da matriz de coeficientes, $W(y_1(x_0), y_2(x_0))$, é não-nulo, e portanto a equação ($\ref{eqn:vector_equation_2}$) pode ser resolvida para $c_1$ e $c_2$. Sejam $(c_1, c_2) = (C_1, C_2)$ a solução. Substituindo na equação ($\ref{eqn:general_solution}$), obtemos a solução particular:</p>\[y^*(x) = C_1y_1(x) + C_2y_2(x).\]<p>Como $C_1$ e $C_2$ são a solução da equação ($\ref{eqn:vector_equation_2}$), temos:</p>\[y^*(x_0) = Y(x_0), \qquad {y^*}^{\prime}(x_0) = Y^{\prime}(x_0)\]<p>Pela unicidade garantida pelo <a href="#teorema-de-existência-e-unicidade-para-problemas-de-valor-inicial">Teorema de Existência e Unicidade para Problemas de Valor Inicial</a>, temos $y^* \equiv Y$ para todos os pontos $x$ no intervalo $I$. $\blacksquare$</p>]]> </content> </entry> <entry><title xml:lang="pt-BR">Equação de Euler-Cauchy</title><link href="https://www.yunseo.kim/pt-BR/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/euler-cauchy-equation/" rel="alternate" type="text/html" hreflang="cs" /><published>2025-03-28T00:00:00+09:00</published> <updated>2025-07-11T20:37:36+09:00</updated> <id>https://www.yunseo.kim/pt-BR/posts/euler-cauchy-equation/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="pt-BR">Examinamos como a forma da solução geral da equação de Euler-Cauchy varia de acordo com o sinal do discriminante da equação auxiliar.</summary> <content type="html" xml:lang="pt-BR"> <![CDATA[<p>Examinamos como a forma da solução geral da equação de Euler-Cauchy varia de acordo com o sinal do discriminante da equação auxiliar.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><ul><li>Equação de Euler-Cauchy: $x^2y^{\prime\prime} + axy^{\prime} + by = 0$<li><strong>Equação auxiliar</strong>: $m^2 + (a-1)m + b = 0$<li>A forma da solução geral pode ser dividida em três casos de acordo com o sinal do discriminante $(1-a)^2 - 4b$ da equação auxiliar, como mostrado na tabela</ul><table><thead><tr><th style="text-align: center">Caso<th style="text-align: center">Raízes da equação auxiliar<th style="text-align: center">Base de soluções da equação de Euler-Cauchy<th style="text-align: center">Solução geral da equação de Euler-Cauchy<tbody><tr><td style="text-align: center">I<td style="text-align: center">Raízes reais distintas<br />$m_1$, $m_2$<td style="text-align: center">$x^{m_1}$, $x^{m_2}$<td style="text-align: center">$y = c_1 x^{m_1} + c_2 x^{m_2}$<tr><td style="text-align: center">II<td style="text-align: center">Raiz real dupla<br /> $m = \cfrac{1-a}{2}$<td style="text-align: center">$x^{(1-a)/2}$, $x^{(1-a)/2}\ln{x}$<td style="text-align: center">$y = (c_1 + c_2 \ln x)x^m$<tr><td style="text-align: center">III<td style="text-align: center">Raízes complexas conjugadas<br /> $m_1 = \cfrac{1}{2}(1-a) + i\omega$, <br /> $m_2 = \cfrac{1}{2}(1-a) - i\omega$<td style="text-align: center">$x^{(1-a)/2}\cos{(\omega \ln{x})}$, <br /> $x^{(1-a)/2}\sin{(\omega \ln{x})}$<td style="text-align: center">$y = x^{(1-a)/2}[A\cos{(\omega \ln{x})} + B\sin{(\omega \ln{x})}]$</table></blockquote><h2 id="pré-requisitos">Pré-requisitos</h2><ul><li><a href="/pt-BR/posts/homogeneous-linear-odes-of-second-order/">EDOs Lineares Homogêneas de Segunda Ordem</a><li><a href="/pt-BR/posts/homogeneous-linear-odes-with-constant-coefficients/">EDOs Lineares Homogêneas de Segunda Ordem com Coeficientes Constantes</a><li>Fórmula de Euler</ul><h2 id="equação-auxiliar">Equação auxiliar</h2><p>A <strong>equação de Euler-Cauchy</strong> é uma equação diferencial ordinária da forma</p>\[x^2y^{\prime\prime} + axy^{\prime} + by = 0 \label{eqn:euler_cauchy_eqn}\tag{1}\]<p>onde $a$ e $b$ são constantes e $y(x)$ é a função desconhecida. Substituindo na equação ($\ref{eqn:euler_cauchy_eqn}$)</p>\[y=x^m, \qquad y^{\prime}=mx^{m-1}, \qquad y^{\prime\prime}=m(m-1)x^{m-2}\]<p>obtemos</p>\[x^2m(m-1)x^{m-2} + axmx^{m-1} + bx^m = 0,\]<p>ou seja</p>\[[m(m-1) + am + b]x^m = 0\]<p>Isso nos leva à equação auxiliar</p>\[m^2 + (a-1)m + b = 0 \label{eqn:auxiliary_eqn}\tag{2}\]<p>e a condição necessária e suficiente para que $y=x^m$ seja uma solução da equação de Euler-Cauchy ($\ref{eqn:euler_cauchy_eqn}$) é que $m$ seja uma raiz da equação auxiliar ($\ref{eqn:auxiliary_eqn}$).</p><p>Resolvendo a equação quadrática ($\ref{eqn:auxiliary_eqn}$), obtemos</p>\[\begin{align*} m_1 &amp;= \frac{1}{2}\left[(1-a) + \sqrt{(1-a)^2 - 4b} \right], \\ m_2 &amp;= \frac{1}{2}\left[(1-a) - \sqrt{(1-a)^2 - 4b} \right] \end{align*}\label{eqn:m1_and_m2}\tag{3}\]<p>e, portanto, as duas funções</p>\[y_1 = x^{m_1}, \quad y_2 = x^{m_2}\]<p>são soluções da equação ($\ref{eqn:euler_cauchy_eqn}$).</p><p>Assim como nas <a href="/pt-BR/posts/homogeneous-linear-odes-with-constant-coefficients/">EDOs lineares homogêneas de segunda ordem com coeficientes constantes</a>, podemos dividir os casos de acordo com o sinal do discriminante $(1-a)^2 - 4b$ da equação auxiliar ($\ref{eqn:auxiliary_eqn}$):</p><ul><li>$(1-a)^2 - 4b &gt; 0$: duas raízes reais distintas<li>$(1-a)^2 - 4b = 0$: uma raiz real dupla<li>$(1-a)^2 - 4b &lt; 0$: raízes complexas conjugadas</ul><h2 id="forma-da-solução-geral-de-acordo-com-o-sinal-do-discriminante-da-equação-auxiliar">Forma da solução geral de acordo com o sinal do discriminante da equação auxiliar</h2><h3 id="i-duas-raízes-reais-distintas-m_1-e-m_2">I. Duas raízes reais distintas $m_1$ e $m_2$</h3><p>Neste caso, a base de soluções da equação ($\ref{eqn:euler_cauchy_eqn}$) em qualquer intervalo é</p>\[y_1 = x^{m_1}, \quad y_2 = x^{m_2}\]<p>e a solução geral correspondente é</p>\[y = c_1 x^{m_1} + c_2 x^{m_2} \label{eqn:general_sol_1}\tag{4}\]<h3 id="ii-raiz-real-dupla-m--cfrac1-a2">II. Raiz real dupla $m = \cfrac{1-a}{2}$</h3><p>Quando $(1-a)^2 - 4b = 0$, ou seja, $b=\cfrac{(1-a)^2}{4}$, a equação quadrática ($\ref{eqn:auxiliary_eqn}$) tem apenas uma raiz $m = m_1 = m_2 = \cfrac{1-a}{2}$, e portanto obtemos apenas uma solução da forma $y = x^m$:</p>\[y_1 = x^{(1-a)/2}\]<p>e a equação de Euler-Cauchy ($\ref{eqn:euler_cauchy_eqn}$) torna-se</p>\[y^{\prime\prime} + \frac{a}{x}y^{\prime} + \frac{(1-a)^2}{4x^2}y = 0 \label{eqn:standard_form}\tag{5}\]<p>Agora, vamos encontrar uma segunda solução linearmente independente $y_2$ usando o método de <a href="/pt-BR/posts/homogeneous-linear-odes-of-second-order/#redução-de-ordem">redução de ordem</a>.</p><p>Fazendo $y_2=uy_1$, obtemos</p>\[u = \int U, \qquad U = \frac{1}{y_1^2}\exp\left(-\int \frac{a}{x}\ dx \right)\]<p>Como $\exp \left(-\int \cfrac{a}{x}\ dx \right) = \exp (-a\ln x) = \exp(\ln{x^{-a}}) = x^{-a}$, temos</p>\[U = \frac{x^{-a}}{y_1^2} = \frac{x^{-a}}{x^{(1-a)}} = \frac{1}{x}\]<p>e integrando, obtemos $u = \ln x$.</p><p>Portanto, $y_2 = uy_1 = y_1 \ln x$, e $y_1$ e $y_2$ são linearmente independentes, pois sua razão não é constante. A solução geral correspondente à base $y_1$ e $y_2$ é</p>\[y = (c_1 + c_2 \ln x)x^m \label{eqn:general_sol_2}\tag{6}\]<h3 id="iii-raízes-complexas-conjugadas">III. Raízes complexas conjugadas</h3><p>Neste caso, as raízes da equação auxiliar ($\ref{eqn:auxiliary_eqn}$) são $m = \cfrac{1}{2}(1-a) \pm i\sqrt{b - \frac{1}{4}(1-a)^2}$, e as duas soluções complexas correspondentes da equação ($\ref{eqn:euler_cauchy_eqn}$) podem ser escritas, usando $x=e^{\ln x}$, como:</p>\[\begin{align*} x^{m_1} &amp;= x^{(1-a)/2 + i\sqrt{b - \frac{1}{4}(1-a)^2}} \\ &amp;= x^{(1-a)/2}(e^{\ln x})^{i\sqrt{b - \frac{1}{4}(1-a)^2}} \\ &amp;= x^{(1-a)/2}e^{i(\sqrt{b - \frac{1}{4}(1-a)^2}\ln x)}, \\ x^{m_2} &amp;= x^{(1-a)/2 - i\sqrt{b - \frac{1}{4}(1-a)^2}} \\ &amp;= x^{(1-a)/2}(e^{\ln x})^{-i\sqrt{b - \frac{1}{4}(1-a)^2}} \\ &amp;= x^{(1-a)/2}e^{i(-\sqrt{b - \frac{1}{4}(1-a)^2}\ln x)}. \end{align*} \tag{7}\]<p>Fazendo $t=\sqrt{b - \frac{1}{4}(1-a)^2}\ln x$ e usando a fórmula de Euler $e^{it} = \cos{t} + i\sin{t}$, obtemos</p>\[\begin{align*} x^{m_1} &amp;= x^{(1-a)/2}\left[\cos\left(\sqrt{b - \tfrac{1}{4}(1-a)^2}\ln x \right) + i\sin\left(\sqrt{b - \tfrac{1}{4}(1-a)^2}\ln x \right) \right], \\ x^{m_2} &amp;= x^{(1-a)/2}\left[\cos\left(\sqrt{b - \tfrac{1}{4}(1-a)^2}\ln x \right) - i\sin\left(\sqrt{b - \tfrac{1}{4}(1-a)^2}\ln x \right) \right] \end{align*} \tag{8}\]<p>e a partir disso, obtemos as duas soluções reais</p>\[\begin{align*} \frac{x^{m_1} + x^{m_2}}{2} &amp;= x^{(1-a)/2}\cos\left(\sqrt{b - \tfrac{1}{4}(1-a)^2}\ln x \right), \\ \frac{x^{m_1} - x^{m_2}}{2i} &amp;= x^{(1-a)/2}\sin\left(\sqrt{b - \tfrac{1}{4}(1-a)^2}\ln x \right) \end{align*} \tag{9}\]<p>Como a razão $\cos\left(\sqrt{b - \frac{1}{4}(1-a)^2}\ln x \right)$ não é constante, essas duas soluções são linearmente independentes e, portanto, pelo <a href="/pt-BR/posts/homogeneous-linear-odes-of-second-order/#princípio-da-superposição">princípio da superposição</a>, formam uma base de soluções da equação de Euler-Cauchy ($\ref{eqn:euler_cauchy_eqn}$). Isso nos dá a seguinte solução geral real:</p>\[y = x^{(1-a)/2} \left[ A\cos\left(\sqrt{b - \tfrac{1}{4}(1-a)^2}\ln x \right) + B\sin\left(\sqrt{b - \tfrac{1}{4}(1-a)^2}\ln x \right) \right]. \label{eqn:general_sol_3}\tag{10}\]<p>No entanto, o caso em que a equação auxiliar da equação de Euler-Cauchy tem raízes complexas conjugadas não tem grande importância prática.</p><h2 id="transformação-para-uma-edo-linear-homogênea-de-segunda-ordem-com-coeficientes-constantes">Transformação para uma EDO linear homogênea de segunda ordem com coeficientes constantes</h2><p>A equação de Euler-Cauchy pode ser transformada em uma <a href="/pt-BR/posts/homogeneous-linear-odes-with-constant-coefficients/">EDO linear homogênea de segunda ordem com coeficientes constantes</a> através de uma substituição de variável.</p><p>Fazendo $x = e^t$, temos</p>\[\frac{d}{dx} = \frac{1}{x}\frac{d}{dt}, \quad \frac{d^2}{dx^2} = \frac{1}{x^2}\left(\frac{d^2}{dt^2} - \frac{d}{dt} \right)\]<p>e a equação de Euler-Cauchy ($\ref{eqn:euler_cauchy_eqn}$) se transforma na seguinte EDO linear homogênea com coeficientes constantes em termos de $t$:</p>\[y^{\prime\prime}(t) + (a-1)y^{\prime}(t) + by(t) = 0. \label{eqn:substituted}\tag{11}\]<p>Resolvendo a equação ($\ref{eqn:substituted}$) em termos de $t$ usando o método para <a href="/pt-BR/posts/homogeneous-linear-odes-with-constant-coefficients/">EDOs lineares homogêneas de segunda ordem com coeficientes constantes</a> e depois substituindo $t = \ln{x}$, obtemos os mesmos resultados que <a href="#forma-da-solução-geral-de-acordo-com-o-sinal-do-discriminante-da-equação-auxiliar">vimos anteriormente</a>.</p>]]> </content> </entry> <entry><title xml:lang="pt-BR">Teste de Convergência ou Divergência de Séries</title><link href="https://www.yunseo.kim/pt-BR/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/testing-for-convergence-or-divergence-of-a-series/" rel="alternate" type="text/html" hreflang="cs" /><published>2025-03-18T00:00:00+09:00</published> <updated>2025-05-13T16:24:07+09:00</updated> <id>https://www.yunseo.kim/pt-BR/posts/testing-for-convergence-or-divergence-of-a-series/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Calculus" /> <summary xml:lang="pt-BR">Examinamos vários métodos para determinar a convergência ou divergência de séries.</summary> <content type="html" xml:lang="pt-BR"> <![CDATA[<p>Examinamos vários métodos para determinar a convergência ou divergência de séries.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><ul><li><strong>Teste do termo geral</strong>: $\lim_{n\to\infty} a_n \neq 0 \Rightarrow \text{a série }\sum a_n \text{ diverge}$<li><strong>Convergência/divergência de séries geométricas</strong>: A série geométrica $\sum ar^{n-1}$:<ul><li>Converge se $|r| &lt; 1$<li>Diverge se $|r| \geq 1$</ul><li><strong>Convergência/divergência de séries-$p$</strong>: A série-$p$ $\sum \cfrac{1}{n^p}$:<ul><li>Converge se $p&gt;1$<li>Diverge se $p\leq 1$</ul><li><strong>Teste de comparação</strong>: Se $0 \leq a_n \leq b_n$, então:<ul><li>$\sum b_n &lt; \infty \ \Rightarrow \ \sum a_n &lt; \infty$<li>$\sum a_n = \infty \ \Rightarrow \ \sum b_n = \infty$</ul><li><strong>Teste de comparação no limite</strong>: Se $\lim_{n\to\infty} \frac{a_n}{b_n} = c \text{ (}c\text{ é um número positivo finito)}$, então as séries $\sum a_n$ e $\sum b_n$ ambas convergem ou ambas divergem<li>Para uma série de termos positivos $\sum a_n$ e um número positivo $\epsilon &lt; 1$:<ul><li>Se $\sqrt[n]{a_n}&lt; 1-\epsilon$ para todo $n$, então a série $\sum a_n$ converge<li>Se $\sqrt[n]{a_n}&gt; 1+\epsilon$ para todo $n$, então a série $\sum a_n$ diverge</ul><li><strong>Teste da raiz</strong>: Para uma série de termos positivos $\sum a_n$, se o limite $\lim_{n\to\infty} \sqrt[n]{a_n} =: r$ existe:<ul><li>Se $r&lt;1$, então a série $\sum a_n$ converge<li>Se $r&gt;1$, então a série $\sum a_n$ diverge</ul><li><strong>Teste da razão</strong>: Para uma sequência de números positivos $(a_n)$ e $0 &lt; r &lt; 1$:<ul><li>Se $a_{n+1}/a_n \leq r$ para todo $n$, então a série $\sum a_n$ converge<li>Se $a_{n+1}/a_n \geq 1$ para todo $n$, então a série $\sum a_n$ diverge</ul><li>Para uma sequência de números positivos $(a_n)$, se o limite $\rho := \lim_{n\to\infty} \cfrac{a_{n+1}}{a_n}$ existe:<ul><li>Se $\rho &lt; 1$, então a série $\sum a_n$ converge<li>Se $\rho &gt; 1$, então a série $\sum a_n$ diverge</ul><li><strong>Teste da integral</strong>: Se uma função contínua $f: \left[1,\infty \right) \rightarrow \mathbb{R}$ é decrescente e sempre $f(x)&gt;0$, então a série $\sum f(n)$ converge se e somente se a integral $\int_1^\infty f(x)\ dx := \lim_{b\to\infty} \int_1^b f(x)\ dx$ converge<li><strong>Teste da série alternada</strong>: Uma série alternada $\sum a_n$ converge se:<ol><li>Os sinais de $a_n$ e $a_{n+1}$ são diferentes para todo $n$<li>$|a_n| \geq |a_{n+1}|$ para todo $n$<li>$\lim_{n\to\infty} a_n = 0$</ol><li>Uma série absolutamente convergente é convergente. A recíproca não é verdadeira.</ul></blockquote><h2 id="pré-requisitos">Pré-requisitos</h2><ul><li><a href="/pt-BR/posts/sequences-and-series/">Sequências e Séries</a></ul><h2 id="introdução">Introdução</h2><p>Anteriormente, em <a href="/pt-BR/posts/sequences-and-series/#convergência-e-divergência-de-séries">Sequências e Séries</a>, vimos a definição de convergência e divergência de séries. Neste artigo, resumiremos vários métodos que podem ser usados para determinar a convergência ou divergência de séries. Geralmente, determinar se uma série converge ou diverge é muito mais fácil do que calcular a soma exata da série.</p><h2 id="teste-do-termo-geral">Teste do termo geral</h2><p>Para uma série $\sum a_n$, chamamos $a_n$ de <strong>termo geral</strong> da série.</p><p>Pelo seguinte teorema, podemos facilmente identificar que algumas séries divergem claramente, e portanto, verificar isso primeiro é uma abordagem sensata para evitar perda de tempo ao determinar a convergência ou divergência de uma série.</p><blockquote class="prompt-info"><p><strong>Teste do termo geral</strong><br /> Se uma série $\sum a_n$ converge, então</p>\[\lim_{n\to\infty} a_n=0\]<p>Ou seja,</p>\[\lim_{n\to\infty} a_n \neq 0 \Rightarrow \text{a série }\sum a_n \text{ diverge}\]</blockquote><h3 id="prova">Prova</h3><p>Seja $l$ a soma de uma série convergente $\sum a_n$ e defina a soma dos primeiros $n$ termos como</p>\[s_n := a_1 + a_2 + \cdots + a_n\]<p>Então,</p>\[\forall \epsilon &gt; 0,\, \exists N \in \mathbb{N}\ (n &gt; N \Rightarrow |s_n - l| &lt; \epsilon).\]<p>Portanto, para $n$ suficientemente grande ($&gt;N$),</p>\[|a_n| = |s_n - s_{n-1}| = |(s_n - l) - (s_{n-1} - l)| \leq |s_n - l| + |s_{n-1} - l| \leq \epsilon + \epsilon = 2\epsilon\]<p>Pela definição de convergência de sequência,</p>\[\lim_{n\to\infty} |a_n| = 0. \quad \blacksquare\]<h3 id="observação-importante">Observação importante</h3><p>A recíproca deste teorema geralmente não é verdadeira. Um exemplo clássico que demonstra isso é a <strong>série harmônica</strong>.</p><p>A série harmônica é uma série cujos termos são os recíprocos de uma <strong>progressão aritmética</strong>, ou seja, uma <strong>sequência harmônica</strong>. A série harmônica mais representativa é</p>\[H_n := 1 + \frac{1}{2} + \cdots + \frac{1}{n} \quad (n=1,2,3,\dots)\]<p>Podemos mostrar que esta série diverge da seguinte forma:</p>\[\begin{align*} \lim_{n\to\infty} H_n &amp;= 1 + \frac{1}{2} + \frac{1}{3} + \frac{1}{4} + \frac{1}{5} + \frac{1}{6} + \frac{1}{7} + \frac{1}{8} + \frac{1}{9} + \cdots + \frac{1}{16} + \cdots \\ &amp;&gt; 1 + \frac{1}{2} + \frac{1}{4} + \frac{1}{4} + \frac{1}{8} + \frac{1}{8} + \frac{1}{8} + \frac{1}{8} + \frac{1}{16} + \cdots + \frac{1}{16} + \cdots \\ &amp;= 1 + \frac{1}{2} \qquad\, + \frac{1}{2} \qquad\qquad\qquad\ \ + \frac{1}{2} \qquad\qquad\quad + \frac{1}{2} + \cdots \\ &amp;= \infty. \end{align*}\]<p>Assim, vemos que a série $H_n$ diverge, apesar de seu termo geral $1/n$ convergir para $0$.</p><blockquote class="prompt-danger"><p>Se $\lim_{n\to\infty} a_n \neq 0$, então a série $\sum a_n$ certamente diverge, mas é perigoso assumir que a série $\sum a_n$ converge apenas porque $\lim_{n\to\infty} a_n = 0$. Nesse caso, outros métodos devem ser usados para determinar a convergência ou divergência.</p></blockquote><h2 id="séries-geométricas">Séries geométricas</h2><p>A <strong>série geométrica</strong> com primeiro termo 1 e <strong>razão</strong> $r$</p>\[1 + r + r^2 + r^3 + \cdots \label{eqn:geometric_series}\tag{5}\]<p>é a <u>série mais importante e fundamental</u>. Da equação</p>\[(1-r)(1+r+\cdots + r^{n-1}) = 1 - r^n\]<p>obtemos</p>\[1 + r + \cdots + r^{n-1} = \frac{1-r^n}{1-r} = \frac{1}{1-r} - \frac{r^n}{1-r} \qquad (r \neq 1) \label{eqn:sum_of_geometric_series}\tag{6}\]<p>Por outro lado,</p>\[\lim_{n\to\infty} r^n = 0 \quad \Leftrightarrow \quad |r| &lt; 1\]<p>Portanto, sabemos que a condição necessária e suficiente para a convergência da série geométrica ($\ref{eqn:geometric_series}$) é $|r| &lt; 1$.</p><blockquote class="prompt-info"><p><strong>Convergência/divergência de séries geométricas</strong><br /> A série geométrica $\sum ar^{n-1}$:</p><ul><li>Converge se $|r| &lt; 1$<li>Diverge se $|r| \geq 1$</ul></blockquote><p>Disso, obtemos</p>\[1 + r + r^2 + r^3 + \cdots = \frac{1}{1-r} \qquad (|r| &lt; 1) \label{eqn:sum_of_inf_geometric_series}\tag{7}\]<h3 id="séries-geométricas-e-aproximações">Séries geométricas e aproximações</h3><p>A identidade ($\ref{eqn:sum_of_geometric_series}$) é útil para encontrar aproximações de $\cfrac{1}{1-r}$ quando $|r| &lt; 1$.</p><p>Substituindo $r=-\epsilon$ e $n=2$ nesta equação, obtemos</p>\[\frac{1}{1+\epsilon} - (1 - \epsilon) = \frac{\epsilon^2}{1 + \epsilon}\]<p>Portanto, se $0 &lt; \epsilon &lt; 1$, então</p>\[0 &lt; \frac{1}{1 + \epsilon} - (1 - \epsilon) &lt; \epsilon^2\]<p>Assim,</p>\[\frac{1}{1 + \epsilon} \approx (1 - \epsilon) \pm \epsilon^2 \qquad (0 &lt; \epsilon &lt; 1)\]<p>Isso nos mostra que, para um valor positivo suficientemente pequeno $\epsilon$, $\cfrac{1}{1 + \epsilon}$ pode ser aproximado por $1 - \epsilon$.</p><h2 id="teste-da-série-p-teste-da-série-p">Teste da série-$p$ (Teste da série-$p$)</h2><p>Para um número real positivo $p$, uma série da seguinte forma é chamada de <strong>série-$p$</strong>:</p>\[\sum_{n=1}^{\infty} \frac{1}{n^p}\]<blockquote class="prompt-info"><p><strong>Convergência/divergência de séries-$p$</strong><br /> A série-$p$ $\sum \cfrac{1}{n^p}$:</p><ul><li>Converge se $p&gt;1$<li>Diverge se $p\leq 1$</ul></blockquote><p>No caso da série-$p$ onde $p=1$, temos a série harmônica, que já mostramos que diverge.<br /> O problema de encontrar o valor da série-$p$ para $p=2$, ou seja, $\sum \cfrac{1}{n^2}$, é conhecido como o “problema de Basel”, nomeado após a cidade natal da família Bernoulli, que produziu vários matemáticos famosos ao longo de gerações e foi a primeira a demonstrar que esta série converge. A resposta para este problema é conhecida como $\cfrac{\pi^2}{6}$.</p><p>Mais geralmente, a série-$p$ para $p&gt;1$ é chamada de <strong>função zeta</strong>. Esta é uma função especial introduzida por Leonhard Euler em 11740 <a href="https://en.wikipedia.org/wiki/Holocene_calendar">HE</a> e posteriormente nomeada por Riemann, definida como:</p>\[\zeta(s) := \sum_{n=1}^{\infty} \frac{1}{n^s} \qquad (s&gt;1)\]<p>Este tópico se afasta um pouco do nosso foco principal e, para ser honesto, como sou um estudante de engenharia e não um matemático, não vou entrar em detalhes aqui. No entanto, vale mencionar que Leonhard Euler mostrou que a função zeta também pode ser expressa como um produto infinito de números primos, conhecido como <strong>Produto de Euler</strong>, e desde então a função zeta ocupa uma posição central em vários campos da teoria analítica dos números. A <strong>função zeta de Riemann</strong>, que estende o domínio da função zeta para números complexos, e a importante conjectura não resolvida conhecida como <strong>Hipótese de Riemann</strong> são exemplos disso.</p><p>Voltando ao nosso tópico original, a prova do teste da série-$p$ requer o <a href="#teste-de-comparação">teste de comparação</a> e o <a href="#teste-da-integral">teste da integral</a>, que serão discutidos mais adiante. No entanto, a convergência/divergência das séries-$p$ pode ser útil no <a href="#teste-de-comparação">teste de comparação</a> que veremos a seguir, por isso foi intencionalmente colocada nesta posição.</p><h3 id="prova-1">Prova</h3><h4 id="i-quando-p1">i) Quando $p&gt;1$</h4><p>A integral</p>\[\int_1^\infty \frac{1}{x^p}\ dx = \left[\frac{1}{-p+1}\frac{1}{x^{p-1}} \right]^\infty_1 = \frac{1}{p-1}\]<p>converge, então pelo <a href="#teste-da-integral">teste da integral</a>, a série $\sum \cfrac{1}{n^p}$ também converge.</p><h4 id="ii-quando-pleq-1">ii) Quando $p\leq 1$</h4><p>Neste caso,</p>\[0 \leq \frac{1}{n} \leq \frac{1}{n^p}\]<p>Sabemos que a série harmônica $\sum \cfrac{1}{n}$ diverge, então pelo <a href="#teste-de-comparação">teste de comparação</a>, $\sum \cfrac{1}{n^p}$ também diverge.</p><h4 id="conclusão">Conclusão</h4><p>Por i) e ii), a série-$p$ $\sum \cfrac{1}{n^p}$ converge se $p&gt;1$ e diverge se $p \leq 1$. $\blacksquare$</p><h2 id="teste-de-comparação">Teste de comparação</h2><p>O <strong>teste de comparação</strong> de Jakob Bernoulli é útil para determinar a convergência/divergência de <strong>séries de termos positivos</strong>, que são séries cujos termos gerais são números reais não negativos.</p><p>Uma série de termos positivos $\sum a_n$ é uma sequência crescente, então se não divergir para o infinito ($\sum a_n = \infty$), ela necessariamente converge. Portanto, para séries de termos positivos, a expressão</p>\[\sum a_n &lt; \infty\]<p>significa que <u>a série converge</u>.</p><blockquote class="prompt-info"><p><strong>Teste de comparação</strong><br /> Se $0 \leq a_n \leq b_n$, então:</p><ul><li>$\sum b_n &lt; \infty \ \Rightarrow \ \sum a_n &lt; \infty$<li>$\sum a_n = \infty \ \Rightarrow \ \sum b_n = \infty$</ul></blockquote><p>Em particular, para séries de termos positivos como $\sum \cfrac{1}{n^2 + n}$, $\sum \cfrac{\log n}{n^3}$, $\sum \cfrac{1}{2^n + 3^n}$, $\sum \cfrac{1}{\sqrt{n}}$, $\sum \sin{\cfrac{1}{n}}$, que têm formas semelhantes às séries geométricas $\sum ar^{n-1}$ ou séries-$p$ $\sum \cfrac{1}{n^p}$ que vimos anteriormente, é recomendável tentar ativamente o teste de comparação.</p><p>Vários outros testes de convergência/divergência que serão discutidos posteriormente podem ser derivados deste <strong>teste de comparação</strong>, o que o torna o mais importante nesse sentido.</p><h3 id="teste-de-comparação-no-limite">Teste de comparação no limite</h3><p>Para séries de termos positivos $\sum a_n$ e $\sum b_n$, se a razão entre os termos gerais das duas séries $a_n/b_n$ tem os termos dominantes no numerador e denominador que se cancelam, resultando em $\lim_{n\to\infty} \cfrac{a_n}{b_n}=c \text{ (}c\text{ é um número positivo finito)}$, e se conhecemos a convergência/divergência da série $\sum b_n$, podemos usar o seguinte <strong>teste de comparação no limite</strong>.</p><blockquote class="prompt-info"><p><strong>Teste de comparação no limite</strong><br /> Se</p>\[\lim_{n\to\infty} \frac{a_n}{b_n} = c \text{ (}c\text{ é um número positivo finito)}\]<p>então as séries $\sum a_n$ e $\sum b_n$ ambas convergem ou ambas divergem. Ou seja, $ \sum a_n &lt; \infty \ \Leftrightarrow \ \sum b_n &lt; \infty$.</p></blockquote><h2 id="teste-da-raiz">Teste da raiz</h2><blockquote class="prompt-info"><p><strong>Teorema</strong><br /> Para uma série de termos positivos $\sum a_n$ e um número positivo $\epsilon &lt; 1$:</p><ul><li>Se $\sqrt[n]{a_n}&lt; 1-\epsilon$ para todo $n$, então a série $\sum a_n$ converge<li>Se $\sqrt[n]{a_n}&gt; 1+\epsilon$ para todo $n$, então a série $\sum a_n$ diverge</ul></blockquote><blockquote class="prompt-info"><p><strong>Corolário: Teste da raiz</strong><br /> Para uma série de termos positivos $\sum a_n$, se o limite</p>\[\lim_{n\to\infty} \sqrt[n]{a_n} =: r\]<p>existe, então:</p><ul><li>Se $r&lt;1$, a série $\sum a_n$ converge<li>Se $r&gt;1$, a série $\sum a_n$ diverge</ul></blockquote><blockquote class="prompt-warning"><p>No corolário acima, se $r=1$, não podemos determinar a convergência/divergência e devemos usar outros métodos.</p></blockquote><h2 id="teste-da-razão">Teste da razão</h2><blockquote class="prompt-info"><p><strong>Teste da razão</strong><br /> Para uma sequência de números positivos $(a_n)$ e $0 &lt; r &lt; 1$:</p><ul><li>Se $a_{n+1}/a_n \leq r$ para todo $n$, então a série $\sum a_n$ converge<li>Se $a_{n+1}/a_n \geq 1$ para todo $n$, então a série $\sum a_n$ diverge</ul></blockquote><blockquote class="prompt-info"><p><strong>Corolário</strong><br /> Para uma sequência de números positivos $(a_n)$, se o limite $\rho := \lim_{n\to\infty} \cfrac{a_{n+1}}{a_n}$ existe, então:</p><ul><li>Se $\rho &lt; 1$, a série $\sum a_n$ converge<li>Se $\rho &gt; 1$, a série $\sum a_n$ diverge</ul></blockquote><h2 id="teste-da-integral">Teste da integral</h2><p>O cálculo integral pode ser usado para determinar a convergência/divergência de séries compostas por sequências decrescentes de termos positivos.</p><blockquote class="prompt-info"><p><strong>Teste da integral</strong><br /> Se uma função contínua $f: \left[1,\infty \right) \rightarrow \mathbb{R}$ é decrescente e sempre $f(x)&gt;0$, então a série $\sum f(n)$ converge se e somente se a integral</p>\[\int_1^\infty f(x)\ dx := \lim_{b\to\infty} \int_1^b f(x)\ dx\]<p>converge.</p></blockquote><h3 id="prova-2">Prova</h3><p>Como a função $f(x)$ é contínua, decrescente e sempre positiva, a desigualdade</p>\[f(n+1) \leq \int_n^{n+1} f(x)\ dx \leq f(n)\]<p>é válida. Somando esta desigualdade de $n=1$ até o termo geral, obtemos</p>\[f(2) + \cdots + f(n+1) \leq \int_1^{n+1} f(x)\ dx \leq f(1) + \cdots + f(n)\]<p>Usando o <a href="#teste-de-comparação">teste de comparação</a>, obtemos o resultado desejado. $\blacksquare$</p><h2 id="séries-alternadas">Séries alternadas</h2><p>Uma <strong>série alternada</strong> é uma série $\sum a_n$ onde os termos $a_n$ são não nulos e o sinal de cada termo $a_n$ é diferente do sinal do termo seguinte $a_{n+1}$, ou seja, termos positivos e negativos aparecem alternadamente.</p><p>Para séries alternadas, o seguinte teorema descoberto pelo matemático alemão Gottfried Wilhelm Leibniz pode ser útil para determinar a convergência/divergência.</p><blockquote class="prompt-info"><p><strong>Teste da série alternada</strong><br /> Se:</p><ol><li>Os sinais de $a_n$ e $a_{n+1}$ são diferentes para todo $n$,<li>$|a_n| \geq |a_{n+1}|$ para todo $n$, e<li>$\lim_{n\to\infty} a_n = 0$,</ol><p>então a série alternada $\sum a_n$ converge.</p></blockquote><h2 id="convergência-absoluta">Convergência absoluta</h2><p>Dizemos que uma série $\sum a_n$ <strong>converge absolutamente</strong> se a série $\sum |a_n|$ converge.</p><p>O seguinte teorema é válido:</p><blockquote class="prompt-info"><p><strong>Teorema</strong><br /> Uma série absolutamente convergente é convergente.</p></blockquote><blockquote class="prompt-warning"><p>A recíproca do teorema acima não é verdadeira.<br /> Quando uma série converge, mas não converge absolutamente, dizemos que ela <strong>converge condicionalmente</strong>.</p></blockquote><h3 id="prova-3">Prova</h3><p>Para um número real $a$, definimos</p>\[\begin{align*} a^+ &amp;:= \max\{a,0\} = \frac{1}{2}(|a| + a), \\ a^- &amp;:= -\min\{a,0\} = \frac{1}{2}(|a| - a) \end{align*}\]<p>Então,</p>\[a = a^+ - a^-, \qquad |a| = a^+ + a^-\]<p>Como $0 \leq a^\pm \leq |a|$, pelo <a href="#teste-de-comparação">teste de comparação</a>, se a série $\sum |a_n|$ converge, então as séries $\sum a_n^+$ e $\sum a_n^-$ também convergem, e portanto, pelas <a href="/pt-BR/posts/sequences-and-series/#propriedades-básicas-de-séries-convergentes">propriedades básicas de séries convergentes</a>,</p>\[\sum a_n = \sum (a_n^+ - a_n^-) = \sum a_n^+ - \sum a_n^-\]<p>também converge. $\blacksquare$</p>]]> </content> </entry> <entry><title xml:lang="pt-BR">Sequências e Séries</title><link href="https://www.yunseo.kim/pt-BR/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/sequences-and-series/" rel="alternate" type="text/html" hreflang="cs" /><published>2025-03-16T00:00:00+09:00</published> <updated>2025-05-13T16:24:07+09:00</updated> <id>https://www.yunseo.kim/pt-BR/posts/sequences-and-series/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Calculus" /> <summary xml:lang="pt-BR">Exploramos conceitos fundamentais do cálculo, incluindo definições de sequências e séries, convergência e divergência de sequências, convergência e divergência de séries, e a definição da base do logaritmo natural e.</summary> <content type="html" xml:lang="pt-BR"> <![CDATA[<p>Exploramos conceitos fundamentais do cálculo, incluindo definições de sequências e séries, convergência e divergência de sequências, convergência e divergência de séries, e a definição da base do logaritmo natural e.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="sequências">Sequências</h2><p>No cálculo, uma <strong>sequência</strong> geralmente se refere a uma sequência infinita. Em outras palavras, uma sequência é uma função definida no conjunto de todos os <strong>números naturais</strong></p>\[\mathbb{N} := \{1,2,3,\dots\}\]<ul><li>Se os valores desta função são números reais, chamamos de ‘sequência real’, se são números complexos, ‘sequência complexa’, se são pontos, ‘sequência de pontos’, se são matrizes, ‘sequência de matrizes’, se são funções, ‘sequência de funções’, se são conjuntos, ‘sequência de conjuntos’, mas todos estes podem ser simplesmente chamados de ‘sequência’.</ul><p>Normalmente, para o <strong>corpo dos números reais</strong> $\mathbb{R}$, em uma sequência $\mathbf{a}: \mathbb{N} \to \mathbb{R}$, definimos</p>\[a_1 := \mathbf{a}(1), \quad a_2 := \mathbf{a}(2), \quad a_3 := \mathbf{a}(3)\]<p>e representamos esta sequência como</p>\[a_1,\, a_2,\, a_3,\, \dots\]<p>ou</p>\[\begin{gather*} (a_1,a_2,a_3,\dots), \\ (a_n: n=1,2,3,\dots), \\ (a_n)_{n=1}^{\infty}, \qquad (a_n) \end{gather*}\]<blockquote class="prompt-info"><p>*No processo de definir uma sequência, em vez do conjunto de todos os números naturais $\mathbb{N}$, podemos usar o conjunto de inteiros não negativos</p>\[\mathbb{N}_0 := \{0\} \cup \mathbb{N} = \{0,1,2,\dots\}\]<p>ou</p>\[\{2,3,4,\dots \}\]<p>como domínio. Por exemplo, ao lidar com a teoria das séries de potências, é mais natural ter $\mathbb{N}_0$ como domínio.</p></blockquote><h2 id="convergência-e-divergência">Convergência e Divergência</h2><p>Se uma sequência $(a_n)$ converge para um número real $l$, escrevemos</p>\[\lim_{n\to \infty} a_n = l\]<p>e chamamos $l$ de <strong>valor limite</strong> da sequência $(a_n)$.</p><blockquote class="prompt-info"><p>A definição rigorosa usando o <strong>argumento épsilon-delta</strong> é a seguinte:</p>\[\lim_{n\to \infty} a_n = l \overset{def}\Longleftrightarrow \forall \epsilon &gt; 0,\, \exists N \in \mathbb{N}\ (n &gt; N \Rightarrow |a_n - l| &lt; \epsilon)\]<p>Ou seja, se para qualquer número positivo $\epsilon$, por menor que seja, sempre existe um número natural $N$ tal que $|a_n - l| &lt; \epsilon$ para $n&gt;N$, isso significa que a diferença entre $a_n$ e $l$ se torna arbitrariamente pequena para $n$ suficientemente grande, e portanto definimos que a sequência $(a_n)$ converge para o número real $l$.</p></blockquote><p>Uma sequência que não converge é dita <strong>divergente</strong>. <em>A convergência ou divergência de uma sequência não muda se um número finito de seus termos for alterado.</em></p><p>Se cada termo da sequência $(a_n)$ cresce indefinidamente, escrevemos</p>\[\lim_{n\to \infty} a_n = \infty\]<p>e dizemos que <em>diverge para mais infinito</em>. Da mesma forma, se cada termo da sequência $(a_n)$ decresce indefinidamente, escrevemos</p>\[\lim_{n\to \infty} a_n = -\infty\]<p>e dizemos que <em>diverge para menos infinito</em>.</p><h2 id="propriedades-básicas-de-sequências-convergentes">Propriedades Básicas de Sequências Convergentes</h2><p>Se as sequências $(a_n)$ e $(b_n)$ são ambas convergentes (ou seja, têm valores limite), então as sequências $(a_n + b_n)$ e $(a_n \cdot b_n)$ também são convergentes, e</p>\[\lim_{n\to \infty} (a_n + b_n) = \lim_{n\to \infty} a_n + \lim_{n\to \infty} b_n \label{eqn:props_of_conv_series_1}\tag{1}\] \[\lim_{n\to \infty} (a_n \cdot b_n) = \left(\lim_{n\to \infty} a_n \right) \cdot \left(\lim_{n\to \infty} b_n \right) \label{eqn:props_of_conv_series_2}\tag{2}\]<p>Além disso, para qualquer número real $t$,</p>\[\lim_{n\to \infty} (t a_n) = t\left(\lim_{n\to \infty} a_n \right) \label{eqn:props_of_conv_series_3}\tag{3}\]<p>Estas propriedades são chamadas de <strong>propriedades básicas de sequências convergentes</strong> ou <strong>propriedades básicas de limites</strong>.</p><h2 id="a-base-do-logaritmo-natural-e">A Base do Logaritmo Natural $e$</h2><p>A <strong>base do logaritmo natural</strong> é definida como</p>\[e := \lim_{n\to \infty} \left(1+\frac{1}{n} \right)^n \approx 2.718\]<p>Esta é considerada uma das constantes mais importantes em matemática.</p><blockquote class="prompt-tip"><p>Apenas na Coreia, a expressão ‘constante natural’ é bastante utilizada, mas não é um termo padrão. O termo oficial registrado no dicionário de termos matemáticos pela Sociedade Matemática da Coreia é <a href="https://www.kms.or.kr/mathdict/list.html?key=kname&amp;keyword=%EC%9E%90%EC%97%B0%EB%A1%9C%EA%B7%B8%EC%9D%98+%EB%B0%91">‘base do logaritmo natural’</a>, e a expressão ‘constante natural’ não pode ser encontrada neste dicionário. Além disso, no Dicionário Padrão da Língua Coreana do Instituto Nacional da Língua Coreana, a palavra ‘constante natural’ não pode ser encontrada, e na <a href="https://stdict.korean.go.kr/search/searchView.do?pageSize=10&amp;searchKeyword=%EC%9E%90%EC%97%B0%EB%A1%9C%EA%B7%B8">definição de dicionário para ‘logaritmo natural’</a>, apenas menciona “um número específico geralmente representado por e”.<br /> Em países de língua inglesa e no Japão, também não existe um termo correspondente, e em inglês, geralmente é referido como ‘the base of the natural logarithm’ ou abreviado como ‘natural base’, ou ‘Euler’s number’ ou ‘the number $e$’.<br /> Como a origem é incerta e nunca foi reconhecida como um termo oficial pela Sociedade Matemática da Coreia, e além disso, não é usado em nenhum lugar do mundo exceto na Coreia, não há absolutamente nenhuma razão para insistir em tal termo. Portanto, daqui em diante, vou me referir a ele como ‘base do logaritmo natural’ ou simplesmente usar $e$.</p></blockquote><h2 id="séries">Séries</h2><p>Dada uma sequência</p>\[\mathbf{a} = (a_1, a_2, a_3, \dots)\]<p>a sequência formada pelas somas parciais desta sequência</p>\[a_1, \quad a_1 + a_2, \quad a_1 + a_2 + a_3, \quad \dots\]<p>é chamada de <strong>série</strong> da sequência $\mathbf{a}$. A série da sequência $(a_n)$ é representada como</p>\[\begin{gather*} a_1 + a_2 + a_3 + \cdots, \qquad \sum_{n=1}^{\infty}a_n, \\ \sum_{n\geq 1} a_n, \qquad \sum_n a_n, \qquad \sum a_n \end{gather*}\]<h2 id="convergência-e-divergência-de-séries">Convergência e Divergência de Séries</h2><p>Se a série obtida da sequência $(a_n)$</p>\[a_1, \quad a_1 + a_2, \quad a_1 + a_2 + a_3, \quad \dots\]<p>converge para algum número real $l$, escrevemos</p>\[\sum_{n=1}^{\infty} a_n = l\]<p>Neste caso, o valor limite $l$ é chamado de <strong>soma</strong> da série $\sum a_n$. O símbolo</p>\[\sum a_n\]<p>pode representar tanto a <u>série</u> quanto a <u>soma da série</u>, dependendo do contexto.</p><p>Uma série que não converge é dita <strong>divergente</strong>.</p><h2 id="propriedades-básicas-de-séries-convergentes">Propriedades Básicas de Séries Convergentes</h2><p>Das <a href="#propriedades-básicas-de-sequências-convergentes">propriedades básicas de sequências convergentes</a>, obtemos as seguintes propriedades básicas de séries convergentes. Para um número real $t$ e duas séries convergentes $\sum a_n$ e $\sum b_n$,</p>\[\sum(a_n + b_n) = \sum a_n + \sum b_n, \qquad \sum ta_n = t\sum a_n \tag{4}\]<p>A convergência de uma série não é afetada pela mudança de um número finito de termos. Ou seja, se duas sequências $(a_n)$ e $(b_n)$ são iguais exceto para um número finito de $n$, a série $\sum a_n$ converge se e somente se a série $\sum b_n$ converge.</p>]]> </content> </entry> <entry><title xml:lang="pt-BR">As Leis de Movimento de Newton</title><link href="https://www.yunseo.kim/pt-BR/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/newtons-laws-of-motion/" rel="alternate" type="text/html" hreflang="cs" /><published>2025-03-10T00:00:00+09:00</published> <updated>2026-02-16T05:09:10+09:00</updated> <id>https://www.yunseo.kim/pt-BR/posts/newtons-laws-of-motion/</id> <author> <name>Yunseo Kim</name> </author> <category term="Physics" /> <category term="Classical Dynamics" /> <summary xml:lang="pt-BR">Exploramos as leis de movimento de Newton e o significado das três leis, as definições de massa inercial e gravitacional, e examinamos o princípio da equivalência, que tem importância significativa não apenas na mecânica clássica, mas também na teoria da relatividade geral.</summary> <content type="html" xml:lang="pt-BR"> <![CDATA[<p>Exploramos as leis de movimento de Newton e o significado das três leis, as definições de massa inercial e gravitacional, e examinamos o princípio da equivalência, que tem importância significativa não apenas na mecânica clássica, mas também na teoria da relatividade geral.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><p><strong>Leis de movimento de Newton</strong></p><ol><li>Um corpo permanece em repouso ou em movimento retilíneo uniforme, a menos que uma força externa atue sobre ele.<li>A taxa de variação temporal do momento de um corpo é igual à força aplicada sobre ele.<ul><li>$\vec{F} = \cfrac{d\vec{p}}{dt} = \cfrac{d}{dt}(m\vec{v}) = m\vec{a}$</ul><li>Quando dois corpos exercem forças um sobre o outro, essas forças têm a mesma magnitude e direções opostas.<ul><li>$\vec{F_1} = -\vec{F_2}$</ul></ol></blockquote><blockquote class="prompt-info"><p><strong>Princípio da equivalência</strong></p><ul><li>Massa inercial: a massa que determina a aceleração de um corpo quando uma força é aplicada<li>Massa gravitacional: a massa que determina a força gravitacional entre um corpo e outro<li>Atualmente, sabe-se que a massa inercial e a massa gravitacional são claramente idênticas com uma margem de erro de aproximadamente $10^{-12}$<li>A afirmação de que a massa inercial e a massa gravitacional são exatamente iguais é chamada de <strong>princípio da equivalência</strong></ul></blockquote><h2 id="leis-de-movimento-de-newton">Leis de Movimento de Newton</h2><p>As leis de movimento de Newton são três leis publicadas por Isaac Newton em sua obra Philosophiæ Naturalis Principia Mathematica (Princípios Matemáticos da Filosofia Natural, abreviado como “Principia”) no ano 11687 do <a href="https://en.wikipedia.org/wiki/Holocene_calendar">calendário holoceno</a>, e formam a base da mecânica newtoniana.</p><ol><li>Um corpo permanece em repouso ou em movimento retilíneo uniforme, a menos que uma força externa atue sobre ele.<li>A taxa de variação temporal do momento de um corpo é igual à força aplicada sobre ele.<li>Quando dois corpos exercem forças um sobre o outro, essas forças têm a mesma magnitude e direções opostas.</ol><h3 id="primeira-lei-de-newton">Primeira Lei de Newton</h3><blockquote><p>I. Um corpo permanece em repouso ou em movimento retilíneo uniforme, a menos que uma força externa atue sobre ele.</p></blockquote><p>Um corpo neste estado, sem forças externas atuando sobre ele, é chamado de <strong>corpo livre</strong> ou <strong>partícula livre</strong>. No entanto, a primeira lei sozinha fornece apenas um conceito qualitativo de força.</p><h3 id="segunda-lei-de-newton">Segunda Lei de Newton</h3><blockquote><p>II. A taxa de variação temporal do momento de um corpo é igual à força aplicada sobre ele.</p></blockquote><p>Newton definiu o <strong>momento</strong> como o produto da massa pela velocidade:</p>\[\vec{p} \equiv m\vec{v} \label{eqn:momentum}\tag{1}\]<p>A partir disso, a segunda lei de Newton pode ser expressa como:</p>\[\vec{F} = \frac{d\vec{p}}{dt} = \frac{d}{dt}(m\vec{v}) = m\vec{a}. \label{eqn:2nd_law}\tag{2}\]<p>A primeira e a segunda leis de Newton, apesar de seus nomes, são na verdade mais próximas de “definições” de força do que “leis”. Também podemos observar que a definição de força depende da definição de “massa”.</p><h3 id="terceira-lei-de-newton">Terceira Lei de Newton</h3><blockquote><p>III. Quando dois corpos exercem forças um sobre o outro, essas forças têm a mesma magnitude e direções opostas.</p></blockquote><p>Também conhecida como “lei da ação e reação”, esta lei física se aplica quando a força que um corpo exerce sobre outro está na direção da linha que une os dois pontos de ação. Tal força é chamada de <strong>força central</strong>, e a terceira lei se aplica independentemente de a força central ser atrativa ou repulsiva. A gravidade entre dois corpos em repouso, forças eletrostáticas e forças elásticas são exemplos de forças centrais. Por outro lado, forças entre cargas em movimento, forças gravitacionais entre corpos em movimento e outras forças que dependem da velocidade dos corpos interagentes são forças não-centrais, e a terceira lei não pode ser aplicada nesses casos.</p><p>Considerando a definição de massa vista anteriormente, a terceira lei pode ser reformulada como:</p><blockquote><p>III$^\prime$. Quando dois corpos formam um sistema isolado ideal, suas acelerações têm direções opostas e a razão entre suas magnitudes é igual à razão inversa de suas massas.</p></blockquote><p>Pela terceira lei de Newton:</p>\[\vec{F_1} = -\vec{F_2} \label{eqn:3rd_law}\tag{3}\]<p>Substituindo a segunda lei ($\ref{eqn:2nd_law}$) nesta equação:</p>\[\frac{d\vec{p_1}}{dt} = -\frac{d\vec{p_2}}{dt} \label{eqn:3rd-1_law}\tag{4}\]<p>Isso mostra que o momento é conservado na interação isolada entre duas partículas:</p>\[\frac{d}{dt}(\vec{p_1}+\vec{p_2}) = 0 \label{eqn:conservation_of_momentum}\tag{5}\]<p>Além disso, da equação ($\ref{eqn:3rd-1_law}$), como $\vec{p}=m\vec{v}$ e a massa $m$ é constante:</p>\[m_1\left(\frac{d\vec{v_1}}{dt} \right) = m_2\left(-\frac{d\vec{v_2}}{dt} \right) \tag{6a}\] \[m_1(\vec{a_1}) = m_2(-\vec{a_2}) \tag{6b}\]<p>Obtemos:</p>\[\frac{m_2}{m_1} = -\frac{a_1}{a_2}. \tag{7}\]<p>Embora a terceira lei de Newton descreva o caso em que dois corpos formam um sistema isolado, na realidade é impossível realizar tais condições ideais, o que torna a afirmação de Newton de certa forma ousada. Apesar de ser uma conclusão baseada em observações limitadas, graças à profunda intuição física de Newton, a mecânica newtoniana manteve sua posição sólida por quase 300 anos sem erros detectados em verificações experimentais. Somente no século 20 (anos 11900) medições suficientemente precisas se tornaram possíveis para mostrar diferenças entre as previsões da teoria newtoniana e a realidade, levando ao nascimento da teoria da relatividade e da mecânica quântica.</p><h2 id="massa-inercial-e-massa-gravitacional">Massa Inercial e Massa Gravitacional</h2><p>Uma maneira de determinar a massa de um objeto é comparar seu peso com um peso padrão usando instrumentos como uma balança. Este método utiliza o fato de que o peso de um objeto em um campo gravitacional é igual à magnitude da força gravitacional que atua sobre ele, onde a segunda lei $\vec{F}=m\vec{a}$ toma a forma $\vec{W}=m\vec{g}$. Este método baseia-se na suposição fundamental de que a massa $m$ definida em III$^\prime$ é a mesma massa $m$ que aparece na equação gravitacional. Estas duas massas são chamadas de <strong>massa inercial</strong> e <strong>massa gravitacional</strong>, respectivamente, e são definidas como:</p><ul><li>Massa inercial: a massa que determina a aceleração de um objeto quando uma força é aplicada<li>Massa gravitacional: a massa que determina a força gravitacional entre um objeto e outro</ul><p>Embora seja uma história inventada posteriormente e não relacionada a Galileo Galilei, o experimento da Torre de Pisa foi um experimento mental que primeiro sugeriu que a massa inercial e a massa gravitacional seriam iguais. Newton também tentou demonstrar que não havia diferença entre as duas massas medindo os períodos de pêndulos de mesmo comprimento mas com massas diferentes, mas seu método experimental e precisão eram rudimentares, e ele não conseguiu uma prova precisa.</p><p>No final do século 19 (anos 11800), o físico húngaro Eötvös Loránd Ágoston realizou o experimento de Eötvös para medir com precisão a diferença entre massa inercial e massa gravitacional, provando sua identidade com considerável precisão (dentro de 1 parte em 20 milhões).</p><p>Experimentos mais recentes realizados por Robert Henry Dicke e outros aumentaram ainda mais a precisão, e atualmente sabe-se que a massa inercial e a massa gravitacional são claramente idênticas com uma margem de erro de aproximadamente $10^{-12}$. Este resultado tem um significado extremamente importante na teoria da relatividade geral, e a afirmação de que a massa inercial e a massa gravitacional são exatamente iguais é chamada de <strong>princípio da equivalência</strong>.</p>]]> </content> </entry> <entry><title xml:lang="pt-BR">EDOs Lineares Homogêneas de Segunda Ordem com Coeficientes Constantes</title><link href="https://www.yunseo.kim/pt-BR/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/homogeneous-linear-odes-with-constant-coefficients/" rel="alternate" type="text/html" hreflang="cs" /><published>2025-02-22T00:00:00+09:00</published> <updated>2025-07-11T21:22:11+09:00</updated> <id>https://www.yunseo.kim/pt-BR/posts/homogeneous-linear-odes-with-constant-coefficients/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="pt-BR">Examinamos a forma da solução geral de EDOs lineares homogêneas com coeficientes constantes, de acordo com o sinal do discriminante da equação característica.</summary> <content type="html" xml:lang="pt-BR"> <![CDATA[<p>Examinamos a forma da solução geral de EDOs lineares homogêneas com coeficientes constantes, de acordo com o sinal do discriminante da equação característica.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><ul><li>EDO linear homogênea de segunda ordem com coeficientes constantes: $y^{\prime\prime} + ay^{\prime} + by = 0$<li><strong>Equação característica</strong>: $\lambda^2 + a\lambda + b = 0$<li>A forma da solução geral pode ser dividida em três casos de acordo com o sinal do discriminante $a^2 - 4b$ da equação característica, como mostrado na tabela</ul><table><thead><tr><th style="text-align: center">Caso<th style="text-align: center">Raízes da equação característica<th style="text-align: center">Base das soluções da EDO<th style="text-align: center">Solução geral da EDO<tbody><tr><td style="text-align: center">I<td style="text-align: center">Raízes reais distintas<br />$\lambda_1$, $\lambda_2$<td style="text-align: center">$e^{\lambda_1 x}$, $e^{\lambda_2 x}$<td style="text-align: center">$y = c_1e^{\lambda_1 x} + c_2e^{\lambda_2 x}$<tr><td style="text-align: center">II<td style="text-align: center">Raiz real dupla<br /> $\lambda = -\cfrac{1}{2}a$<td style="text-align: center">$e^{-ax/2}$, $xe^{-ax/2}$<td style="text-align: center">$y = (c_1 + c_2 x)e^{-ax/2}$<tr><td style="text-align: center">III<td style="text-align: center">Raízes complexas conjugadas<br /> $\lambda_1 = -\cfrac{1}{2}a + i\omega$, <br /> $\lambda_2 = -\cfrac{1}{2}a - i\omega$<td style="text-align: center">$e^{-ax/2}\cos{\omega x}$, <br /> $e^{-ax/2}\sin{\omega x}$<td style="text-align: center">$y = e^{-ax/2}(A\cos{\omega x} + B\sin{\omega x})$</table></blockquote><h2 id="pré-requisitos">Pré-requisitos</h2><ul><li><a href="/pt-BR/posts/Bernoulli-Equation/">Equação de Bernoulli</a><li><a href="/pt-BR/posts/homogeneous-linear-odes-of-second-order/">EDOs Lineares Homogêneas de Segunda Ordem</a><li>Fórmula de Euler</ul><h2 id="equação-característica">Equação característica</h2><p>Vamos examinar a equação diferencial ordinária linear homogênea de segunda ordem com coeficientes constantes $a$ e $b$:</p>\[y^{\prime\prime} + ay^{\prime} + by = 0 \label{eqn:ode_with_constant_coefficients}\tag{1}\]<p>Este tipo de equação tem aplicações importantes em vibrações mecânicas e elétricas.</p><p>Anteriormente, na <a href="/pt-BR/posts/Bernoulli-Equation/">Equação de Bernoulli</a>, encontramos a solução geral da equação logística, e de acordo com isso, a solução da EDO linear de primeira ordem com coeficiente constante $k$:</p>\[y^\prime + ky = 0\]<p>é a função exponencial $y = ce^{-kx}$. (No caso da equação (4) daquele artigo, com $A=-k$, $B=0$)</p><p>Portanto, para uma equação de forma semelhante ($\ref{eqn:ode_with_constant_coefficients}$), podemos tentar primeiro uma solução da forma:</p>\[y=e^{\lambda x}\label{eqn:general_sol}\tag{2}\]<blockquote class="prompt-info"><p>Claro, isso é apenas uma suposição, e não há garantia de que a solução geral realmente tenha essa forma. Mas se conseguirmos encontrar duas soluções linearmente independentes, como vimos em <a href="/pt-BR/posts/homogeneous-linear-odes-of-second-order/#base-e-solução-geral">EDOs Lineares Homogêneas de Segunda Ordem</a>, podemos obter a solução geral pelo <a href="/pt-BR/posts/homogeneous-linear-odes-of-second-order/#princípio-da-superposição">princípio da superposição</a>.<br /> Como veremos em breve, <a href="#ii-raiz-real-dupla-lambda---cfraca2">há casos em que precisamos encontrar soluções de outras formas</a>.</p></blockquote><p>Substituindo a equação ($\ref{eqn:general_sol}$) e suas derivadas:</p>\[y^\prime = \lambda e^{\lambda x}, \quad y^{\prime\prime} = \lambda^2 e^{\lambda x}\]<p>na equação ($\ref{eqn:ode_with_constant_coefficients}$), obtemos:</p>\[(\lambda^2 + a\lambda + b)e^{\lambda x} = 0\]<p>Portanto, se $\lambda$ for uma solução da <strong>equação característica</strong>:</p>\[\lambda^2 + a\lambda + b = 0 \label{eqn:characteristic_eqn}\tag{3}\]<p>então a função exponencial ($\ref{eqn:general_sol}$) é uma solução da EDO ($\ref{eqn:ode_with_constant_coefficients}$). Resolvendo a equação quadrática ($\ref{eqn:characteristic_eqn}$), temos:</p>\[\begin{align*} \lambda_1 &amp;= \frac{1}{2}\left(-a + \sqrt{a^2 - 4b}\right), \\ \lambda_2 &amp;= \frac{1}{2}\left(-a - \sqrt{a^2 - 4b}\right) \end{align*}\label{eqn:lambdas}\tag{4}\]<p>E a partir disso, as duas funções:</p>\[y_1 = e^{\lambda_1 x}, \quad y_2 = e^{\lambda_2 x} \tag{5}\]<p>são soluções da equação ($\ref{eqn:ode_with_constant_coefficients}$).</p><blockquote class="prompt-tip"><p>Os termos <strong>equação característica</strong> e <strong>equação auxiliar</strong> são frequentemente usados de forma intercambiável, e têm exatamente o mesmo significado. Qualquer um dos termos pode ser usado.</p></blockquote><p>Agora, podemos dividir em três casos de acordo com o sinal do discriminante $a^2 - 4b$ da equação característica ($\ref{eqn:characteristic_eqn}$):</p><ul><li>$a^2 - 4b &gt; 0$: Duas raízes reais distintas<li>$a^2 - 4b = 0$: Uma raiz real dupla<li>$a^2 - 4b &lt; 0$: Raízes complexas conjugadas</ul><h2 id="forma-da-solução-geral-de-acordo-com-o-sinal-do-discriminante-da-equação-característica">Forma da solução geral de acordo com o sinal do discriminante da equação característica</h2><h3 id="i-raízes-reais-distintas-lambda_1-e-lambda_2">I. Raízes reais distintas $\lambda_1$ e $\lambda_2$</h3><p>Neste caso, a base das soluções da equação ($\ref{eqn:ode_with_constant_coefficients}$) em qualquer intervalo é:</p>\[y_1 = e^{\lambda_1 x}, \quad y_2 = e^{\lambda_2 x}\]<p>E a solução geral correspondente é:</p>\[y = c_1 e^{\lambda_1 x} + c_2 e^{\lambda_2 x} \label{eqn:general_sol_1}\tag{6}\]<h3 id="ii-raiz-real-dupla-lambda---cfraca2">II. Raiz real dupla $\lambda = -\cfrac{a}{2}$</h3><p>Quando $a^2 - 4b = 0$, a equação quadrática ($\ref{eqn:characteristic_eqn}$) tem apenas uma solução $\lambda = \lambda_1 = \lambda_2 = -\cfrac{a}{2}$, e portanto, a única solução da forma $y = e^{\lambda x}$ que podemos obter é:</p>\[y_1 = e^{-(a/2)x}\]<p>Para obter uma base, precisamos encontrar uma segunda solução $y_2$ que seja independente de $y_1$.</p><p>Nessa situação, podemos usar o método de <a href="/pt-BR/posts/homogeneous-linear-odes-of-second-order/#redução-de-ordem">redução de ordem</a> que vimos anteriormente. Definindo a segunda solução como $y_2=uy_1$, temos:</p>\[\begin{align*} y_2 &amp;= uy_1, \\ y_2^{\prime} &amp;= u^{\prime}y_1 + uy_1^{\prime}, \\ y_2^{\prime\prime} &amp;= u^{\prime\prime}y_1 + 2u^{\prime}y_1^{\prime} + uy_1^{\prime\prime} \end{align*}\]<p>Substituindo na equação ($\ref{eqn:ode_with_constant_coefficients}$):</p>\[(u^{\prime\prime}y_1 + 2u^\prime y_1^\prime + uy_1^{\prime\prime}) + a(u^\prime y_1 + uy_1^\prime) + buy_1 = 0\]<p>Agrupando os termos com $u^{\prime\prime}$, $u^\prime$ e $u$:</p>\[y_1u^{\prime\prime} + (2y_1^\prime + ay_1)u^\prime + (y_1^{\prime\prime} + ay_1^\prime + by_1)u = 0\]<p>Como $y_1$ é uma solução da equação ($\ref{eqn:ode_with_constant_coefficients}$), o último termo entre parênteses é zero, e como:</p>\[2y_1^\prime = -ae^{-ax/2} = -ay_1\]<p>o primeiro termo entre parênteses também é zero. Portanto, resta apenas $u^{\prime\prime}y_1 = 0$, o que implica $u^{\prime\prime}=0$. Integrando duas vezes, obtemos $u = c_1x + c_2$, e como as constantes de integração $c_1$ e $c_2$ podem ser quaisquer valores, podemos simplesmente escolher $c_1=1$ e $c_2=0$, resultando em $u=x$. Então, $y_2 = uy_1 = xy_1$, e como $y_1$ e $y_2$ são linearmente independentes, eles formam uma base. Portanto, quando a equação característica ($\ref{eqn:characteristic_eqn}$) tem uma raiz dupla, a base das soluções da equação ($\ref{eqn:ode_with_constant_coefficients}$) em qualquer intervalo é:</p>\[e^{-ax/2}, \quad xe^{-ax/2}\]<p>E a solução geral correspondente é:</p>\[y = (c_1 + c_2x)e^{-ax/2} \label{eqn:general_sol_2}\tag{7}\]<h3 id="iii-raízes-complexas-conjugadas--cfrac12a--iomega-e--cfrac12a---iomega">III. Raízes complexas conjugadas $-\cfrac{1}{2}a + i\omega$ e $-\cfrac{1}{2}a - i\omega$</h3><p>Neste caso, $a^2 - 4b &lt; 0$ e $\sqrt{-1} = i$, então da equação ($\ref{eqn:lambdas}$):</p>\[\cfrac{1}{2}\sqrt{a^2 - 4b} = \cfrac{1}{2}\sqrt{-(4b - a^2)} = \sqrt{-(b-\frac{1}{4}a^2)} = i\sqrt{b - \frac{1}{4}a^2}\]<p>Definindo o número real $\sqrt{b-\cfrac{1}{4}a^2} = \omega$.</p><p>Com $\omega$ definido dessa forma, as soluções da equação característica ($\ref{eqn:characteristic_eqn}$) são as raízes complexas conjugadas $\lambda = -\cfrac{1}{2}a \pm i\omega$, e as duas soluções complexas correspondentes da equação ($\ref{eqn:ode_with_constant_coefficients}$) são:</p>\[\begin{align*} e^{\lambda_1 x} &amp;= e^{-(a/2)x + i\omega x}, \\ e^{\lambda_2 x} &amp;= e^{-(a/2)x - i\omega x} \end{align*}\]<p>No entanto, mesmo neste caso, podemos obter uma base de soluções reais da seguinte forma.</p><p>Usando a fórmula de Euler:</p>\[e^{it} = \cos t + i\sin t \label{eqn:euler_formula}\tag{8}\]<p>E substituindo $t$ por $-t$ na fórmula acima:</p>\[e^{-it} = \cos t - i\sin t\]<p>Somando e subtraindo essas duas equações, obtemos:</p>\[\begin{align*} \cos t &amp;= \frac{1}{2}(e^{it} + e^{-it}), \\ \sin t &amp;= \frac{1}{2i}(e^{it} - e^{-it}). \end{align*} \label{eqn:cos_and_sin}\tag{9}\]<p>A função exponencial complexa $e^z$ para uma variável complexa $z = r + it$ com parte real $r$ e parte imaginária $it$ pode ser definida usando as funções reais $e^r$, $\cos t$ e $\sin t$ da seguinte forma:</p>\[e^z = e^{r + it} = e^r e^{it} = e^r(\cos t + i\sin t) \label{eqn:complex_exp}\tag{10}\]<p>Fazendo $r=-\cfrac{1}{2}ax$ e $t=\omega x$, podemos escrever:</p>\[\begin{align*} e^{\lambda_1 x} &amp;= e^{-(a/2)x + i\omega x} = e^{-(a/2)x}(\cos{\omega x} + i\sin{\omega x}) \\ e^{\lambda_2 x} &amp;= e^{-(a/2)x - i\omega x} = e^{-(a/2)x}(\cos{\omega x} - i\sin{\omega x}) \end{align*}\]<p>Pelo <a href="/pt-BR/posts/homogeneous-linear-odes-of-second-order/#princípio-da-superposição">princípio da superposição</a>, a soma e o produto por constantes dessas soluções complexas também são soluções. Portanto, somando as duas equações e multiplicando ambos os lados por $\cfrac{1}{2}$, obtemos a primeira solução real $y_1$:</p>\[y_1 = e^{-(a/2)x} \cos{\omega x}. \label{eqn:basis_1}\tag{11}\]<p>Da mesma forma, subtraindo a segunda equação da primeira e multiplicando ambos os lados por $\cfrac{1}{2i}$, obtemos a segunda solução real $y_2$:</p>\[y_2 = e^{-(a/2)x} \sin{\omega x}. \label{eqn:basis_2}\tag{12}\]<p>Como $\cfrac{y_1}{y_2} = \cot{\omega x}$ não é constante, $y_1$ e $y_2$ são linearmente independentes em todos os intervalos e, portanto, formam uma base para as soluções reais da equação ($\ref{eqn:ode_with_constant_coefficients}$). A partir disso, obtemos a solução geral:</p>\[y = e^{-ax/2}(A\cos{\omega x} + B\sin{\omega x}) \quad \text{(onde }A,\, B\text{ são constantes arbitrárias)} \label{eqn:general_sol_3}\tag{13}\] ]]> </content> </entry> <entry><title xml:lang="pt-BR">Como implementar suporte multilíngue em blog Jekyll com Polyglot (3) - Solução de problemas de falha de compilação e erros na função de busca do tema Chirpy</title><link href="https://www.yunseo.kim/pt-BR/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/" rel="alternate" type="text/html" hreflang="cs" /><published>2025-02-05T00:00:00+09:00</published> <updated>2025-10-08T00:53:56+09:00</updated> <id>https://www.yunseo.kim/pt-BR/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-3/</id> <author> <name>Yunseo Kim</name> </author> <category term="Dev" /> <category term="Web Dev" /> <summary xml:lang="pt-BR">Apresenta o processo de implementação de suporte multilíngue aplicando o plugin Polyglot em um blog Jekyll baseado no tema &apos;jekyll-theme-chirpy&apos;. Este post é o terceiro da série e aborda a identificação e resolução de erros que ocorrem ao aplicar o Polyglot ao tema Chirpy.</summary> <content type="html" xml:lang="pt-BR"> <![CDATA[<p>Apresenta o processo de implementação de suporte multilíngue aplicando o plugin Polyglot em um blog Jekyll baseado no tema 'jekyll-theme-chirpy'. Este post é o terceiro da série e aborda a identificação e resolução de erros que ocorrem ao aplicar o Polyglot ao tema Chirpy.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="visão-geral">Visão geral</h2><p>No início de julho de 12024, implementei suporte multilíngue neste blog hospedado no Github Pages baseado em Jekyll aplicando o plugin <a href="https://github.com/untra/polyglot">Polyglot</a>. Esta série compartilha os bugs que ocorreram durante o processo de aplicação do plugin Polyglot ao tema Chirpy e seus processos de resolução, além de como escrever cabeçalhos html e sitemap.xml considerando SEO. A série consiste em 3 posts, e este é o terceiro da série.</p><ul><li>Parte 1: <a href="/pt-BR/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-1">Aplicação do plugin Polyglot &amp; modificação de cabeçalho html e sitemap</a><li>Parte 2: <a href="/pt-BR/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-2">Implementação de botão de seleção de idioma &amp; localização de layout</a><li>Parte 3: Solução de problemas de falha de build do tema Chirpy e erro na função de busca (este post)</ul><blockquote class="prompt-info"><p>Originalmente foi composta por 2 partes, mas posteriormente foi reorganizada em 3 partes devido ao aumento significativo do conteúdo após várias expansões.</p></blockquote><h2 id="requisitos">Requisitos</h2><ul class="task-list"><li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Deve ser possível fornecer o resultado do build (páginas web) separado por caminhos de idioma (ex. <code class="language-plaintext filepath highlighter-rouge">/posts/ko/</code>, <code class="language-plaintext filepath highlighter-rouge">/posts/ja/</code>).<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Para minimizar o tempo e esforço adicionais necessários para suporte multilíngue, deve ser possível reconhecer automaticamente o idioma durante o build com base no caminho local onde o arquivo está localizado (ex. <code class="language-plaintext filepath highlighter-rouge">/_posts/ko/</code>, <code class="language-plaintext filepath highlighter-rouge">/_posts/ja/</code>) sem especificar manualmente as tags ‘lang’ e ‘permalink’ no YAML front matter do arquivo markdown original.<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />A seção de cabeçalho de cada página do site deve incluir tags meta Content-Language apropriadas, tags alternativas hreflang e links canônicos para atender às diretrizes de SEO do Google para busca multilíngue.<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Deve ser possível fornecer links de páginas para cada versão de idioma no site sem omissões através do <code class="language-plaintext filepath highlighter-rouge">sitemap.xml</code>, e o próprio <code class="language-plaintext filepath highlighter-rouge">sitemap.xml</code> deve existir apenas um no caminho raiz sem duplicação.<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Todas as funcionalidades fornecidas pelo <a href="https://github.com/cotes2020/jekyll-theme-chirpy">tema Chirpy</a> devem funcionar normalmente em cada página de idioma, caso contrário, devem ser corrigidas para funcionar normalmente.<ul class="task-list"><li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Funcionamento normal das funcionalidades ‘Recently Updated’ e ‘Trending Tags’<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Não deve ocorrer erros durante o processo de build usando GitHub Actions<li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Funcionamento normal da função de busca de posts no canto superior direito do blog</ul></ul><h2 id="antes-de-começar">Antes de começar</h2><p>Este post é uma continuação da <a href="/pt-BR/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-1">Parte 1</a> e <a href="/pt-BR/posts/how-to-support-multi-language-on-jekyll-blog-with-polyglot-2">Parte 2</a>, então recomendo ler os posts anteriores primeiro, caso ainda não os tenha lido.</p><h2 id="solução-de-problemas-relative_url_regex-target-of-repeat-operator-is-not-specified">Solução de problemas (‘relative_url_regex’: target of repeat operator is not specified)</h2><p>(+ 12025.10.08. Atualização) <a href="https://polyglot.untra.io/2025/09/20/polyglot.1.11.0/">Este bug foi corrigido na versão 1.11 do Polyglot</a>.</p><p>Após concluir as etapas anteriores, ao executar o comando <code class="language-plaintext highlighter-rouge">bundle exec jekyll serve</code> para testar a compilação, ocorreu um erro <code class="language-plaintext highlighter-rouge">'relative_url_regex': target of repeat operator is not specified</code> e a compilação falhou.</p><div class="language-shell highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre><td class="rouge-code"><pre>...<span class="o">(</span>omitido<span class="o">)</span>
                    <span class="nt">------------------------------------------------</span>
      Jekyll 4.3.4   Please append <span class="sb">`</span><span class="nt">--trace</span><span class="sb">`</span> to the <span class="sb">`</span>serve<span class="sb">`</span> <span class="nb">command 
                     </span><span class="k">for </span>any additional information or backtrace. 
                    <span class="nt">------------------------------------------------</span>
/Users/yunseo/.gem/ruby/3.2.2/gems/jekyll-polyglot-1.8.1/lib/jekyll/polyglot/
patches/jekyll/site.rb:234:in <span class="sb">`</span>relative_url_regex<span class="s1">': target of repeat operator 
is not specified: /href="?\/((?:(?!*.gem)(?!*.gemspec)(?!tools)(?!README.md)(
?!LICENSE)(?!*.config.js)(?!rollup.config.js)(?!package*.json)(?!.sass-cache)
(?!.jekyll-cache)(?!gemfiles)(?!Gemfile)(?!Gemfile.lock)(?!node_modules)(?!ve
ndor\/bundle\/)(?!vendor\/cache\/)(?!vendor\/gems\/)(?!vendor\/ruby\/)(?!en\/
)(?!ko\/)(?!es\/)(?!pt-BR\/)(?!ja\/)(?!fr\/)(?!de\/)[^,'</span><span class="s2">"</span><span class="se">\s\/</span><span class="s2">?.]+</span><span class="se">\.</span><span class="s2">?)*(?:</span><span class="se">\/</span><span class="s2">[^
</span><span class="se">\]\[</span><span class="s2">)("</span><span class="s1">'\s]*)?)"/ (RegexpError)

...(omitido)
</span></pre></div></div><p>Após pesquisar se problemas semelhantes já haviam sido relatados, encontrei <a href="https://github.com/untra/polyglot/issues/204">exatamente o mesmo problema</a> registrado no repositório do Polyglot, junto com uma solução.</p><p>No arquivo <a href="https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/_config.yml"><code class="language-plaintext filepath highlighter-rouge">_config.yml</code></a> do tema Chirpy que estou usando neste blog, existe a seguinte configuração:</p><div file="\_config.yml" class="language-yml highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
</pre><td class="rouge-code"><pre><span class="na">exclude</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="s2">"</span><span class="s">*.gem"</span>
  <span class="pi">-</span> <span class="s2">"</span><span class="s">*.gemspec"</span>
  <span class="pi">-</span> <span class="s">docs</span>
  <span class="pi">-</span> <span class="s">tools</span>
  <span class="pi">-</span> <span class="s">README.md</span>
  <span class="pi">-</span> <span class="s">LICENSE</span>
  <span class="pi">-</span> <span class="s2">"</span><span class="s">*.config.js"</span>
  <span class="pi">-</span> <span class="s">package*.json</span>
</pre></div></div><p>A causa do problema está nas expressões regulares das seguintes funções no arquivo <a href="https://github.com/untra/polyglot/blob/master/lib/jekyll/polyglot/patches/jekyll/site.rb"><code class="language-plaintext filepath highlighter-rouge">site.rb</code></a> do Polyglot, que não conseguem processar corretamente padrões de globbing como <code class="language-plaintext highlighter-rouge">"*.gem"</code>, <code class="language-plaintext highlighter-rouge">"*.gemspec"</code> e <code class="language-plaintext highlighter-rouge">"*.config.js"</code>:</p><div file="(polyglot root path)/lib/jekyll/polyglot/patches/jekyll/site.rb" class="language-ruby highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
</pre><td class="rouge-code"><pre>    <span class="c1"># a regex that matches relative urls in a html document</span>
    <span class="c1"># matches href="baseurl/foo/bar-baz" href="/pt-BR/foo/bar-baz" and others like it</span>
    <span class="c1"># avoids matching excluded files.  prepare makes sure</span>
    <span class="c1"># that all @exclude dirs have a trailing slash.</span>
    <span class="k">def</span> <span class="nf">relative_url_regex</span><span class="p">(</span><span class="n">disabled</span> <span class="o">=</span> <span class="kp">false</span><span class="p">)</span>
      <span class="n">regex</span> <span class="o">=</span> <span class="s1">''</span>
      <span class="k">unless</span> <span class="n">disabled</span>
        <span class="vi">@exclude</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
          <span class="n">regex</span> <span class="o">+=</span> <span class="s2">"(?!</span><span class="si">#{</span><span class="n">x</span><span class="si">}</span><span class="s2">)"</span>
        <span class="k">end</span>
        <span class="vi">@languages</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
          <span class="n">regex</span> <span class="o">+=</span> <span class="s2">"(?!</span><span class="si">#{</span><span class="n">x</span><span class="si">}</span><span class="se">\/</span><span class="s2">)"</span>
        <span class="k">end</span>
      <span class="k">end</span>
      <span class="n">start</span> <span class="o">=</span> <span class="n">disabled</span> <span class="p">?</span> <span class="s1">'ferh'</span> <span class="p">:</span> <span class="s1">'href'</span>
      <span class="sr">%r{</span><span class="si">#{</span><span class="n">start</span><span class="si">}</span><span class="sr">="?</span><span class="si">#{</span><span class="vi">@baseurl</span><span class="si">}</span><span class="sr">/((?:</span><span class="si">#{</span><span class="n">regex</span><span class="si">}</span><span class="sr">[^,'"</span><span class="se">\s</span><span class="sr">/?.]+</span><span class="se">\.</span><span class="sr">?)*(?:/[^</span><span class="se">\]\[</span><span class="sr">)("'</span><span class="se">\s</span><span class="sr">]*)?)"}</span>
    <span class="k">end</span>

    <span class="c1"># a regex that matches absolute urls in a html document</span>
    <span class="c1"># matches href="http://baseurl/foo/bar-baz" and others like it</span>
    <span class="c1"># avoids matching excluded files.  prepare makes sure</span>
    <span class="c1"># that all @exclude dirs have a trailing slash.</span>
    <span class="k">def</span> <span class="nf">absolute_url_regex</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">disabled</span> <span class="o">=</span> <span class="kp">false</span><span class="p">)</span>
      <span class="n">regex</span> <span class="o">=</span> <span class="s1">''</span>
      <span class="k">unless</span> <span class="n">disabled</span>
        <span class="vi">@exclude</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
          <span class="n">regex</span> <span class="o">+=</span> <span class="s2">"(?!</span><span class="si">#{</span><span class="n">x</span><span class="si">}</span><span class="s2">)"</span>
        <span class="k">end</span>
        <span class="vi">@languages</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
          <span class="n">regex</span> <span class="o">+=</span> <span class="s2">"(?!</span><span class="si">#{</span><span class="n">x</span><span class="si">}</span><span class="se">\/</span><span class="s2">)"</span>
        <span class="k">end</span>
      <span class="k">end</span>
      <span class="n">start</span> <span class="o">=</span> <span class="n">disabled</span> <span class="p">?</span> <span class="s1">'ferh'</span> <span class="p">:</span> <span class="s1">'href'</span>
      <span class="sr">%r{(?&lt;!hreflang="</span><span class="si">#{</span><span class="vi">@default_lang</span><span class="si">}</span><span class="sr">" )</span><span class="si">#{</span><span class="n">start</span><span class="si">}</span><span class="sr">="?</span><span class="si">#{</span><span class="n">url</span><span class="si">}#{</span><span class="vi">@baseurl</span><span class="si">}</span><span class="sr">/((?:</span><span class="si">#{</span><span class="n">regex</span><span class="si">}</span><span class="sr">[^,'"</span><span class="se">\s</span><span class="sr">/?.]+</span><span class="se">\.</span><span class="sr">?)*(?:/[^</span><span class="se">\]\[</span><span class="sr">)("'</span><span class="se">\s</span><span class="sr">]*)?)"}</span>
    <span class="k">end</span>
</pre></div></div><p>Existem duas maneiras de resolver este problema:</p><h3 id="1-fazer-um-fork-do-polyglot-e-modificar-as-partes-problemáticas">1. Fazer um fork do Polyglot e modificar as partes problemáticas</h3><p>No momento da escrita deste post (11.12024), a <a href="https://jekyllrb.com/docs/configuration/options/#global-configuration">documentação oficial do Jekyll</a> indica que a configuração <code class="language-plaintext highlighter-rouge">exclude</code> suporta padrões de globbing para correspondência de arquivos.</p><blockquote><p>“This configuration option supports Ruby’s File.fnmatch filename globbing patterns to match multiple entries to exclude.”</p></blockquote><p>Ou seja, a causa do problema não está no tema Chirpy, mas nas funções <code class="language-plaintext highlighter-rouge">relative_url_regex()</code> e <code class="language-plaintext highlighter-rouge">absolute_url_regex()</code> do Polyglot, então a solução fundamental é modificá-las para evitar o problema.</p><p><del>Como o bug ainda não havia sido corrigido no Polyglot,</del> como mencionado acima, <a href="https://polyglot.untra.io/2025/09/20/polyglot.1.11.0/">a partir da versão 1.11 do Polyglot este problema foi corrigido</a>. Na época em que o problema ocorria, era possível resolvê-lo ao fazer um fork do repositório do Polyglot e modificar as partes problemáticas conforme sugerido <del>neste <a href="https://hionpu.com/posts/github_blog_4#4-polyglot-%EC%9D%98%EC%A1%B4%EC%84%B1-%EB%AC%B8%EC%A0%9C">post de blog</a>(site removido) e</del> na <a href="https://github.com/untra/polyglot/issues/204#issuecomment-2143270322">resposta ao problema no GitHub</a>, passando a usar a versão modificada no lugar do Polyglot original.</p><div file="(polyglot root path)/lib/jekyll/polyglot/patches/jekyll/site.rb" class="language-ruby highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
</pre><td class="rouge-code"><pre>    <span class="k">def</span> <span class="nf">relative_url_regex</span><span class="p">(</span><span class="n">disabled</span> <span class="o">=</span> <span class="kp">false</span><span class="p">)</span>
      <span class="n">regex</span> <span class="o">=</span> <span class="s1">''</span>
      <span class="k">unless</span> <span class="n">disabled</span>
        <span class="vi">@exclude</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
          <span class="n">escaped_x</span> <span class="o">=</span> <span class="no">Regexp</span><span class="p">.</span><span class="nf">escape</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
          <span class="n">regex</span> <span class="o">+=</span> <span class="s2">"(?!</span><span class="si">#{</span><span class="n">escaped_x</span><span class="si">}</span><span class="s2">)"</span>
        <span class="k">end</span>
        <span class="vi">@languages</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
          <span class="n">escaped_x</span> <span class="o">=</span> <span class="no">Regexp</span><span class="p">.</span><span class="nf">escape</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
          <span class="n">regex</span> <span class="o">+=</span> <span class="s2">"(?!</span><span class="si">#{</span><span class="n">escaped_x</span><span class="si">}</span><span class="se">\/</span><span class="s2">)"</span>
        <span class="k">end</span>
      <span class="k">end</span>
      <span class="n">start</span> <span class="o">=</span> <span class="n">disabled</span> <span class="p">?</span> <span class="s1">'ferh'</span> <span class="p">:</span> <span class="s1">'href'</span>
      <span class="sr">%r{</span><span class="si">#{</span><span class="n">start</span><span class="si">}</span><span class="sr">="?</span><span class="si">#{</span><span class="vi">@baseurl</span><span class="si">}</span><span class="sr">/((?:</span><span class="si">#{</span><span class="n">regex</span><span class="si">}</span><span class="sr">[^,'"</span><span class="se">\s</span><span class="sr">/?.]+</span><span class="se">\.</span><span class="sr">?)*(?:/[^</span><span class="se">\]\[</span><span class="sr">)("'</span><span class="se">\s</span><span class="sr">]*)?)"}</span>
    <span class="k">end</span>

    <span class="k">def</span> <span class="nf">absolute_url_regex</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">disabled</span> <span class="o">=</span> <span class="kp">false</span><span class="p">)</span>
      <span class="n">regex</span> <span class="o">=</span> <span class="s1">''</span>
      <span class="k">unless</span> <span class="n">disabled</span>
        <span class="vi">@exclude</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
          <span class="n">escaped_x</span> <span class="o">=</span> <span class="no">Regexp</span><span class="p">.</span><span class="nf">escape</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
          <span class="n">regex</span> <span class="o">+=</span> <span class="s2">"(?!</span><span class="si">#{</span><span class="n">escaped_x</span><span class="si">}</span><span class="s2">)"</span>
        <span class="k">end</span>
        <span class="vi">@languages</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
          <span class="n">escaped_x</span> <span class="o">=</span> <span class="no">Regexp</span><span class="p">.</span><span class="nf">escape</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
          <span class="n">regex</span> <span class="o">+=</span> <span class="s2">"(?!</span><span class="si">#{</span><span class="n">escaped_x</span><span class="si">}</span><span class="se">\/</span><span class="s2">)"</span>
        <span class="k">end</span>
      <span class="k">end</span>
      <span class="n">start</span> <span class="o">=</span> <span class="n">disabled</span> <span class="p">?</span> <span class="s1">'ferh'</span> <span class="p">:</span> <span class="s1">'href'</span>
      <span class="sr">%r{(?&lt;!hreflang="</span><span class="si">#{</span><span class="vi">@default_lang</span><span class="si">}</span><span class="sr">" )</span><span class="si">#{</span><span class="n">start</span><span class="si">}</span><span class="sr">="?</span><span class="si">#{</span><span class="n">url</span><span class="si">}#{</span><span class="vi">@baseurl</span><span class="si">}</span><span class="sr">/((?:</span><span class="si">#{</span><span class="n">regex</span><span class="si">}</span><span class="sr">[^,'"</span><span class="se">\s</span><span class="sr">/?.]+</span><span class="se">\.</span><span class="sr">?)*(?:/[^</span><span class="se">\]\[</span><span class="sr">)("'</span><span class="se">\s</span><span class="sr">]*)?)"}</span>
    <span class="k">end</span>
</pre></div></div><h3 id="2-substituir-os-padrões-de-globbing-por-nomes-de-arquivos-exatos-no-arquivo-_configyml-do-tema-chirpy">2. Substituir os padrões de globbing por nomes de arquivos exatos no arquivo ‘_config.yml’ do tema Chirpy</h3><p>A solução ideal seria que o patch acima fosse incorporado ao mainstream do Polyglot. No entanto, até que isso aconteça, seria necessário usar a versão com fork, o que pode ser inconveniente para acompanhar as atualizações do Polyglot. Por isso, optei por uma abordagem diferente.</p><p>Verificando os arquivos na raiz do <a href="https://github.com/cotes2020/jekyll-theme-chirpy">repositório do tema Chirpy</a> que correspondem aos padrões <code class="language-plaintext highlighter-rouge">"*.gem"</code>, <code class="language-plaintext highlighter-rouge">"*.gemspec"</code> e <code class="language-plaintext highlighter-rouge">"*.config.js"</code>, encontrei apenas estes 3:</p><ul><li><code class="language-plaintext filepath highlighter-rouge">jekyll-theme-chirpy.gemspec</code><li><code class="language-plaintext filepath highlighter-rouge">purgecss.config.js</code><li><code class="language-plaintext filepath highlighter-rouge">rollup.config.js</code></ul><p>Portanto, podemos modificar a seção <code class="language-plaintext highlighter-rouge">exclude</code> no arquivo <code class="language-plaintext filepath highlighter-rouge">_config.yml</code>, removendo os padrões de globbing e substituindo-os pelos nomes exatos dos arquivos:</p><div file="\_config.yml" class="language-yml highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
</pre><td class="rouge-code"><pre><span class="na">exclude</span><span class="pi">:</span> <span class="c1"># Modificado com base na issue https://github.com/untra/polyglot/issues/204</span>
  <span class="c1"># - "*.gem"</span>
  <span class="pi">-</span> <span class="s">jekyll-theme-chirpy.gemspec</span> <span class="c1"># - "*.gemspec"</span>
  <span class="pi">-</span> <span class="s">tools</span>
  <span class="pi">-</span> <span class="s">README.md</span>
  <span class="pi">-</span> <span class="s">LICENSE</span>
  <span class="pi">-</span> <span class="s">purgecss.config.js</span> <span class="c1"># - "*.config.js"</span>
  <span class="pi">-</span> <span class="s">rollup.config.js</span>
  <span class="pi">-</span> <span class="s">package*.json</span>
</pre></div></div><h2 id="modificação-da-função-de-busca">Modificação da função de busca</h2><p>Após concluir as etapas anteriores, quase todas as funcionalidades do site funcionavam conforme o esperado. No entanto, descobri tardiamente que a barra de busca localizada no canto superior direito das páginas com o tema Chirpy não indexava páginas em idiomas diferentes do <code class="language-plaintext highlighter-rouge">site.default_lang</code> (inglês, no caso deste blog) e, ao realizar buscas em páginas de outros idiomas, exibia apenas links de páginas em inglês.</p><p>Para entender a causa, vamos examinar quais arquivos estão envolvidos na funcionalidade de busca e onde o problema ocorre.</p><h3 id="_layoutsdefaulthtml">‘_layouts/default.html’</h3><p>Verificando o arquivo <a href="https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/_layouts/default.html"><code class="language-plaintext filepath highlighter-rouge">_layouts/default.html</code></a>, que define a estrutura de todas as páginas do blog, podemos ver que ele carrega os conteúdos de <code class="language-plaintext filepath highlighter-rouge">search-results.html</code> e <code class="language-plaintext filepath highlighter-rouge">search-loader.html</code> dentro do elemento <code class="language-plaintext highlighter-rouge">&lt;body&gt;</code>:</p><div file="\_layouts/default.html" class="language-liquid highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre><td class="rouge-code"><pre>  &lt;body&gt;
    <span class="cp">{%</span><span class="w"> </span><span class="nt">include</span><span class="w"> </span>sidebar.html<span class="w"> </span><span class="na">lang</span><span class="o">=</span><span class="nv">lang</span><span class="w"> </span><span class="cp">%}</span>

    &lt;div id="main-wrapper" class="d-flex justify-content-center"&gt;
      &lt;div class="container d-flex flex-column px-xxl-5"&gt;
        
        (...omitido...)

        <span class="cp">{%</span><span class="w"> </span><span class="nt">include_cached</span><span class="w"> </span><span class="nv">search-results</span><span class="p">.</span><span class="nv">html</span><span class="w"> </span><span class="na">lang</span><span class="o">=</span><span class="nv">lang</span><span class="w"> </span><span class="cp">%}</span>
      &lt;/div&gt;

      &lt;aside aria-label="Scroll to Top"&gt;
        &lt;button id="back-to-top" type="button" class="btn btn-lg btn-box-shadow"&gt;
          &lt;i class="fas fa-angle-up"&gt;&lt;/i&gt;
        &lt;/button&gt;
      &lt;/aside&gt;
    &lt;/div&gt;

    (...omitido...)

    <span class="cp">{%</span><span class="w"> </span><span class="nt">include_cached</span><span class="w"> </span><span class="nv">search-loader</span><span class="p">.</span><span class="nv">html</span><span class="w"> </span><span class="na">lang</span><span class="o">=</span><span class="nv">lang</span><span class="w"> </span><span class="cp">%}</span>
  &lt;/body&gt;
</pre></div></div><h3 id="_includessearch-resulthtml">‘_includes/search-result.html’</h3><p>O arquivo <a href="https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/_includes/search-results.html"><code class="language-plaintext filepath highlighter-rouge">_includes/search-result.html</code></a> cria o container <code class="language-plaintext highlighter-rouge">search-results</code> para armazenar os resultados da busca quando uma palavra-chave é inserida:</p><div file="\_includes/search-result.html" class="language-html highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
</pre><td class="rouge-code"><pre><span class="c">&lt;!-- The Search results --&gt;</span>

<span class="nt">&lt;div</span> <span class="na">id=</span><span class="s">"search-result-wrapper"</span> <span class="na">class=</span><span class="s">"d-flex justify-content-center d-none"</span><span class="nt">&gt;</span>
  <span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">"col-11 content"</span><span class="nt">&gt;</span>
    <span class="nt">&lt;div</span> <span class="na">id=</span><span class="s">"search-hints"</span><span class="nt">&gt;</span>
      {% include_cached trending-tags.html %}
    <span class="nt">&lt;/div&gt;</span>
    <span class="nt">&lt;div</span> <span class="na">id=</span><span class="s">"search-results"</span> <span class="na">class=</span><span class="s">"d-flex flex-wrap justify-content-center text-muted mt-3"</span><span class="nt">&gt;&lt;/div&gt;</span>
  <span class="nt">&lt;/div&gt;</span>
<span class="nt">&lt;/div&gt;</span>
</pre></div></div><h3 id="_includessearch-loaderhtml">‘_includes/search-loader.html’</h3><p>O arquivo <a href="https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/_includes/search-loader.html"><code class="language-plaintext filepath highlighter-rouge">_includes/search-loader.html</code></a> é a parte central que implementa a busca baseada na biblioteca <a href="https://github.com/christian-fei/Simple-Jekyll-Search">Simple-Jekyll-Search</a>. Ele executa JavaScript no navegador do visitante para encontrar correspondências entre a palavra-chave inserida e o conteúdo do arquivo de índice <a href="#assetsjsdatasearchjson"><code class="language-plaintext filepath highlighter-rouge">search.json</code></a>, retornando links para os posts correspondentes como elementos <code class="language-plaintext highlighter-rouge">&lt;article&gt;</code>:</p><div file="\_includes/search-loader.html" class="language-js highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
</pre><td class="rouge-code"><pre><span class="p">{</span><span class="o">%</span> <span class="nx">capture</span> <span class="nx">result_elem</span> <span class="o">%</span><span class="p">}</span>
  <span class="o">&lt;</span><span class="nx">article</span> <span class="kd">class</span><span class="o">=</span><span class="dl">"</span><span class="s2">px-1 px-sm-2 px-lg-4 px-xl-0</span><span class="dl">"</span><span class="o">&gt;</span>
    <span class="o">&lt;</span><span class="nx">header</span><span class="o">&gt;</span>
      <span class="o">&lt;</span><span class="nx">h2</span><span class="o">&gt;&lt;</span><span class="nx">a</span> <span class="nx">href</span><span class="o">=</span><span class="dl">"</span><span class="s2">{url}</span><span class="dl">"</span><span class="o">&gt;</span><span class="p">{</span><span class="nx">title</span><span class="p">}</span><span class="o">&lt;</span><span class="sr">/a&gt;&lt;/</span><span class="nx">h2</span><span class="o">&gt;</span>
      <span class="o">&lt;</span><span class="nx">div</span> <span class="kd">class</span><span class="o">=</span><span class="dl">"</span><span class="s2">post-meta d-flex flex-column flex-sm-row text-muted mt-1 mb-1</span><span class="dl">"</span><span class="o">&gt;</span>
        <span class="p">{</span><span class="nx">categories</span><span class="p">}</span>
        <span class="p">{</span><span class="nx">tags</span><span class="p">}</span>
      <span class="o">&lt;</span><span class="sr">/div</span><span class="err">&gt;
</span>    <span class="o">&lt;</span><span class="sr">/header</span><span class="err">&gt;
</span>    <span class="o">&lt;</span><span class="nx">p</span><span class="o">&gt;</span><span class="p">{</span><span class="nx">snippet</span><span class="p">}</span><span class="o">&lt;</span><span class="sr">/p</span><span class="err">&gt;
</span>  <span class="o">&lt;</span><span class="sr">/article</span><span class="err">&gt;
</span><span class="p">{</span><span class="o">%</span> <span class="nx">endcapture</span> <span class="o">%</span><span class="p">}</span>

<span class="p">{</span><span class="o">%</span> <span class="nx">capture</span> <span class="nx">not_found</span> <span class="o">%</span><span class="p">}</span><span class="o">&lt;</span><span class="nx">p</span> <span class="kd">class</span><span class="o">=</span><span class="dl">"</span><span class="s2">mt-5</span><span class="dl">"</span><span class="o">&gt;</span><span class="p">{{</span> <span class="nx">site</span><span class="p">.</span><span class="nx">data</span><span class="p">.</span><span class="nx">locales</span><span class="p">[</span><span class="nx">include</span><span class="p">.</span><span class="nx">lang</span><span class="p">].</span><span class="nx">search</span><span class="p">.</span><span class="nx">no_results</span> <span class="p">}}</span><span class="o">&lt;</span><span class="sr">/p&gt;{% endcapture %</span><span class="err">}
</span>
<span class="o">&lt;</span><span class="nx">script</span><span class="o">&gt;</span>
  <span class="p">{</span><span class="o">%</span> <span class="nx">comment</span> <span class="o">%</span><span class="p">}</span> <span class="nl">Note</span><span class="p">:</span> <span class="nx">dependent</span> <span class="nx">library</span> <span class="nx">will</span> <span class="nx">be</span> <span class="nx">loaded</span> <span class="k">in</span> <span class="s2">`js-selector.html`</span> <span class="p">{</span><span class="o">%</span> <span class="nx">endcomment</span> <span class="o">%</span><span class="p">}</span>
  <span class="nb">document</span><span class="p">.</span><span class="nf">addEventListener</span><span class="p">(</span><span class="dl">'</span><span class="s1">DOMContentLoaded</span><span class="dl">'</span><span class="p">,</span> <span class="p">()</span> <span class="o">=&gt;</span> <span class="p">{</span>
    <span class="nc">SimpleJekyllSearch</span><span class="p">({</span>
      <span class="na">searchInput</span><span class="p">:</span> <span class="nb">document</span><span class="p">.</span><span class="nf">getElementById</span><span class="p">(</span><span class="dl">'</span><span class="s1">search-input</span><span class="dl">'</span><span class="p">),</span>
      <span class="na">resultsContainer</span><span class="p">:</span> <span class="nb">document</span><span class="p">.</span><span class="nf">getElementById</span><span class="p">(</span><span class="dl">'</span><span class="s1">search-results</span><span class="dl">'</span><span class="p">),</span>
      <span class="na">json</span><span class="p">:</span> <span class="dl">'</span><span class="s1">{{ </span><span class="dl">'</span><span class="o">/</span><span class="nx">assets</span><span class="o">/</span><span class="nx">js</span><span class="o">/</span><span class="nx">data</span><span class="o">/</span><span class="nx">search</span><span class="p">.</span><span class="nx">json</span><span class="dl">'</span><span class="s1"> | relative_url }}</span><span class="dl">'</span><span class="p">,</span>
      <span class="na">searchResultTemplate</span><span class="p">:</span> <span class="dl">'</span><span class="s1">{{ result_elem | strip_newlines }}</span><span class="dl">'</span><span class="p">,</span>
      <span class="na">noResultsText</span><span class="p">:</span> <span class="dl">'</span><span class="s1">{{ not_found }}</span><span class="dl">'</span><span class="p">,</span>
      <span class="na">templateMiddleware</span><span class="p">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">prop</span><span class="p">,</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">template</span><span class="p">)</span> <span class="p">{</span>
        <span class="k">if </span><span class="p">(</span><span class="nx">prop</span> <span class="o">===</span> <span class="dl">'</span><span class="s1">categories</span><span class="dl">'</span><span class="p">)</span> <span class="p">{</span>
          <span class="k">if </span><span class="p">(</span><span class="nx">value</span> <span class="o">===</span> <span class="dl">''</span><span class="p">)</span> <span class="p">{</span>
            <span class="k">return</span> <span class="s2">`</span><span class="p">${</span><span class="nx">value</span><span class="p">}</span><span class="s2">`</span><span class="p">;</span>
          <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
            <span class="k">return</span> <span class="s2">`&lt;div class="me-sm-4"&gt;&lt;i class="far fa-folder fa-fw"&gt;&lt;/i&gt;</span><span class="p">${</span><span class="nx">value</span><span class="p">}</span><span class="s2">&lt;/div&gt;`</span><span class="p">;</span>
          <span class="p">}</span>
        <span class="p">}</span>

        <span class="k">if </span><span class="p">(</span><span class="nx">prop</span> <span class="o">===</span> <span class="dl">'</span><span class="s1">tags</span><span class="dl">'</span><span class="p">)</span> <span class="p">{</span>
          <span class="k">if </span><span class="p">(</span><span class="nx">value</span> <span class="o">===</span> <span class="dl">''</span><span class="p">)</span> <span class="p">{</span>
            <span class="k">return</span> <span class="s2">`</span><span class="p">${</span><span class="nx">value</span><span class="p">}</span><span class="s2">`</span><span class="p">;</span>
          <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
            <span class="k">return</span> <span class="s2">`&lt;div&gt;&lt;i class="fa fa-tag fa-fw"&gt;&lt;/i&gt;</span><span class="p">${</span><span class="nx">value</span><span class="p">}</span><span class="s2">&lt;/div&gt;`</span><span class="p">;</span>
          <span class="p">}</span>
        <span class="p">}</span>
      <span class="p">}</span>
    <span class="p">});</span>
  <span class="p">});</span>
<span class="o">&lt;</span><span class="sr">/script</span><span class="err">&gt;
</span></pre></div></div><h3 id="assetsjsdatasearchjson">‘/assets/js/data/search.json’</h3><div file="/assets/js/data/search.json" class="language-liquid highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre><td class="rouge-code"><pre>---
layout: compress
swcache: true
---

[
  <span class="cp">{%</span><span class="w"> </span><span class="nt">for</span><span class="w"> </span><span class="nv">post</span><span class="w"> </span><span class="nt">in</span><span class="w"> </span><span class="nv">site</span><span class="p">.</span><span class="nv">posts</span><span class="w"> </span><span class="cp">%}</span>
  {
    "title": <span class="cp">{{</span><span class="w"> </span><span class="nv">post</span><span class="p">.</span><span class="nv">title</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">jsonify</span><span class="w"> </span><span class="cp">}}</span>,
    "url": <span class="cp">{{</span><span class="w"> </span><span class="nv">post</span><span class="p">.</span><span class="nv">url</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">relative_url</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">jsonify</span><span class="w"> </span><span class="cp">}}</span>,
    "categories": <span class="cp">{{</span><span class="w"> </span><span class="nv">post</span><span class="p">.</span><span class="nv">categories</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">join</span><span class="p">:</span><span class="w"> </span><span class="s1">', '</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">jsonify</span><span class="w"> </span><span class="cp">}}</span>,
    "tags": <span class="cp">{{</span><span class="w"> </span><span class="nv">post</span><span class="p">.</span><span class="nv">tags</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">join</span><span class="p">:</span><span class="w"> </span><span class="s1">', '</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">jsonify</span><span class="w"> </span><span class="cp">}}</span>,
    "date": "<span class="cp">{{</span><span class="w"> </span><span class="nv">post</span><span class="p">.</span><span class="nv">date</span><span class="w"> </span><span class="cp">}}</span>",
    <span class="cp">{%</span><span class="w"> </span><span class="nt">include</span><span class="w"> </span>no-linenos.html<span class="w"> </span><span class="na">content</span><span class="o">=</span><span class="nv">post</span><span class="p">.</span><span class="nv">content</span><span class="w"> </span><span class="cp">%}</span>
    <span class="cp">{%</span><span class="w"> </span><span class="nt">assign</span><span class="w"> </span><span class="nv">_content</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">content</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">strip_html</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">strip_newlines</span><span class="w"> </span><span class="cp">%}</span>
    "snippet": <span class="cp">{{</span><span class="w"> </span><span class="nv">_content</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">truncate</span><span class="p">:</span><span class="w"> </span><span class="mi">200</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">jsonify</span><span class="w"> </span><span class="cp">}}</span>,
    "content": <span class="cp">{{</span><span class="w"> </span><span class="nv">_content</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">jsonify</span><span class="w"> </span><span class="cp">}}</span>
  }<span class="cp">{%</span><span class="w"> </span><span class="nt">unless</span><span class="w"> </span><span class="nb">forloop.last</span><span class="w"> </span><span class="cp">%}</span>,<span class="cp">{%</span><span class="w"> </span><span class="nt">endunless</span><span class="w"> </span><span class="cp">%}</span>
  <span class="cp">{%</span><span class="w"> </span><span class="nt">endfor</span><span class="w"> </span><span class="cp">%}</span>
]
</pre></div></div><p>Este arquivo usa a sintaxe Liquid do Jekyll para definir um arquivo JSON que contém o título, URL, informações de categorias e tags, data de criação, um snippet dos primeiros 200 caracteres do conteúdo e o conteúdo completo de todos os posts do site.</p><h3 id="estrutura-de-funcionamento-da-busca-e-identificação-do-problema">Estrutura de funcionamento da busca e identificação do problema</h3><p>Resumindo, a funcionalidade de busca no tema Chirpy hospedado no GitHub Pages funciona através do seguinte processo:</p><pre><code class="language-mermaid">stateDiagram
  state "Changes" as CH
  state "Build start" as BLD
  state "Create search.json" as IDX
  state "Static Website" as DEP
  state "In Test" as TST
  state "Search Loader" as SCH
  state "Results" as R
    
  [*] --&gt; CH: Make Changes
  CH --&gt; BLD: Commit &amp; Push origin
  BLD --&gt; IDX: jekyll build
  IDX --&gt; TST: Build Complete
  TST --&gt; CH: Error Detected
  TST --&gt; DEP: Deploy
  DEP --&gt; SCH: Search Input
  SCH --&gt; R: Return Results
  R --&gt; [*]
</code></pre><p>Verifiquei que o arquivo <code class="language-plaintext filepath highlighter-rouge">search.json</code> é gerado pelo Polyglot para cada idioma da seguinte forma:</p><ul><li><code class="language-plaintext filepath highlighter-rouge">/assets/js/data/search.json</code><li><code class="language-plaintext filepath highlighter-rouge">/ko/assets/js/data/search.json</code><li><code class="language-plaintext filepath highlighter-rouge">/ja/assets/js/data/search.json</code><li><code class="language-plaintext filepath highlighter-rouge">/zh-TW/assets/js/data/search.json</code><li><code class="language-plaintext filepath highlighter-rouge">/es/assets/js/data/search.json</code><li><code class="language-plaintext filepath highlighter-rouge">/pt-BR/assets/js/data/search.json</code><li><code class="language-plaintext filepath highlighter-rouge">/fr/assets/js/data/search.json</code><li><code class="language-plaintext filepath highlighter-rouge">/de/assets/js/data/search.json</code></ul><p>Portanto, a parte problemática é o “Search Loader”. O problema de não encontrar páginas em idiomas diferentes do inglês ocorre porque o arquivo <code class="language-plaintext filepath highlighter-rouge">_includes/search-loader.html</code> carrega estaticamente apenas o arquivo de índice em inglês (<code class="language-plaintext filepath highlighter-rouge">/assets/js/data/search.json</code>), independentemente do idioma da página que está sendo visitada.</p><blockquote class="prompt-warning"><ul><li>No entanto, diferentemente dos arquivos markdown ou html, para arquivos JSON, o wrapper Polyglot funciona para variáveis fornecidas pelo Jekyll como <code class="language-plaintext highlighter-rouge">post.title</code>, <code class="language-plaintext highlighter-rouge">post.content</code>, etc., mas a funcionalidade <a href="https://github.com/untra/polyglot?tab=readme-ov-file#relativized-local-urls">Relativized Local Urls</a> parece não funcionar.<li>Da mesma forma, dentro dos templates de arquivos JSON, não é possível acessar as tags liquid <a href="https://github.com/untra/polyglot?tab=readme-ov-file#features">adicionais fornecidas pelo Polyglot <code class="language-plaintext highlighter-rouge">{{ site.default_lang }}</code>, <code class="language-plaintext highlighter-rouge">{{ site.active_lang }}</code></a> além das variáveis padrão do Jekyll, como confirmei durante o processo de teste.</ul><p>Portanto, valores como <code class="language-plaintext highlighter-rouge">title</code>, <code class="language-plaintext highlighter-rouge">snippet</code> e <code class="language-plaintext highlighter-rouge">content</code> no arquivo de índice são gerados diferentemente para cada idioma, mas o valor <code class="language-plaintext highlighter-rouge">url</code> retorna o caminho padrão sem considerar o idioma, e um tratamento adequado deve ser adicionado à parte “Search Loader”.</p></blockquote><h3 id="solução-do-problema">Solução do problema</h3><p>Para resolver isso, modifique o conteúdo de <code class="language-plaintext filepath highlighter-rouge">_includes/search-loader.html</code> da seguinte forma:</p><div file="\_includes/search-loader.html" class="language-plaintext highlighter-rouge"><div class="highlight">class="highlight"><code><table class="rouge-table"><tbody><tr><td class="rouge-gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre><td class="rouge-code"><pre>{% capture result_elem %}
  &lt;article class="px-1 px-sm-2 px-lg-4 px-xl-0"&gt;
    &lt;header&gt;
      {% if site.active_lang != site.default_lang %}
      &lt;h2&gt;&lt;a {% static_href %}href="/{{ site.active_lang }}{url}"{% endstatic_href %}&gt;{title}&lt;/a&gt;&lt;/h2&gt;
      {% else %}
      &lt;h2&gt;&lt;a href="{url}"&gt;{title}&lt;/a&gt;&lt;/h2&gt;
      {% endif %}

(...omitido...)

&lt;script&gt;
  {% comment %} Note: dependent library will be loaded in `js-selector.html` {% endcomment %}
  document.addEventListener('DOMContentLoaded', () =&gt; {
    {% assign search_path = '/assets/js/data/search.json' %}
    {% if site.active_lang != site.default_lang %}
      {% assign search_path = '/' | append: site.active_lang | append: search_path %}
    {% endif %}
    
    SimpleJekyllSearch({
      searchInput: document.getElementById('search-input'),
      resultsContainer: document.getElementById('search-results'),
      json: '{{ search_path | relative_url }}',
      searchResultTemplate: '{{ result_elem | strip_newlines }}',

(...omitido)
</pre></div></div><ul><li>Modifiquei a sintaxe liquid na parte <code class="language-plaintext highlighter-rouge">{% capture result_elem %}</code> para adicionar o prefixo <code class="language-plaintext highlighter-rouge">"/{{ site.active_lang }}"</code> antes da URL do post carregada do arquivo JSON quando <code class="language-plaintext highlighter-rouge">site.active_lang</code> (idioma da página atual) e <code class="language-plaintext highlighter-rouge">site.default_lang</code> (idioma padrão do site) são diferentes.<li>Da mesma forma, modifiquei a parte <code class="language-plaintext highlighter-rouge">&lt;script&gt;</code> para comparar o idioma da página atual com o idioma padrão do site durante o processo de compilação e definir <code class="language-plaintext highlighter-rouge">search_path</code> como o caminho padrão (<code class="language-plaintext filepath highlighter-rouge">/assets/js/data/search.json</code>) se forem iguais, ou como o caminho correspondente ao idioma (por exemplo, <code class="language-plaintext filepath highlighter-rouge">/ko/assets/js/data/search.json</code>) se forem diferentes.</ul><p>Após essas modificações e reconstrução do site, confirmei que os resultados de busca são exibidos corretamente para cada idioma.</p><blockquote class="prompt-tip"><p>Como <code class="language-plaintext highlighter-rouge">{url}</code> é apenas um espaço reservado para o valor de URL que será lido do arquivo JSON durante a execução da busca pelo JS, e não uma URL válida no momento da compilação, o Polyglot não o reconhece como alvo de localização, então precisamos tratá-lo diretamente de acordo com o idioma. O problema é que o template <code class="language-plaintext highlighter-rouge">"/{{ site.active_lang }}{url}"</code> processado dessa forma é reconhecido como URL relativa durante a compilação, e embora a localização já esteja concluída, o Polyglot não sabe disso e tenta realizar a localização novamente (por exemplo, <code class="language-plaintext filepath highlighter-rouge">"/ko/ko/posts/example-post"</code>). Para evitar isso, especifiquei a tag <a href="https://github.com/untra/polyglot?tab=readme-ov-file#disabling-url-relativizing"><code class="language-plaintext highlighter-rouge">{% static_href %}</code></a>.</p></blockquote>]]> </content> </entry> <entry><title xml:lang="pt-BR">EDOs Lineares Homogêneas de Segunda Ordem</title><link href="https://www.yunseo.kim/pt-BR/posts/homogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="en" /><link href="https://www.yunseo.kim/ko/posts/homogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="ko" /><link href="https://www.yunseo.kim/ja/posts/homogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="ja" /><link href="https://www.yunseo.kim/zh-TW/posts/homogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="zh-TW" /><link href="https://www.yunseo.kim/es/posts/homogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="es" /><link href="https://www.yunseo.kim/pt-BR/posts/homogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="pt-BR" /><link href="https://www.yunseo.kim/fr/posts/homogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="fr" /><link href="https://www.yunseo.kim/de/posts/homogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="de" /><link href="https://www.yunseo.kim/pl/posts/homogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="pl" /><link href="https://www.yunseo.kim/cs/posts/homogeneous-linear-odes-of-second-order/" rel="alternate" type="text/html" hreflang="cs" /><published>2025-01-13T00:00:00+09:00</published> <updated>2025-07-11T20:37:36+09:00</updated> <id>https://www.yunseo.kim/pt-BR/posts/homogeneous-linear-odes-of-second-order/</id> <author> <name>Yunseo Kim</name> </author> <category term="Mathematics" /> <category term="Differential Equation" /> <summary xml:lang="pt-BR">Entenda a definição e características das EDOs lineares de segunda ordem, especialmente o princípio da superposição e o conceito de base que se aplicam às equações homogêneas.</summary> <content type="html" xml:lang="pt-BR"> <![CDATA[<p>Entenda a definição e características das EDOs lineares de segunda ordem, especialmente o princípio da superposição e o conceito de base que se aplicam às equações homogêneas.</p><em><p>* Mathematical equations and diagrams included in posts may not display properly when viewed with a feed reader.</p></em><h2 id="tldr">TL;DR</h2><blockquote class="prompt-info"><ul><li><strong>Forma padrão</strong> de uma EDO linear de segunda ordem: $y^{\prime\prime} + p(x)y^{\prime} + q(x)y = r(x)$<ul><li><strong>Coeficientes</strong>: funções $p$, $q$<li><strong>Entrada</strong>: $r(x)$<li><strong>Saída</strong> ou <strong>resposta</strong>: $y(x)$</ul><li>Homogênea e não-homogênea<ul><li><strong>Homogênea</strong>: quando $r(x)\equiv0$ na forma padrão<li><strong>Não-homogênea</strong>: quando $r(x)\not\equiv 0$ na forma padrão</ul><li><strong>Princípio da superposição</strong>: Para uma EDO linear homogênea $y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0$, qualquer combinação linear de duas soluções em um intervalo aberto $I$ também é uma solução da equação dada. Ou seja, a soma e o produto por constante de quaisquer soluções da EDO linear homogênea dada também são soluções da mesma equação.<li><strong>Base</strong> ou <strong>sistema fundamental</strong>: Um par de soluções $(y_1, y_2)$ linearmente independentes da EDO linear homogênea no intervalo $I$<li><strong>Redução de ordem</strong>: Se uma solução de uma EDO homogênea de segunda ordem é conhecida, uma segunda solução linearmente independente, ou seja, uma base, pode ser encontrada resolvendo uma EDO de primeira ordem; este método é chamado de redução de ordem<li>Aplicações da redução de ordem: Uma EDO geral de segunda ordem $F(x, y, y^\prime, y^{\prime\prime})=0$, seja linear ou não-linear, pode ser reduzida a primeira ordem usando redução de ordem nos seguintes casos:<ul><li>Quando $y$ não aparece explicitamente<li>Quando $x$ não aparece explicitamente<li>Quando é linear homogênea e uma solução já é conhecida</ul></ul></blockquote><h2 id="pré-requisitos">Pré-requisitos</h2><ul><li><a href="/pt-BR/posts/Basic-Concepts-of-Modeling/">Conceitos Básicos de Modelagem</a><li><a href="/pt-BR/posts/Separation-of-Variables/">Separação de Variáveis</a><li><a href="/pt-BR/posts/Solution-of-First-Order-Linear-ODE/">Solução de EDOs Lineares de Primeira Ordem</a></ul><h2 id="equações-diferenciais-ordinárias-lineares-de-segunda-ordem">Equações Diferenciais Ordinárias Lineares de Segunda Ordem</h2><p>Uma equação diferencial ordinária (EDO) de segunda ordem é chamada <strong>linear</strong> se pode ser escrita na forma</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = r(x) \label{eqn:standard_form}\tag{1}\]<p>e <strong>não-linear</strong> caso contrário.</p><p>Quando $p$, $q$, e $r$ são funções de $x$, esta equação é linear em $y$ e suas derivadas.</p><p>A forma ($\ref{eqn:standard_form}$) é chamada de <strong>forma padrão</strong> de uma EDO linear de segunda ordem. Se o primeiro termo de uma EDO linear de segunda ordem dada for $f(x)y^{\prime\prime}$, podemos obter a forma padrão dividindo ambos os lados da equação por $f(x)$.</p><p>As funções $p$ e $q$ são chamadas de <strong>coeficientes</strong>, $r(x)$ é chamada de <strong>entrada</strong>, e $y(x)$ é chamada de <strong>saída</strong> ou <strong>resposta</strong> à entrada e às condições iniciais.</p><h3 id="edo-linear-homogênea-de-segunda-ordem">EDO Linear Homogênea de Segunda Ordem</h3><p>Seja $J$ o intervalo $a&lt;x&lt;b$ onde queremos resolver a equação ($\ref{eqn:standard_form}$). Se $r(x)\equiv 0$ no intervalo $J$ na equação ($\ref{eqn:standard_form}$), temos</p>\[y^{\prime\prime} + p(x)y^{\prime} + q(x)y = 0 \label{eqn:homogeneous_linear_ode}\tag{2}\]<p>e esta é chamada de <strong>homogênea</strong>.</p><h2 id="edo-linear-não-homogênea">EDO Linear Não-Homogênea</h2><p>Se $r(x)\not\equiv 0$ no intervalo $J$, a equação é chamada de <strong>não-homogênea</strong>.</p><h2 id="princípio-da-superposição">Princípio da Superposição</h2><p>Uma função da forma</p>\[y = c_1y_1 + c_2y_2 \quad \text{(}c_1, c_2\text{ são constantes arbitrárias)}\tag{3}\]<p>é chamada de <strong>combinação linear</strong> de $y_1$ e $y_2$.</p><p>Neste caso, o seguinte princípio se aplica:</p><blockquote class="prompt-info"><p><strong>Princípio da Superposição</strong><br /> Para uma EDO linear homogênea ($\ref{eqn:homogeneous_linear_ode}$), qualquer combinação linear de duas soluções em um intervalo aberto $I$ também é uma solução da equação ($\ref{eqn:homogeneous_linear_ode}$). Ou seja, a soma e o produto por constante de quaisquer soluções da EDO linear homogênea dada também são soluções da mesma equação.</p></blockquote><h3 id="prova">Prova</h3><p>Sejam $y_1$ e $y_2$ soluções da equação ($\ref{eqn:homogeneous_linear_ode}$) no intervalo $I$. Substituindo $y=c_1y_1+c_2y_2$ na equação ($\ref{eqn:homogeneous_linear_ode}$), temos</p>\[\begin{align*} y^{\prime\prime} + py^{\prime} + qy &amp;= (c_1y_1+c_2y_2)^{\prime\prime} + p(c_1y_1+c_2y_2)^{\prime} + q(c_1y_1+c_2y_2) \\ &amp;= c_1y_1^{\prime\prime} + c_2y_2^{\prime\prime} + p(c_1y_1^{\prime} + c_2y_2^{\prime}) + q(c_1y_1+c_2y_2) \\ &amp;= c_1(y_1^{\prime\prime} + py_1^{\prime} + qy_1) + c_2(y_2^{\prime\prime} + py_2^{\prime} + qy_2) \\ &amp;= 0 \end{align*}\]<p>que é uma identidade. Portanto, $y$ é uma solução da equação ($\ref{eqn:homogeneous_linear_ode}$) no intervalo $I$. $\blacksquare$</p><blockquote class="prompt-warning"><p>Note que o princípio da superposição se aplica apenas a EDOs lineares homogêneas e não se aplica a EDOs lineares não-homogêneas ou EDOs não-lineares.</p></blockquote><h2 id="base-e-solução-geral">Base e Solução Geral</h2><h3 id="revisão-de-conceitos-principais-de-edos-de-primeira-ordem">Revisão de Conceitos Principais de EDOs de Primeira Ordem</h3><p>Como vimos anteriormente em <a href="/pt-BR/posts/Basic-Concepts-of-Modeling/">Conceitos Básicos de Modelagem</a>, um problema de valor inicial (PVI) para uma EDO de primeira ordem consiste na EDO e na condição inicial (CI) $y(x_0)=y_0$. A CI é necessária para determinar a constante arbitrária $c$ na solução geral da EDO dada, e a solução assim determinada é chamada de solução particular. Agora, vamos estender esses conceitos para EDOs de segunda ordem.</p><h3 id="problema-de-valor-inicial-e-condições-iniciais">Problema de Valor Inicial e Condições Iniciais</h3><p>Um <strong>problema de valor inicial</strong> para a EDO linear homogênea de segunda ordem ($\ref{eqn:homogeneous_linear_ode}$) consiste na EDO dada ($\ref{eqn:homogeneous_linear_ode}$) e em duas <strong>condições iniciais</strong></p>\[y(x_0) = K_0, \quad y^{\prime}(x_0)=K_1 \label{eqn:init_conditions}\tag{4}\]<p>Estas condições são necessárias para determinar as duas constantes arbitrárias $c_1$ e $c_2$ na <strong>solução geral</strong></p>\[y = c_1y_1 + c_2y_2 \label{eqn:general_sol}\tag{5}\]<h3 id="independência-linear-e-dependência-linear">Independência Linear e Dependência Linear</h3><p>Vamos revisar brevemente os conceitos de independência linear e dependência linear. Isso é necessário para definir a base mais adiante.<br /> Duas funções $y_1$ e $y_2$ são ditas <strong>linearmente independentes</strong> em um intervalo $I$ se, para todos os pontos nesse intervalo,</p>\[k_1y_1(x) + k_2y_2(x) = 0 \Leftrightarrow k_1=0\text{ e }k_2=0 \label{eqn:linearly_independent}\tag{6}\]<p>Caso contrário, $y_1$ e $y_2$ são ditas <strong>linearmente dependentes</strong>.</p><p>Se $y_1$ e $y_2$ são linearmente dependentes (ou seja, se a proposição ($\ref{eqn:linearly_independent}$) não é verdadeira), podemos dividir ambos os lados da equação em ($\ref{eqn:linearly_independent}$) por $k_1 \neq 0$ ou $k_2 \neq 0$, obtendo</p>\[y_1 = - \frac{k_2}{k_1}y_2 \quad \text{ou} \quad y_2 = - \frac{k_1}{k_2}y_2\]<p>o que mostra que $y_1$ e $y_2$ são proporcionais.</p><h3 id="base-solução-geral-e-solução-particular">Base, Solução Geral e Solução Particular</h3><p>Voltando ao nosso tema, para que ($\ref{eqn:general_sol}$) seja a solução geral, $y_1$ e $y_2$ devem ser soluções da equação ($\ref{eqn:homogeneous_linear_ode}$) e, ao mesmo tempo, devem ser linearmente independentes (não proporcionais) no intervalo $I$. Um par $(y_1, y_2)$ de soluções da equação ($\ref{eqn:homogeneous_linear_ode}$) que satisfaz essas condições e é linearmente independente no intervalo $I$ é chamado de <strong>base</strong> ou <strong>sistema fundamental</strong> de soluções da equação ($\ref{eqn:homogeneous_linear_ode}$) no intervalo $I$.</p><p>Ao usar as condições iniciais para determinar as duas constantes $c_1$ e $c_2$ na solução geral ($\ref{eqn:general_sol}$), obtemos uma única solução que passa pelo ponto $(x_0, K_0)$ e tem inclinação $K_1$ nesse ponto. Esta é chamada de <strong>solução particular</strong> da EDO ($\ref{eqn:homogeneous_linear_ode}$).</p><p>Se a equação ($\ref{eqn:homogeneous_linear_ode}$) é contínua em um intervalo aberto $I$, ela sempre tem uma solução geral, e esta solução geral inclui todas as soluções particulares possíveis. Ou seja, neste caso, a equação ($\ref{eqn:homogeneous_linear_ode}$) não tem soluções singulares que não possam ser obtidas da solução geral.</p><h2 id="redução-de-ordem">Redução de Ordem</h2><p>Se uma solução de uma EDO homogênea de segunda ordem é conhecida, uma segunda solução linearmente independente, ou seja, uma base, pode ser encontrada resolvendo uma EDO de primeira ordem da seguinte maneira. Este método é chamado de <strong>redução de ordem</strong>.</p><p>Considere uma EDO linear homogênea de segunda ordem na forma padrão (ou seja, com $y^{\prime\prime}$ em vez de $f(x)y^{\prime\prime}$):</p>\[y^{\prime\prime} + p(x)y^\prime + q(x)y = 0\]<p>Suponha que conhecemos uma solução $y_1$ desta equação em um intervalo aberto $I$.</p><p>Agora, vamos procurar uma segunda solução na forma $y_2 = uy_1$, e substituir</p>\[\begin{align*} y &amp;= y_2 = uy_1, \\ y^{\prime} &amp;= y_2^{\prime} = u^{\prime}y_1 + uy_1^{\prime}, \\ y^{\prime\prime} &amp;= y_2^{\prime\prime} = u^{\prime\prime}y_1 + 2u^{\prime}y_1^{\prime} + uy_1^{\prime\prime} \end{align*}\]<p>na equação, obtendo</p>\[(u^{\prime\prime}y_1 + 2u^{\prime}y_1^{\prime} + uy_1^{\prime\prime}) + p(u^{\prime}y_1 + uy_1^{\prime}) + quy_1 = 0 \tag{7}\]<p>Agrupando os termos com $u^{\prime\prime}$, $u^{\prime}$, e $u$, temos</p>\[y_1u^{\prime\prime} + (py_1+2y_1^{\prime})u^{\prime} + (y_1^{\prime\prime} + py_1^{\prime} + qy_1)u = 0\]<p>Como $y_1$ é uma solução da equação dada, a expressão entre parênteses no último termo é zero, então o termo com $u$ desaparece, deixando uma EDO em $u^{\prime}$ e $u^{\prime\prime}$. Dividindo ambos os lados desta EDO restante por $y_1$ e fazendo $u^{\prime}=U$, $u^{\prime\prime}=U^{\prime}$, obtemos a seguinte EDO de primeira ordem:</p>\[U^{\prime} + \left(\frac{2y_1^{\prime}}{y_1} + p \right) U = 0.\]<p><a href="/pt-BR/posts/Separation-of-Variables/">Separando as variáveis</a> e integrando, temos</p>\[\begin{align*} \frac{dU}{U} &amp;= - \left(\frac{2y_1^{\prime}}{y_1} + p \right) dx \\ \ln|U| &amp;= -2\ln|y_1| - \int p dx \end{align*}\]<p>e aplicando a função exponencial em ambos os lados, obtemos finalmente</p>\[U = \frac{1}{y_1^2}e^{-\int p dx} \tag{8}\]<p>Como definimos $U=u^{\prime}$, temos $u=\int U dx$, então a segunda solução $y_2$ que estamos procurando é</p>\[y_2 = uy_1 = y_1 \int U dx\]<p>Como $\cfrac{y_2}{y_1} = u = \int U dx$ não pode ser constante desde que $U&gt;0$, $y_1$ e $y_2$ formam uma base de soluções.</p><h3 id="aplicações-da-redução-de-ordem">Aplicações da Redução de Ordem</h3><p>Uma EDO geral de segunda ordem $F(x, y, y^\prime, y^{\prime\prime})=0$, seja linear ou não-linear, pode ser reduzida a primeira ordem usando redução de ordem quando $y$ não aparece explicitamente, quando $x$ não aparece explicitamente, ou quando é linear homogênea e uma solução já é conhecida, como vimos anteriormente.</p><h4 id="quando-y-não-aparece-explicitamente">Quando $y$ não aparece explicitamente</h4><p>Em $F(x, y^\prime, y^{\prime\prime})=0$, fazendo $z=y^{\prime}$, podemos reduzir a uma EDO de primeira ordem em $z$: $F(x, z, z^{\prime})$.</p><h4 id="quando-x-não-aparece-explicitamente">Quando $x$ não aparece explicitamente</h4><p>Em $F(y, y^\prime, y^{\prime\prime})=0$, fazendo $z=y^{\prime}$, temos $y^{\prime\prime} = \cfrac{d y^{\prime}}{dx} = \cfrac{d y^{\prime}}{dy}\cfrac{dy}{dx} = \cfrac{dz}{dy}z$, então podemos reduzir a uma EDO de primeira ordem em $z$ com $y$ desempenhando o papel de variável independente no lugar de $x$: $F(y,z,z^\prime)$.</p>]]> </content> </entry> </feed>
