Vídeo: Resolução de Equações 2D Usando Cores, uma História, Índices e Composição

Grant Sanderson • 3Blue1Brown • Boclips

Resolução de Equações 2D Usando Cores, uma História, Índices e Composição

22:34

Transcrição do vídeo

Há duas coisas aqui, o tópico principal e o meta-tópico. Então, o tópico principal será esse algoritmo realmente interessante para resolver equações bidimensionais. Coisas que têm dois números reais desconhecidos ou também aquelas que envolvem um único desconhecido, que é um número complexo. Por exemplo, se você quiser encontrar as raízes complexas de um polinômio, ou talvez alguns desses zeros de um milhão de dólares da função Riemann zeta, esse algoritmo fará isso por você.

E esse método é super bonito, pois muitas cores estão envolvidas. E, mais importante, a ideia principal subjacente se aplica a todos os tipos de matemática muito além deste algoritmo para resolver equações, incluindo um pouco de topologia sobre a qual falarei depois. Mas o que realmente faz com que isso valha mais ou menos 20 minutos do seu tempo é que ilustra uma lição muito mais útil em geral na matemática. Ou seja, tente definir construções que se comporão bem entre si. Você verá o que quero dizer com isso à medida que a história avança.

Para motivar o caso com funções que têm entradas 2D e saídas 2D, vamos começar mais simples, com funções que apenas pegam um número real e devolvem um número real. Se você quer saber quando uma função, 𝑓 de 𝑥, é igual a outra função, 𝑔 de 𝑥, você pode pensar nisso como uma pesquisa quando os gráficos dessas funções se cruzam, certo? Quero dizer que fornece uma entrada em que ambas as funções têm a mesma saída.

Para dar um exemplo muito simples, imagine 𝑓 de 𝑥 é 𝑥 ao quadrado e 𝑔 de 𝑥 é a função constante dois. Em outras palavras, você deseja encontrar a raiz quadrada de dois. Mesmo se você não souber quase nada sobre como encontrar raízes quadradas, provavelmente poderá ver que um ao quadrado é menor que dois e dois ao quadrado é maior que dois. Então você percebe: “Ah, haverá uma solução entre esses dois valores”. E então, se você quiser reduzi-lo ainda mais, talvez tente acertar o ponto intermediário, 1.5. E isso acaba sendo 2.25, um pouco alto demais. Então, você focaria na região entre um e 1.5, e assim por diante. Você provavelmente pode ver como isso continuaria. Você continua computando no ponto médio e depois divide seu espaço de pesquisa pela metade.

Agora, outra maneira de pensar sobre isso, que facilitará para nós quando chegarmos a dimensões mais altas, é focar na questão equivalente para quando a diferença entre essas duas funções é zero. Nesses termos, encontramos uma região de entradas em que essa diferença era negativa em uma extremidade. E era positiva na outra extremidade. E então dividimos em dois. E a metade em que estreitamos nossa atenção foi aquela em que os pontos mais externos tinham sinais variados. E assim, fomos capazes de continuar para sempre, levando cada região com vários sinais na borda. Encontrando uma região menor entre suas metades. Sabendo disso, em última análise, temos que nos restringir a um ponto que será exatamente zero.

Portanto, em resumo, resolver equações sempre pode ser enquadrado como descobrindo quando uma determinada função é igual a zero. E para fazer isso, temos essa heurística. Se 𝑓 for positivo em um ponto e negativo em outro, você poderá encontrar algum lugar entre onde é zero. Pelo menos se tudo mudar sem problemas, sem saltos repentinos. Agora, o mais surpreendente que quero lhe mostrar é que você pode estender esse tipo de pensamento em equações bidimensionais, equações entre funções cujas entradas e saídas são bidimensionais. Por exemplo, números complexos são 2D. E essa ferramenta que estamos desenvolvendo é perfeita para encontrar soluções para equações complexas.

Agora, como falaremos muito sobre essas funções 2D, vamos dar uma breve volta e considerar como ilustramos isso. Quero dizer, representar graficamente uma função com uma entrada 2D e uma saída 2D exigiria quatro dimensões. E isso realmente não vai funcionar tão bem no mundo 3D ou nas telas 2D. Mas ainda temos algumas boas opções. Uma é apenas olhar para o espaço de entrada e o espaço de saída lado a lado. Cada ponto no espaço de entrada se move para um ponto específico no espaço de saída. E posso mostrar como se mover em torno desse ponto de entrada corresponde a certos movimentos no espaço de saída. Todas as funções que consideramos serão contínuas, no sentido de que pequenas mudanças na entrada correspondem apenas a pequenas mudanças na saída. Não há saltos repentinos.

Agora, outra opção que temos é imaginar a seta da origem do espaço de saída para esse ponto de saída e anexar uma versão em miniatura dessa seta ao ponto de entrada. Isso pode nos dar uma ideia rápida de para onde vai um determinado ponto de entrada ou para onde muitos pontos de entrada diferentes vão desenhando o campo vetorial completo. E, infelizmente, quando você faz isso em vários pontos, pode ficar bem confuso. Então, aqui, deixe-me fazer todas as setas do mesmo tamanho. E o que isso significa é que podemos ter uma noção exata da direção de cada ponto de saída.

Mas talvez a maneira mais bonita de ilustrar funções bidimensionais, e a que usaremos mais neste vídeo, é associar cada ponto desse espaço de saída a uma cor. Aqui, usamos tons — ou seja, onde a cor cai ao longo de um arco-íris ou de uma roda de cores — para corresponder à direção da origem. E estamos usando a escuridão ou o brilho para corresponder à distância da origem. Por exemplo, concentrando-se apenas nesse raio de saídas, todos esses pontos são vermelhos. Mas os mais próximos da origem são um pouco mais escuros e os mais distantes são um pouco mais brilhantes. E focando apenas nesse raio de saídas, todos os pontos são verdes. E, novamente, mais perto da origem significa mais escuro; mais longe significa mais claro e assim por diante. Tudo o que estamos fazendo aqui é atribuir uma cor específica a cada direção, todas mudando continuamente.

Você pode notar que as diferenças de escuridão e brilho aqui são bastante sutis. Mas para este vídeo, tudo o que importa é a direção das saídas, não as magnitudes, os tons, não o brilho. A única coisa importante sobre o brilho para você notar é que, perto da origem, que não tem direção específica, todas as cores desbotam para o preto. Então, se estamos pensando em funções, agora que decidimos uma cor para cada saída. Podemos visualizar funções 2D colorindo cada ponto no espaço de entrada com base na cor do ponto em que ele fica no espaço de saída.

Eu gosto de imaginar muitos pontos diferentes daquele espaço de entrada pulando para as saídas correspondentes no espaço de saída. Em seguida, pintar com base na cor do ponto em que ficam. E então voltando para onde eles vieram no espaço de entrada. Fazendo isso para todos os pontos do espaço de entrada, você pode ter uma noção apenas observando esse espaço de entrada para aproximadamente onde a função ocupa cada ponto. Por exemplo, essa faixa de pontos cor de rosa à esquerda indica que todos esses pontos são mapeados em algum lugar na direção rosa, na parte inferior esquerda do espaço de saída. Além disso, esses três pontos pretos com muitas cores ao redor são os que chegam a zero.

Tudo bem, assim como no caso 1D, resolver equações de funções bidimensionais sempre pode ser reformulado, perguntando quando uma determinada função é igual a zero. Então esse é o nosso desafio agora. Crie um algoritmo que encontre quais pontos de entrada de uma determinada função 2D vão para zero. Agora, você pode apontar que, se estiver vendo um mapa de cores como este, vendo esses pontos pretos, já sabe onde estão os zeros da função. Então, isso conta? Bem, lembre-se de que, para criar um diagrama, pedimos ao computador que calculasse a função em todos os pixels do plano. Mas nosso objetivo é encontrar um algoritmo mais eficiente que requer apenas o cálculo da função no menor número de pontos possível, apenas uma visão limitada das cores, por assim dizer. E também, do ponto de vista mais teórico, seria bom ter uma construção geral que nos diga as condições para a existência ou não de um zero dentro de uma determinada região.

Agora lembre-se, em uma dimensão, o principal insight foi que, se uma função contínua é positiva em um ponto e negativa em outro, então em algum ponto intermediário, deve ser zero. Então, como estendemos isso para duas dimensões? Precisamos de algum tipo de analogia para falar sobre sinais. Bem, uma maneira de pensar sobre o que os sinais são mesmo é a direção. Positivo significa que você está apontando para a direita ao longo da reta numérica. E negativo significa que você está apontando para a esquerda. Quantidades bidimensionais também têm direção. Mas para elas, as opções são muito mais amplas. Elas podem apontar para qualquer lugar ao longo de um círculo inteiro de possibilidades. Da mesma forma que em uma dimensão estávamos perguntando se uma determinada função é positiva ou negativa no limite de um intervalo, que é de apenas dois pontos. Para funções 2D, examinaremos o limite de uma região, que é uma curva, e perguntaremos sobre a direção da saída da função ao longo desse limite.

Por exemplo, vemos que ao longo dessa curva em torno desse zero, a saída passa por todas as direções possíveis, todas as cores do arco-íris. Vermelho, amarelo, verde, azul e de volta ao vermelho, e tudo mais ao longo do caminho. Mas, nessa curva aqui, sem zeros, a saída não passa por todas as cores. Passa por algumas das laranjas, mas nunca, digamos, verde ou azul. E isso é promissor. Parece muito com como as coisas funcionavam em uma dimensão. Talvez da mesma maneira que se uma função 1D capta os dois sinais possíveis no limite de uma região 1D. Havia um zero em algum lugar dentro. Podemos sugerir a hipótese de que, se uma função 2D atingir saídas de todas as direções possíveis, todas as cores possíveis, ao longo do limite de uma região 2D, então em algum lugar dessa região ela deve ir a zero. Então, esse é o nosso palpite. E reserve um momento para pensar se isso deve ser verdade e, se sim, por quê?

Se começarmos a pensar em uma pequena volta em torno de algum ponto de entrada, sabemos que, como tudo é contínuo, nossa função leva a uma pequena curva próxima à saída correspondente. Mas veja, para a maioria das curvas minúsculas, a saída mal varia de cor. Se você escolher qualquer ponto de saída diferente de zero e desenhar uma curva suficientemente apertada perto dele, as cores da curva terão a mesma cor do ponto. Uma pequena curva por aqui é toda azulada. Uma pequena curva aqui vai ser toda amarelada. Você certamente não terá todas as cores do arco-íris. O único ponto em que você pode apertar as curvas ao redor e ainda obter todas as cores é a origem incolor, o próprio zero. Portanto, de fato, se você tiver curvas passando por todas as cores do arco-íris, apertando e apertando, estreitando-se em um ponto, então esse ponto deve ser de fato um zero.

E assim, vamos configurar um solucionador de equações 2D, assim como nosso solucionador de equações unidimensional. Quando encontrarmos uma grande região cuja borda passa por todas as cores, divida-a em duas. E então observe as cores na borda de cada metade. No exemplo mostrado aqui, a borda na metade esquerda não passa por todas as cores. Não há pontos mapeados para as direções laranja-amarelada, por exemplo. Então, vou acinzentar esta área como forma de dizer que não queremos mais pesquisá-la. Agora, a metade direita passa por todas as cores, passa muito tempo na direção verde e depois passa por amarelo, laranja, vermelho e azul, violeta e rosa.

Agora lembre-se, o que isso significa é que os pontos dessa borda são transformados para saídas de todas as direções possíveis. Então, vamos explorá-lo ainda mais, subdividindo-o novamente e verificando os limites de cada região. E o limite do canto superior direito é todo verde, então paramos de procurar lá. Mas o fundo é colorido o suficiente para merecer uma subdivisão. E apenas continue assim. Verifique qual sub-região possui uma borda que cobre todas as cores possíveis, o que significa que os pontos desse limite são transformados para todas as direções possíveis. E continue cortando essas regiões ao meio, como fizemos no caso unidimensional. Eventualmente, levando-nos ao zero da diversão — oh, espere um segundo. O que aconteceu aqui? Nenhuma dessas últimas subdivisões no canto inferior direito passou por todas as cores. Portanto, nosso algoritmo parou porque não queria pesquisar por nenhuma delas. Mas também não encontrou zero.

Ok, claramente tem algo errado aqui. E tudo bem! Estar errado é uma parte regular da matemática. Se olharmos para trás, teríamos essa hipótese. E isso nos levou a esse algoritmo proposto. Então, estávamos enganados em algum lugar. E ser bom em matemática não é estar certo da primeira vez. Trata-se de ter a resiliência para olhar cuidadosamente para trás e entender os erros e entender como corrigi-los. Agora, o problema aqui é que tínhamos uma região cuja borda passava por todas as cores. Mas quando a dividimos no meio, a borda de nenhuma sub-região passou por todas as cores. Não tínhamos opções para onde continuar pesquisando a seguir. E isso quebrou a procura do zero.

Agora, em uma dimensão, esse tipo de coisa nunca aconteceu. Sempre que você tiver um intervalo cujos pontos de extremidade tenham sinais diferentes, se você o dividir, saberá que terá um subintervalo cujos pontos de extremidade também terão sinais diferentes. Em outras palavras, sempre que houver dois intervalos cujos pontos de extremidade não mudam de sinal, se você os combinar, obterá um intervalo maior cujos pontos de extremidade também não mudam de sinal. Mas em duas dimensões, é possível encontrar duas regiões cujas bordas não passam por todas as cores, mas cujas bordas se combinam para fornecer uma região cuja borda passa por todas as cores. E, exatamente dessa maneira, nosso algoritmo de buscar zero proposto quebrou. De fato, se você pensar bem, poderá encontrar uma grande curva cuja borda passa por todas as cores possíveis sem que haja zero nela.

Agora, isso não quer dizer que estávamos errados em nossas alegações sobre pequenas curvas, quando dissemos que curvas que se estreitam para sempre passando por todas as cores devem estar se estreitando em um zero. Mas o que fez uma bagunça para nós é que essa propriedade “minha borda passa por todas as cores ou não” não se combina de maneira agradável e previsível quando você combina regiões. Mas não se preocupe! Acontece que podemos modificar isso um pouco para uma propriedade mais sofisticada que se combina para nos dar o que queremos.

A ideia é que, em vez de simplesmente perguntar se podemos encontrar uma cor em algum momento ao longo da curva. Vamos acompanhar com mais cuidado como essas cores mudam à medida que percorremos essa curva. Deixe-me mostrar o que você quer dizer com um exemplo. Vou manter um pouco de cor aqui no canto para nos ajudar a acompanhar. Quando as cores ao longo do caminho das entradas se movem pelo arco-íris em uma direção específica — de vermelho para amarelo, amarelo para verde, verde para azul ou azul para vermelho — a saída está oscilando no sentido horário. Mas, por outro lado, se as cores se moverem para o outro lado do arco-íris — de azul para verde, verde para amarelo, amarelo para vermelho ou vermelho para azul — a saída estará oscilando no sentido anti-horário.

Então, caminhando por esse pequeno caminho aqui, as cores serpenteiam um quinto no sentido horário através da roda de cores. E caminhando por esse caminho aqui, as cores serpenteiam outro quinto no sentido horário através da roda de cores. E, é claro, isso significa que, se você seguir os dois caminhos, um após o outro, as cores terminam em dois quintos de uma volta completa no sentido horário. A quantidade total de índices apenas aumenta, e isso vai ser a chave. Esse é o tipo de combinação direta que será útil para nós. Agora, quando digo uma quantidade total de índices, quero que você imagine um hodômetro antiquado que se move para a frente enquanto a seta gira no sentido horário, mas para trás enquanto a seta gira no sentido anti-horário. Portanto, o índice no sentido anti-horário conta como um índice negativo no sentido horário. As saídas podem virar muito. Mas se parte dessa virada for na direção oposta, ela será cancelada.

Por exemplo, se você avançar nesse caminho e depois no mesmo caminho, a quantidade total de índices acabará sendo zero. O movimento para trás literalmente retrocede nas cores vistas anteriormente. Invertendo todo o índice anterior e retornando o hodômetro para onde ele começou. Para nossos propósitos, nos preocupamos mais com a observação do índice ao longo de curvas. Por exemplo, digamos que andamos por todo essa curva no sentido horário. As saídas que encontramos sobre os índices em torno de um total de três voltas completas no sentido horário. As cores giravam através do arco-íris, ROYGBIV, em ordem, de vermelho para vermelho várias vezes. No jargão utilizado pelos matemáticos, dizemos que, ao longo dessa curva, o número total de índices é três.

Agora, para outras curvas, poderia ser qualquer outro número inteiro. Talvez seja maior se a saída for girada várias vezes enquanto a entrada percorre uma única curva. Ou poderia ser um número menor se a saída girar apenas uma ou duas vezes. Ou esse índice pode até ser um número inteiro negativo. Se a saída estava oscilando no sentido anti-horário, enquanto caminhamos no sentido horário ao redor da curva. Mas, em qualquer curva, essa quantidade total de índices deve ser um número inteiro. Quero dizer, quando você voltar para onde começou, você terá a mesma saída com a qual começou. Aliás, se um caminho realmente contém um ponto em que a saída é precisamente zero, tecnicamente não é possível definir um índice ao longo disso. Como a saída não possui direção específica.

Agora, isso não será um problema para nós, porque nosso objetivo é encontrar zeros. Então, se isso acontecer, teremos sorte logo. Tudo bem, então o principal a se notar sobre esses índices é que eles aumentem quando você combina caminhos em caminhos maiores. Mas o que realmente queremos é que os índices ao longo das bordas das regiões aumentem bastante quando combinamos regiões para criar regiões maiores. Então, nós temos essa propriedade? Bem, dê uma olhada! O número de índices, à medida que avançamos no sentido horário, em torno desta região à esquerda, é a soma dos números de índices desses quatro caminhos. E o índice no sentido horário em torno desta região à direita é a soma dos números de índices desses quatro caminhos. E quando combinamos essas duas regiões em uma maior, a maioria desses caminhos se torna parte da borda horária da região maior.

E quanto aos dois caminhos que não? Bem, eles cancelam perfeitamente. Um deles é justamente o contrário, o oposto do índice do outro, como vimos antes. Portanto, os índices ao longo das bordas das regiões se somam da maneira que queremos. Além disso, note que esse raciocínio sobre bordas orientadas aumentam assim aparece muito em matemática. E geralmente é chamado de Teorema de Stokes. Aqueles que estudaram o cálculo multivariável podem reconhecê-lo a partir desse contexto.

Portanto, agora, finalmente, com índices em mãos, podemos voltar aos nossos objetivos de resolução de equações. O problema com a região que vimos anteriormente é que, embora sua borda passasse por todas as cores possíveis, o índice era realmente zero. As saídas passam pela metade do amarelo para o vermelho. E então começou a voltar no sentido anti-horário na outra direção. E continuou passando pelo azul e atingindo o vermelho do outro lado. Tudo de tal maneira que o índice total compensado seja zero. Mas se você encontrar uma curva que não apenas atinja todas as cores, mas também terá a condição mais forte de um índice diferente de zero. Então, se você dividir ao meio, você garante que pelo menos uma dessas metades também tem um índice diferente de zero. Uma vez que as coisas aumentam da maneira que queremos.

Assim, você pode continuar estreitando cada vez mais em um ponto. E à medida que você se aproxima de um ponto, você o faz com pequenas curvas que têm índices diferentes de zero. O que implica que eles passam por todas as cores possíveis. E, portanto, como eu disse antes, o ponto em que estão se estreitando deve ser zero. E é isso! Agora criamos um solucionador de equações bidimensional. E desta vez, prometo, não há erros. Os índices são precisamente a ferramenta necessária para fazer esse trabalho. Agora podemos resolver equações que se parecem onde 𝑓 de 𝑥 é igual a 𝑔 de 𝑥 em duas dimensões, apenas considerando como a diferença entre 𝑓 e 𝑔 gira em torno. Sempre que temos uma curva cujo índice não é zero, podemos executar esse algoritmo nela. E temos a garantia de encontrar uma solução em algum lugar dentro dela.

Além disso, assim como em uma dimensão, esse algoritmo é incrivelmente eficiente. Continuamos nos estreitando em metade do tamanho da nossa região a cada rodada. Assim, estreitando rapidamente os zeros. E o tempo todo, precisamos apenas verificar o valor da função ao longo dos pontos dessas curvas, em vez de verificá-lo nos muitos e muitos pontos do interior. Então, em certo sentido, o trabalho geral realizado é proporcional apenas ao perímetro do espaço de pesquisa e não à área completa, o que é incrível! Agora que você entende o que está acontecendo, é fascinante ver isso em ação. Dando-lhe alguma função e deixando procurar zeros. Como eu disse antes, números complexos, são bidimensionais. Então, vamos aplicá-lo a alguma equação com números complexos.

Por exemplo, aqui está o algoritmo que encontra os zeros da função 𝑥 elevado a cinco menos 𝑥 menos um sobre o plano complexo. Começou considerando uma região muito grande em torno da origem, que acabou tendo um índice de cinco. Cada vez que você encontra uma curva com um índice diferente de zero, divide-a ao meio e descubra o índice dessas duas curvas menores. É garantido que uma ou as duas tenham um índice diferente de zero. E quando você vê isso, sabe que existe um zero em algum lugar dentro dessa curva menor. Então, você continua da mesma maneira, pesquisando no espaço menor. Também paramos de explorar uma região se o caminho que estamos computando tropeçar uma vez no zero. O que realmente aconteceu uma vez para este exemplo aqui na metade direita.

Essas raras ocorrências interferem em nossa capacidade de calcular índices. Mas ei, temos um zero! E quanto as curvas cujo índice é zero, você não as explora mais. Talvez elas tenham uma solução por dentro; talvez não. Não temos garantias. E, deixando nosso solucionador de equações continuar da mesma maneira, eventualmente converge para muitos zeros para esse polinômio. A propósito, não é coincidência que o número total de índices neste exemplo seja cinco. Com números complexos, a operação 𝑥 elevado a 𝑛 corresponde diretamente a caminhar pela origem da saída 𝑛 vezes quando você caminha pela origem da entrada uma vez.

Portanto, o polinômio, para entradas suficientemente grandes, todos os termos que não sejam o termo principal se torna insignificante em comparação. Portanto, qualquer polinômio complexo cujo termo principal seja 𝑥 elevado a 𝑛 tem um índice 𝑛 em torno de uma curva grande o suficiente. Dessa forma, nossa tecnologia de índice realmente garante que todo polinômio complexo tenha zero. Esse é um fato tão importante que os matemáticos chamam de teorema fundamental da álgebra. Ter um algoritmo para encontrar soluções numéricas para equações como essa é extremamente prático. Mas o teorema fundamental da álgebra é um bom exemplo de como esses índices também são bastante úteis em nível teórico. Garantir a existência de uma solução para uma ampla classe de equações para condições adequadas. O que é muito mais o que os matemáticos gostam de pensar.

A Nagwa usa cookies para garantir que você tenha a melhor experiência em nosso site. Saiba mais sobre nossa Política de privacidade.