Exercícios Resolvidos de Otimização

Ver Teoria

Enunciado

Dados os pontos experimentais:

Ajuste os coeficientes ( a , b ) de uma reta ( y   =   a x + b ) aos dados experimentais.

Passo 1

O enunciado nos dá alguns pontos experimentais e pede para encontrarmos uma equação da reta que corresponda aos dados. Para isto, faremos o que chamamos de “ajuste de dados” para encontrar os coeficientes a e b da reta.

Normalmente, quando temos N pontos com coordenadas x i ,   y i , i = 1 , … , N , para encontrarmos o polinômio de grau m y = f x = a 0 + a 1 x + … + a m x m que melhor represente esse conjunto de pontos, minimizamos o erro quadrático médio e :

e = ∑ i = 1 N y i - f ( x i ) 2

e = ∑ i = 1 N y i - a 0 - a 1 x i + … + a m x i m 2

Para o exercício, como queremos ajustar uma reta tendo N = 6 pontos, temos m = 1 e o erro quadrático médio torna-se:

e = ∑ i = 1 6 y i - a 0 - a 1 x i 2 = ∑ i = 1 6 y i - b - a x i 2

Para ajustar a reta aos pontos, precisamos minimizar e , logo, trata-se de um problema de otimização. Vamos identificar a função objetivo e as variáveis de projeto:

  • “O que eu quero minimizar?”: queremos minimizar o erro quadrático médio e , logo, a função objetivo é:
  • e = ∑ i = 1 6 y i - b - a x i 2

  • “O que eu quero minimizar depende de quê?”: e depende dos pontos experimentais, dados pelo enunciado, e dos coeficientes a e b , que são desconhecidos e queremos determinar de forma que o erro e seja mínimo. Logo, as variáveis de projeto são os coeficientes da reta a e b .

Resumindo, queremos encontrar os coeficientes da reta y   =   a x + b que resultem em uma reta o mais próxima possível dos dados experimentais. Para encontrar esses coeficientes usaremos a função f m i n s e a r c h , pois precisamos minimizar o erro quadrático médio para determinar a equação da reta.

Passo 2

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.

Vamos começar criando a função representando a função objetivo. Em um novo script do MATLAB, crie uma função com dois vetores, x e y , contendo os dados experimentais:

Eu chamei a função de a j u s t e _ r e t a , mas você pode chamar como quiser. Ela tem como entrada um vetor de dois elementos chamado c o e f , representando as variáveis de projeto (os coeficientes a e b ), e como saída a variável e , que será o erro quadrático médio, que queremos minimizar.

Abaixo dos vetores x e y, entre com a função objetivo. Digite as seguintes linhas de código:

Na primeira linha, dizemos que o primeiro elemento do vetor c o e f é a variável a , representando o coeficiente que multiplica o x na equação da reta y = a x + b , isto é, o coeficiente angular.

Na segunda linha, dizemos que o segundo elemento do vetor c o e f é a variável b , representando o coeficiente que está sozinho na equação da reta y = a x + b , isto é, o coeficiente linear.

Na terceira linha, criamos uma variável e = 0 . Ela vai armazenar o erro quadrático médio, que queremos minimizar. Como o erro quadrático é calculado usando um somatório, usamos um laço f o r para implementá-lo no MATLAB.

A partir da quarta linha, temos o laço f o r para entrarmos com a função objetivo. Na quarta linha, inicia-se o laço f o r , definindo uma variável de controle i   que vai de 1 ao número de elementos do vetor x (que é N = 6 e é calculado usando a função l e n g t h , que retorna o número de elementos de um vetor).

Na quinta linha, calculamos o erro quadrático e . A variável e é atualizada a cada iteração, somando o valor obtido na iteração atual com o valor obtido na iteração anterior. Por isso temos e = e + . . . na quinta linha e tivemos que definir antes do laço f o r e = 0 , para não termos problemas com a primeira iteração ( i = 1 ).

Na sexta linha, encerra-se o laço f o r .

No final, a função a j u s t e _ r e t a ficou assim:

Passo 3

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 a j u s t e _ r e t a , digite as linhas de código:

Na primeira linha, entramos com o “chute” inicial do vetor c o e f , armazenado na variável c o e f 0 . Escolhi c o e f 0 = [ 1 ,   1 ] , mas você pode adotar outros valores.

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, é @ a j u s t e _ r e t a (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, isto é, o menor valor possível do erro quadrático médio e , partindo de c o e f 0 .

A saída de f m i n s e a r c h é vetor c o e f com os coeficientes da reta a e b que dão o menor erro e possível.

Vamos rodar o programa e ver o que o f m i n s e a r c h retorna pra gente:

Temos que os coeficientes da reta y   =   a x + b que dão o melhor ajuste para os pontos experimentais são a = 1,0626 e b = - 0,0574 .

Passo 4

Uma forma legal de visualizar o resultado é plotarmos a reta com os coeficientes encontrados junto com os dados experimentais.

No script do MATLAB onde você implemetou o f m i n s e a r c h , digite as linhas de código.

Nas duas primeiras linhas, entramos com os dados experimentais dados no enunciado, em forma de vetores.

Na terceira linha, usando o vetor x , calculamos os valores de y usando a equação da reta com os coeficientes dados pelo f m i n s e a r c h . O resultado é armazenado no vetor y _ a j .

Em seguida, adicione o comando:

Ele gera um gráfico dos dados experimentais junto com a reta obtida a partir da otimização. O primeiro conjunto x , y , ' o ' pede ao MATLAB para plotar o vetor y em função do vetor x (os dados experimentais), representando os pontos por bolinhas. O segundo par x , y _ a j plota a reta obtida a partir da otimização.

Executando o programa, temos:

Note como a reta e os dados experimentais estão bem próximos, indicando que a nossa otimização funcionou.

Resposta

Os coeficientes da reta y   =   a x + b que dão o melhor ajuste para os pontos experimentais são a = 1,0626 e b = - 0,0574 .