A figura abaixo mostra um sistema de duas molas com uma carga (representado pelo desenho em linha cheia) e sem carga (desenho em linha tracejada):
Após a carga ser aplicada no ponto , o sistema se deforma até atingir o equilíbrio no ponto , quando a energia potencial é mínima. A função da energia potencial () é dada pela equação abaixo:
Encontre a localização do ponto onde a energia potencial é mínima de duas maneiras:
- Plote a superfície e as curvas de nível da função ;
- Use com um ponto inicial .
Passo 1
O enunciado nos dá uma função e pede para que encontremos o mínimo dela usando dois métodos.
A primeira coisa que devemos entender bem antes de atacar o exercício é qual é o problema de otimização. Para isto, devemos ter bem claro:
- “O que eu quero minimizar?”, definindo a função objetivo;
- “O que eu quero minimizar depende do quê?”, definindo as variáveis de projeto.
O que queremos minimizar é a energia potencial do sistema de duas molas, representada pela função dada no enunciado:
Logo, a energia potencial do sistema de duas molas é minha função objetivo.
A função objetivo depende das variáveis e e de algumas constantes, todas indicadas na figura:
As variáveis e são as variáveis de projeto. Em outras palavras, queremos encontrar quanto e devem ser para que a energia potencial seja a menor possível.
Usaremos dois métodos para encontrar as coordenadas e que minimizam :
- Gerando a superfície e a curvas de nível: usaremos as funções e para gerar os gráficos. Se você não as conhece, não se preocupe, vamos ver tintim por tintim como elas funcionam;
- Usando , com um chute inicial .
Passo 2
Vamos começar pela letra a. Em um novo script, entre as constantes listadas no passo 1:
Em seguida, vamos criar dois vetores, e , representando uma faixa de valores que e podem assumir:
Os vetores e vão de a , com um passo de . Eles servirão para criar os eixos X e Y dos gráficos da superfície e das curvas de nível pedidos na letra a.
Para podermos usar as funções e do MATLAB, devemos criar matrizes a partir dos vetores e , que contêm as coordenadas dos vetores. Faremos isso usando a função :
A função pega os vetores e , que têm elementos, e cria duas matrizes quadradas e , de tamanho . Cada linha da matriz é o vetor , repetido vezes. Já cada coluna da matriz é o vetor , repetido vezes.
Para ver bem direitinho como o funciona, você pode rodar o script que você escreveu até agora e pedir ao MATLAB para imprimir e e compará-los, e fazer a mesma coisa para e .
A função serve para auxiliar na criação de gráficos em três dimensões. A matriz será o eixo X do gráfico da superfície e das curvas de nível da função . Já a matriz será o eixo Y.
O eixo Z dos gráficos será a energia potencial. Por isso temos que criar uma matriz de tamanho com os resultados de para cada elemento das matrizes e . Digite no MATLAB a função da energia potencial, substituindo e pelas matrizes e :
No print acima, eu “quebrei” a função em três linhas, para ela não ficar toda numa linha só e ficar ruim de ler. No MATLAB, fazemos quebras de linha colocando três pontos () onde queremos quebrar.
Repare também no uso do ponto ao lado das matrizes (por exemplo, ), ele indica que queremos realizar a operação em cada elemento da matriz.
Passo 3
Após ter criado as matrizes , e , podemos gerar os gráficos pedidos na letra a. Vamos começar com a superfície da função , que será gerada usando a função do MATLAB. A função tem o seguinte formato:
A plota uma superfície tridimensional com as curvas de nível abaixo dela. Ela gera um gráfico 3D com os valores da matriz no eixo X, da matriz no eixo Y e da matriz no eixo Z.
Vai dar para entender melhor aplicando a no exercício. Para gerar a superfície da função , adicione no script as seguintes linhas de código:
Na primeira linha, pedimos ao MATLAB para gerar uma figura com o comando , para termos o gráfico da superfície em uma janela diferente do gráfico das curvas de nível.
Na segunda linha, o comando cria a superfície da energia potencial, tendo no eixo X, no eixo Y e no eixo Z.
Na terceira linha, o comando faz com que o gráfico tenha uma barra de cores indicando a intensidade da energia potencial.
Na quarta linha, dizemos que o eixo X do gráfico corresponde à variável de projeto , com o comando .
Na quinta linha, dizemos que o eixo Y do gráfico corresponde à variável de projeto , com o comando .
Finalmente, na sexta linha, indicamos que o eixo Z do gráfico corresponde à energia potencial, com o comando .
Vamos executar o programa pra ver essa superfície:
Repare que logo abaixo da superfície, no plano , temos as curvas de nível da superfície.
Para analisar a superfície e identificar o ponto de mínimo, na janela do gráfico, use o botão “Rotate 3D”, destacado abaixo, para “girar” a superfície.
Podemos ver as coordenadas dos pontos da superfície clicando neles. O ponto com menor que encontrei está marcado na superfície e tem coordenadas , e . Contudo, eu não tenho certeza se esse realmente é o ponto de mínimo.
É difícil encontrar o ponto exato de mínimo olhando só a superfície. Por isso, vamos gerar as curvas de nível em um gráfico separado para ver se facilita.
Passo 4
Para gerar um gráfico de curvas de nível, usaremos a função , que tem a seguinte estrutura:
Esse comando cria um gráfico de curvas de nível, onde as isolinhas (linhas que ligam pontos de mesmo valor) correspondem aos valores da matriz . As matrizes e definem o eixo X e o eixo Y do gráfico de curvas de nível.
Para criar o gráfico de curvas de nível, digite no seu script os comandos:
Na primeira linha, pedimos ao MATLAB para criar uma segunda figura com o comando , para que o gráfico de curvas de nível seja gerado em uma janela diferente da janela onde foi plotada a superfície, no passo 3.
Na segunda linha, o comando cria o gráfico das curvas de nível da energia potencial, tendo no eixo X, no eixo Y e dando os valores para as isolinhas. As strings no final do comando () pedem ao MATLAB para mostrar o valor de cada curva do gráfico.
Na terceira linha, indicamos que o eixo X do gráfico do gráfico corresponde à variável de projeto , com o comando .
Na quarta linha, dizemos que o eixo Y do gráfico corresponde à variável de projeto , com o comando .
Bora rodar o programa pra ver as curvas de nível:
Repare que as curvas com menor estão mais no interior do gráfico e quanto mais afastados do centro, maior a intensidade de .
A curva de menor intensidade mostrada no gráfico é Isto significa que as coordenadas e que dão o mínimo estão no interior dessa curva e que a energia potencial mínima é pelo menos , mas pode assumir valores negativos. Podemos ver as coordenadas de certos pontos ao clicar sobre o ponto no gráfico. Na figura acima, achei o mesmo ponto de mínimo que encontrei no gráfico de superfície: as coordenadas , dão um .
Passo 5
Apesar de eu ter encontrado o mesmo ponto de mínimo, pode ser que na minha busca eu tenha deixado passar algum ponto com energia potencial menor. Por isso, vamos usar o para encontrar o ponto de mínimo de maneira mais precisa (e responder à letra b do exercício).
Antes de implementar o , vamos relembrar como ele é:
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.
Vamos criar uma nova função no MATLAB para representar a função objetivo . Abra um script novo e digite:
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 é um vetor de dois elementos contendo as variáveis de projeto do problema de otimização: e . A saída de é a variável , que é a energia potencial que queremos minimizar.
Repare que tive que entrar novamente com as constantes da função , listadas no passo 1.
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 das variáveis de projeto e , armazenado no vetor . O enunciado pediu para adotarmos .
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, isto é, o menor valor possível de , partindo de .
A saída de é o vetor , de dois elementos, com os valores de que dão o menor possível.
A terceira linha calcula o valor de usando a função , tendo como entrada o vetor dado por . Desta forma, encontramos a energia potencial mínima.
Vamos rodar o programa para ver o que o vai retornar e qual é a energia potencial mínima:
Encontramos que a energia potencial mínima é e ela ocorre em e .
Nossa, bem diferente dos valores que encontramos no gráficos, né? Pelo menos temos certeza que o resultado obtido usando é realmente o mínimo da função.
Resposta
A energia potencial mínima é e ela ocorre em e .