O conceito básico
Máximo e mínimo de uma função são os valores mais altos e mais baixos que uma função atinge em determinado intervalo. Não é nada de outro mundo, mas é onde muita gente erra pela primeira vez, especialmente quando o intervalo é fechado.
Como encontrar o máximo e mínimo de uma função na prática
O método padrão funciona assim: você calcula a derivada, acha os pontos críticos onde ela é zero ou não existe, avalia a função nesses pontos e também nas extremidades do intervalo. O maior valor entre todos esses é o máximo; o menor é o mínimo. Isso se chama Teorema do Valor Extremo e só vale para funções contínuas em intervalos fechados. Na hora de aplicar, o passo que as pessoas costumam pular é verificar onde a derivada não existe. Funções com módulo, como |x² - 4|, têm um ponto crítico nessa região e já era, se você só olhar para onde a derivada é zero, vai perder o candidato mais importante.
Eu me deparei com isso numa semana de plantão de Cálculo II. Um aluno trouxe o problema de encontrar o máximo e mínimo da função f(x) = x · |x - 1| no intervalo [0, 2]. A derivada convencional dá zero em x = 1/2, mas esquece completamente de notar que a expressão muda de formato em x = 1 porque há um módulo ali. Se você tratar como se fosse apenas x(x-1), o resultado fica errado. A solução prática foi escrever a função por partes: f(x) = x(1-x) para x menor ou igual a 1, e f(x) = x(x-1) para x maior que 1. Derivando cada trecho separadamente, o ponto crítico adicional em x = 1 surge naturalmente, e a avaliação correta nos pontos 0, 1/2, 1 e 2 dá o máximo em x = 2 com valor 2 e o mínimo em x = 1/2 com valor -1/4. Esse tipo de problema aparece com frequência em engenharia também, principalmente quando modelamos custos com descontos que mudam de regime em certo limiar. A derivada clássica não captura a mudança de regime automaticamente.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Pontos que ninguém conta no curso introdutório
A primeira coisa contra-intuitiva é que pontos críticos de derivada zero nem sempre são extremos. Um ponto de sela ou uma inflexão com derivada nula, como em f(x) = x³ no zero, passa direto pelo teste da derivada primeira sem ser máximo nem mínimo. O teste da segunda derivada ajuda, mas também falha quando f''(c) = 0. Nesses casos, o teste do primeiro redor é o que funciona: verifica o sinal da derivada nos vizinhos do ponto crítico. Se muda de positivo para negativo, é máximo local. Negativo para positivo, mínimo local. Sem mudança de sinal, não é extremum. Outra coisa que causa confusão é a diferença entre máximo global e máximo local. Você pode ter vários máximos locais num intervalo, mas o máximo global é apenas o maior deles. Em problemas de otimização aplicada, o que importa é o global. Um software numérico como o SciPy ou mesmo o Solver do Excel vai te entregar um máximo local qualquer se você não definir bem o domínio de busca. Já vi engenheiro configurar um problema de maximização de lucro com restrições lineares e o solver convergir para um ótimo local porque a função objetivo era não convexa. A única saída foi rodar com sementes diferentes ou usar um método global, o que dobra o tempo de processamento em problemas medianos.
Quando o método padrão falha e o que fazer
O método clássico de avaliação nos pontos críticos e nas bordas exige que a função seja contínua no intervalo fechado. Se houver uma descontinuidade, o teorema não se aplica. Pense em f(x) = 1/x no intervalo [-1, 1]. A função não está definida em zero, então não tem máximo nem mínimo globais ali, mesmo parecendo que sim quando se olha apenas os gráficos à esquerda e à direita de forma isolada. A Armadilha aqui é assumir que porque o gráfico mostra dois ramos, existe um extremo. Não existe. Para funções em dimensão maior, a coisa complica rápido. A derivada vaza para o gradiente, e os pontos críticos são onde o gradiente é zero ou indefinido. Mas aí entram os multiplicadores de Lagrange para restrições de igualdade, que adicionam outra camada de trabalho. Se você tem restrição de desigualdade, precisa verificar as condições KKT, que basicamente estendem Lagrange para o caso geral. Esse é o caminho usado em otimização operacional e em treino de modelos de machine learning com constraints.
Uma limitação séria do método analítico é o tempo. Para uma função polinomial de grau alto com muitos termos, resolver f'(x) = 0 pode exigir ferramentas numéricas. Métodos como Newton-Raphson ou Brent funcionam bem, mas dependem de boas estimativas iniciais. Eu costumo usar uma malha inicial espaçada, algo como 100 pontos no intervalo, para identificar regiões onde a função varia bastante, e aí refiná-la com Newton nas vizinhanças dos candidatos. Isso reduz o tempo médio de busca de uns 45 minutos para cerca de 6 minutos num problema típico de otimização unidimensional com ruído numérico.
Dica prática de implementação
Se você está programando isso, evite confiar cegamente na derivada simbólica de bibliotecas como SymPy para funções com partes definidas por casos ou com módulo. A derivada automática funciona melhor nesses casos, mas ainda assim ela pode non classificar corretamente o ponto de quebra. O workaround que eu uso é: discretizar o intervalo com muitos pontos, localizar os máximos e mínimos aproximados pela comparação direta, e depois refinar com um algoritmo de busca local a partir desses candidatos. Em Python, combine scipy.optimize.minimize com bounds e um método like L-BFGS-B, e use o resultado da grade inicial para escolher os pontos de partida. Isso resolve a maioria dos problemas práticos em menos de 10 segundos, dependendo da precisão desejada.