Exercícios Resolvidos de Otimização

Ver Teoria

Enunciado

Como achar o máximo da função y = 2 x + 5 x ² + 5 com f m i n s e a r c h ?

Passo 1

O enunciado nos dá uma função e pede para encontrarmos o máximo dela usando a função de otimização do MATLAB f m i n s e a r c h .

A primeira coisa que devemos entender bem antes de atacar o exercício é qual é o problema de otimização. Para isto, devemos ter muito claro:

  • “O que eu quero maximizar?”, definindo a função objetivo;
  • “O que eu quero maximizar depende do quê?”, definindo as variáveis de projeto.

O que queremos maximizar é a função dada no enunciado: queremos encontrar o valor máximo de y . Logo, a função y = 2 x + 5 x ² + 5 é a função objetivo do problema de otimização.

A função do enunciado depende de x . Logo, a variável de projeto é x .

Passo 2

Passo 3

Passo 4

Antes de partir para o MATLAB, vamos relembrar como é a função f m i n s e a r c h :

x   =   f m i n s e a r c h ( @ f u n ç ã o , x 0 )

Precisamos fornecer a ela no mínimo duas entradas:

  • @ f u n ç ã o : uma função representando a função objetivo;
  • x 0 : um vetor contendo um “chute” inicial das variáveis de projeto.

A saída de f m i n s e a r c h é um vetor x contendo os valores das variáveis de projeto que minimizam a função objetivo.

“Ué, mas não queremos encontrar o máximo da função?”, você deve estar se perguntando. Para encontrar o máximo de uma função, podemos também usar f m i n s e a r c h , mas devemos colocar um sinal de menos na frente da função objetivo, como veremos a seguir.

A primeira coisa que vamos fazer é entrar no MATLAB a função dada no enunciado. Em um script novo, crie uma função contendo a equação y = 2 x + 5 x ² + 5 :

Chamei a função que contém a função objetivo de f _ o b j , mas você pode chamar do que quiser. f _ o b j tem como entrada a variável x , que é a variável de projeto do problema de otimização. A saída de f _ o b j é a variável y , que é o que queremos maximizar.

Como queremos encontrar o máximo da função, vamos colocar um sinal de menos na frente da função objetivo, com se estivéssemos multiplicando ela por - 1 :

Logo, a função objetivo torna-se y = - 2 x + 5 x 2 + 5 = - 2 x - 5 x 2 - 5 .

Em outras palavras, maximizar y = 2 x + 5 x ² + 5 é a mesma coisa que minizar y = - 2 x - 5 x 2 - 5 .

Após criar um script com a função objetivo, vamos implementar a f m i n s e a r c h . Em um novo script, salvo na mesma pasta onde está o script da função f _ o b j , digite as linhas de código:

Na primeira linha, entramos com o “chute” inicial da variável x , armazenado na variável x 0 . Escolhi x 0 = 1 , mas você pode adotar outro valor.

Na segunda linha, usamos f m i n s e a r c h . Para indicar a função objetivo em f m i n s e a r c h , usamos o nome da função criada com a função objetivo com um @ na frente. Por isso a primeira entrada de f m i n s e a r c h , neste caso, é @ f _ o b j (caso tenha dado um nome diferente, não esqueça de trocar!). O algoritmo de otimização por trás de f m i n s e a r c h vai procurar o mínimo da função objetivo (que neste caso é y = - ( 2 x + 5 x 2 + 5 ) ), isto é, o menor valor possível de y , partindo de x 0 .

A saída de f m i n s e a r c h é a variável x com o valor de x que dá o menor y possível.

Vamos rodar o programa e ver o que o MATLAB nos retorna:

Vixe, o MATLAB foi testando vários valores de x , partindo de x 0 , e não conseguiu encontrar o mínimo de y = - ( 2 x + 5 x 2 + 5 ) , isto é, o máximo de y = 2 x + 5 x ² + 5 . Internamente na função f m i n s e a r c h , existe um limite de vezes que o MATLAB testa valores de x . Se ele atinge esse limite e não encontra nenhum resultado, ele retorna a mensagem acima.

Passo 5

Mas por que será que o MATLAB não conseguiu encontrar o máximo de y = 2 x + 5 x ² + 5 ? Para entendermos o motivo, vamos plotar o gráfico de y = f ( x ) .

Em um novo script, digite as linhas de código:

Na primeira linha, criamos um vetor x que vai de - 5 a 5 , com um passo de 0,1 . Esse vetor vai ser o eixo horizontal do gráfico.

Na segunda linha, calculamos y = 2 x + 5 x ² + 5 para cada elemento do vetor x e armazenamos os resultados no vetor y . O vetor y será o eixo vertical do gráfico.

Na terceira linha, o gráfico de y = 2 x + 5 x ² + 5 é gerado.

Executando o programa, temos o gráfico de y = 2 x + 5 x ² + 5 :

Note bem que a função y = 2 x + 5 x ² + 5 representa uma parábola com concavidade para cima, logo, ela possui um ponto mínimo com coordenadas ( x m i n , y m i n ) , destacado em vermelho na figura, mas não possui um ponto de máximo.

Quanto mais eu me afasto de x m i n , mais o y aumenta, não havendo um “teto”. Por isso o MATLAB não conseguiu encontrar um ponto de máximo da função y = 2 x + 5 x ² + 5 .

Resposta

Não é possível encontrar o máximo de y = 2 x + 5 x ² + 5 pois se trata de uma parábola com concavidade para cima.