Como achar o máximo da função com ?
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 .
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 . Logo, a função é a função objetivo do problema de otimização.
A função do enunciado depende de . Logo, a variável de projeto é .
Passo 2
Passo 3
Passo 4
Antes de partir para o MATLAB, vamos relembrar como é a função :
Precisamos fornecer a ela no mínimo duas entradas:
- uma função representando a função objetivo;
- um vetor contendo um “chute” inicial das variáveis de projeto.
A saída de é um vetor 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 , 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 :
Chamei a função que contém a função objetivo de , mas você pode chamar do que quiser. tem como entrada a variável , que é a variável de projeto do problema de otimização. A saída de é a variável , 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 :
Logo, a função objetivo torna-se .
Em outras palavras, maximizar é a mesma coisa que minizar .
Após criar um script com a função objetivo, vamos implementar a . Em um novo script, salvo na mesma pasta onde está o script da função , digite as linhas de código:
Na primeira linha, entramos com o “chute” inicial da variável , armazenado na variável . Escolhi , mas você pode adotar outro valor.
Na segunda linha, usamos . Para indicar a função objetivo em , usamos o nome da função criada com a função objetivo com um na frente. Por isso a primeira entrada de , neste caso, é (caso tenha dado um nome diferente, não esqueça de trocar!). O algoritmo de otimização por trás de vai procurar o mínimo da função objetivo (que neste caso é ), isto é, o menor valor possível de , partindo de .
A saída de é a variável com o valor de que dá o menor possível.
Vamos rodar o programa e ver o que o MATLAB nos retorna:
Vixe, o MATLAB foi testando vários valores de , partindo de , e não conseguiu encontrar o mínimo de , isto é, o máximo de . Internamente na função , existe um limite de vezes que o MATLAB testa valores de . 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 ? Para entendermos o motivo, vamos plotar o gráfico de
Em um novo script, digite as linhas de código:
Na primeira linha, criamos um vetor que vai de a , com um passo de . Esse vetor vai ser o eixo horizontal do gráfico.
Na segunda linha, calculamos para cada elemento do vetor e armazenamos os resultados no vetor . O vetor será o eixo vertical do gráfico.
Na terceira linha, o gráfico de é gerado.
Executando o programa, temos o gráfico de :
Note bem que a função representa uma parábola com concavidade para cima, logo, ela possui um ponto mínimo com coordenadas , destacado em vermelho na figura, mas não possui um ponto de máximo.
Quanto mais eu me afasto de , mais o aumenta, não havendo um “teto”. Por isso o MATLAB não conseguiu encontrar um ponto de máximo da função .
Resposta
Não é possível encontrar o máximo de pois se trata de uma parábola com concavidade para cima.