Exercícios Resolvidos de Derivadas Numéricas

Ver Teoria

Enunciado

Desenvolva um código que permita localizar o mínimo da função y = 2 x + 5 x 2 + 5 . Considere um intervalo de [-5, 5] e use diferenciação numérica.

Passo 1

A questão pede para localizarmos o mínimo de uma função usando diferenciação numérica.

Para encontrarmos o mínimo de uma função, temos que relembrar o conteúdo de derivadas de Cálculo 1.

No ponto mínimo de uma função, a primeira derivada é zero. É um ponto onde a tangente é representada por uma linha horizontal.

Entretanto, pontos máximos de função também tem a primeira derivada igual a zero. Para confirmar se um ponto onde a primeira derivada é igual a 0 é um ponto de mínimo ou máximo, devemos calcular a segunda derivada neste ponto. Se a derivada segunda for positiva, o ponto é um local de mínimo.

Logo, para este exercício, vamos determinar a primeira e a segunda derivadas de y = 2 x + 5 x 2 + 5 , por meio de diferenciação numérica, para x indo de -5 a 5. Em seguida, vamos achar o valor de x em que a primeira derivada d y d x é nula, e o chamaremos de x m i n . Então, vamos calcular a segunda derivada d ² y d x ² em x m i n , para ver se resulta em um valor positivo ou negativo e termos certez que se trata de um ponto mínimo.

Ao final, para termos as coordenadas do ponto mínimo, substituímos x m i n em y = 2 x + 5 x 2 + 5 e encontramos y m i n .

Passo 2

Primeiramente, vamos criar dois vetores, um representando o intervalo de x pedido no enunciado e outro com a função y , calculada para cada elemento do vetor x .

Crie um script novo no MATLAB e digite as duas linhas de código:

Na primeira linha, foi criado um vetor x que vai de -5 a 5, a um passo de 0,01. Eu escolhi este passo para ter um pouco mais de precisão no resultado, mas você pode escolher o passo que quiser.

Na segunda linha, calculamos a função y para cada elemento do vetor x , por isso temos o ponto ao lado de x . Por exemplo, o comando x . ^ 2 elevada cada elemento de x ao quadrado. O resultado é armazenado no vetor y , que tem o mesmo comprimento de x .

Passo 3

Depois de criarmos os vetores x e y , podemos determinar as derivadas primeira e segunda de y . Vamos começar com a a derivada primeira. Para encontrarmos d y d x por diferenciação numérica, temos que gerar dois vetores, um representando d y e outro representando d x . O vetor d y teria a diferença de y de um valor de x a outro e o vetor d x teria a diferença entre um valor de x e outro.

Estes vetores são gerados por meio da função d i f f ( ) , que tem a seguinte estrutura:

Y   =   d i f f ( X ,   n )

Ela calcula n   vezes a diferença entre os elementos adjacentes do vetor X e nos dá o resultado na forma do vetor Y .

Os dois vetores são gerados por meio das seguintes linhas de código:

Na primeira linha, é criado o vetor d x , que contém as diferenças entre elementos adjacentes do vetor x . Para criar o vetor d x , a funçao d i f f ( ) faz um elemento de x menos o elemento à esquerda, começando a partir do segundo elemento de x .

Na segunda linha, é feita a mesma coisa, mas com o vetor y . A variação de y é armazenada no vetor d y .

Note que não entramos nenhum valor para n , porque queremos que a diferença seja feita uma vez. Quando não entramos com nenhum valor para n na função d i f f ( ) , por o padrão o MATLAB adota n = 1 .

Passo 4

Com os vetores d x e d y criados, podemos calcular d y d x por meio da linha de código:

Com este comando, dividimos cada elemento do vetor d y pelo elemento do vetor d x que esteja na mesma posição e o resultado é armazenado no vetor d y d x .

O vetor d y d x representa a derivada primeira de y obtida por meio de diferenciação numérica. Com o vetor d y d x , podemos calcular a derivada segunda d ² y d x ² .

Passo 5

Após determinarmos a primeira derivada, vamos calcular a segunda derivada de y , por meio de diferenciação numérica. Assim como fizemos para a primeira derivada no passo 3, para determinar d 2 y d x 2 , precisamos construir dois vetores, um representando d 2 y e outro representando d x 2 , e dividir um pelo outro.

Para isto, usamos a função d i f f ( ) de novo. No MATLAB, digite a linha de código:

Com este comando, aplicamos a função d i f f ( ) no vetor d y d x , que representa d y d x , e armazenamos o resultado no vetor d 2 y . Calculando a diferença entre os elementos adjacentes de d y d x , é como se estivéssemos calculando a derivada de d y d x , que é consequentemente d 2 y d x 2 .

Para criar o vetor d x 2 , vamos criar um vetor auxiliar chamado x d , com tamanho compatível ao vetor d y d x :

A linha de código acima diz que o vetor x d é um pedaço do vetor x , começando do segundo elemento de x e indo até o final de x (indicando por e n d ). Precisamos criá-lo pois o vetor d y d x tem um elemento a menos que o vetor x e para calcular d 2 y d x 2 , precisamos que os vetores d 2 y e d x 2 tenham o mesmo comprimento.

Para criar o vetor d x 2 , digite a linha de código:

O vetor d x 2 contém a diferença entre os elementos adjacentes de x d e representa o vetor d x 2 .

Passo 6

Com os vetores d x 2 e d 2 y criados, podemos calcular d ² y d x ² por meio da linha de código:

Com este comando, dividimos cada elemento do vetor d 2 y pelo elemento do vetor d x 2 que esteja na mesma posição e o resultado é armazenado no vetor d 2 y d x 2 .

O vetor d 2 y d x 2 representa a derivada segunda de y obtida por meio de diferenciação numérica.

A partir de d x d y e d 2 y d x 2 , podemos encontrar o ponto mínimo de y .

Passo 7

Em um ponto de mínimo, d y d x = 0 . Por isso, temos que encontrar o elemento do vetor d y d x que seja igual a 0 e sua posição, e ver qual elemento do vetor x d está na mesma posição. Este elemento de x d será a coordenada x do ponto mínimo da função, isto é, x m i n .

Vale destacar que usamos o vetor x d e não o vetor x . Se usarmos o vetor x para encontrar x m i n , x m i n não estará exatamente na mesma posição do elemento nulo de d y d x , pois o vetor x tem um elemento a mais do que d y d x .

Contudo, como calculamos d y d x por diferenciação numérica, dificilmente o vetor d y d x terá um elemento exatamente igual a 0. Por isto, devemos encontrar o elemento de d y d x que seja o mais próximo possível de 0. Para encontrarmos este valor, usaremos a função m i n ( ) do MATLAB, que tem a seguinte estrutura:

[ m i n i m o , i n d i c e ]   =   m i n ( X )

Na função m i n ( ) , entramos com um vetor X e ela nos retorna o menor elemento de X , representado por m i n i m o , e a posição onde ele se encontra em X , representado por i n d i c e .

Para encontrar o elemento mais próximo de 0 em dydx, entre com a linha de código:

Com o comando a b s ( 0 - d y d x ) dentro da função m i n ( ) , criamos um vetor que contém o valor absoluto da diferença entre 0 e cada elemento de d y d x . Em seguida, a função m i n ( ) vai procurar o menor elemento deste vetor resultante e vai armazenar seu valor na variável e r r o e sua posição na variável i n d i c e .

A posição do menor elemento do vetor a b s ( 0 - d y d x ) nos indica a posição do elemento de d y d x que é mais próxima de 0 e a posição de x m i n no vetor x d .

Passo 8

Vamos verificar se o elemento de dydx na posição indice realmente está próximo de 0? Para isto, entre com o comando:

Este comando armazena na variável d 0 o elemento de d y d x que se encontra na posição indice.

Para encontrar x m i n , digite a linha de código:

Com este comando, o elemento de x d na posição i n d i c e é armazenado na variável x _ m i n . x _ m i n é para ser a coordenada x do ponto mínimo de y .

Se você rodar o programa que temos até agora e pedir para ver d 0 e x _ m i n , você terá estes resultados:

O valor mais próximo de 0 de d y d x é -0,05 e x m i n = - 0,2 .

Para nos certificarmos que x _ m i n é mesmo uma das coordenadas do ponto mínimo, vamos ver o valor da segunda derivada no vetor d 2 y d x 2 que se encontra na mesma posição de x _ m i n . Contudo, como d 2 y d x 2 tem um elemento a menos do x d e d y d x , não podemos usar diretamente o valor de i n d i c e . Temos que subtrair 1 de i n d i c e para encontrar o valor que queremos:

Nesta linha de código, o elemento do vetor d 2 y d x 2 que se encontra na posição i n d i c e - 1 é armazenado em d 2 .

Para que x _ m i n seja a coordenada x de um ponto de mínimo, d 2 deve ser positivo. Rodando o programa de novo e pedindo pra ver d 2 , temos:

Como d 2   é positivo, x _ m i n realmente é uma das coordenadas do ponto mínimo.

Passo 9

Para encontrar a coordenada em y do ponto mínimo, substituímos x _ m i n na função y = 2 x + 5 x 2 + 5 com a seguinte linha de código:

O resultado é armazenado em y _ m i n e representa a coordenada em y do ponto mínimo. Rodando o programa novamente e imprimino y _ m i n , temos:

Resposta

O ponto mínimo de y = 2 x + 5 x 2 + 5 é x m i n y m i n = ( - 0,2 4,8   )