Você está na página 1de 11

UNIVERSIDADE

FEDERAL DE SANTA CATARINA


DEPARTAMENTO DE ENGENHARIA ELTRICA
EEL7031 COMPUTAO CIENTFICA II

Aluno: Eduardo Steffens Matrcula: 11202837 Turma: 03202B


Otimizao de Funo pelo Mtodo do Gradiente e Mtodo de Newton



Introduo

Baseado nos conhecimentos sobre mtodo do gradiente e mtodo de Newton, e
tambm pelo conhecimento prvio ao software Matlab, este relatrio tem como objetivo
responder o que foi requerido sobre a otimizao de uma funo de duas variveis pelo
mtodo do gradiente com auxlio do mtodo de Newton para busca linear.

Embora seja possvel e fcil de resolver este tipo de problema manualmente, o
processo de resoluo seria extremamente braal caso o resultado necessite de muitas
iteraes at convergir a um valor que satisfaa a condio de parada. Portanto, o cdigo
foi inteiramente desenvolvido em Matlab.
Desenvolvimento

Para alcanar o objetivo, a estratgia utilizada foi indicada no roteiro, quatro
diferentes funes foram criadas em separado, e sua organizao foi dada por um arquivo
topo.m (este no est no roteiro, entretanto por dificuldades de trabalhar com o operador
@ adotou-se um mtodo prprio) na qual era responsvel por ordenar as funes para o
momento que elas devem ser chamadas, outra funo importante do topo.m armazenar
os dados que sero utilizado a seguir. Embora a preciso exigida seja da ordem de 10-5,
foram utilizados oito algarismo significativos pra garantir uma melhor exatido nos
valores encontrados.

Os seguintes parmetros foram utilizados:


-

Preciso/Tolerncia para mtodo do gradiente:

= 1 105
-

Preciso/Tolerncia para mtodo de Newton:


= 1 105

Valor Inicial para mtodo de Newton:


(!) = 5

Limite mximo de iteraes para ambos mtodos:


= 50

Soluo Inicial para mtodo do gradiente, cuja norma euclidiana seja maior que
trs:
(!) = (3, 4)!

(!)

3! + 4! = 5 > 3
1

Foi solicitado a respostas dos seguintes itens:


1. A primeira iterao do algoritmo do gradiente, incluindo Newton:


Aps todas as caractersticas do problema definidas, o algoritmo est encapsulado
em um loop que verifica se (!) ! menor que . O loop tambm verifica se a
quantidade de iteraes para o mtodo do gradiente no foi excedido, para isto, iremos
definir o inicio com k = 0.

Com as informaes acima apresentadas, o algoritmo inicia chamando a funo
fun.m, responsvel por calcular (!) . A funo fun.m tem como entrada o valor do
vetor soluo (!) (nesta primeira iterao (!) ) e retorna ao topo.m o valor de (!) e
(!) . Vejamos a seguir os passos dados:

(!)

(!)

A funo x! , !

declarada em seguida as derivadas parciais em relao a x!

e x! so tomadas em ordem de termos o (!) , temos ento o seguinte:


(!)

(!)

x ! , !

= (1 + 1)! + (1 + 2 1)! + 2(2 )!

3,4 = (3 + 1)4 + (3 + 4 1)2 + 2(4)4 3,4 = 804

f x (!)

f 3,4 =

f 1 , 2
x!
=
f 1 , 2
x!

4(x! + 1)! + 2(x! + x! 1)



2 x! + x! 1 + 8(x! )!

4(3 + 1)! + 2(3 + 4 1)


268
f 3,4 =

524
2 3 + 4 1 + 8(4)!


Aps calculados, estes dados retornam para o topo.m onde sero utilizados na
prxima funo a ser chamada metodoGradiente.m, esta ser responsvel por calcular a
norma do gradiente a fim de garantir que o processo esteja convergindo a soluo que
minimiza a funo dada. A funo metodoGradiente.m nesta iterao tem como entrada
o vetor 3,4 = (268, 524)! e , como sada, a norma euclidiana deste vetor.
(!)
3,4

268! + 524! 3,4

+ !
!

= 588.55756000 >


A norma euclidiana do gradiente aplicado ao valor inicial (!) maior que , ou
seja, devemos continuar o processo iterativo. O valor da norma retornado ao topo.m
para fazer o teste da convergncia antes do incio da prxima iterao. O prximo passo
gerar ! e ! () para formar a funo = ! , ! , onde valor de ser
descoberto atravs do mtodo de Newton. Atravs do topo.m, a funo funAlpha.m ser
chamada, as entradas para esta iterao so (!) = (!) = (3,4)! e tambm (!) =
3,4 = (268, 524)! , a sada ser a funo , vejamos:

! , ! = (! + 1)4 + (! + ! 1)2 + 2(! )4

Ento, ! e ! () sero criados da seguinte maneira:


!

! = !

f !

! = 3 268
!

! = ! f !
! = 4 524

Substituindo ! e ! , respectivamente, por ! e ! em ! , ! , temos:


1 , 2

= (3 268 + 1)4 + (3 268 + 4 524 1)2 + 2(4 524)4


= (4 268)4 + (6 792)2 + 2(4 524)4


Atravs do mtodo de Newton iremos descobrir o valor de que minimiza a
funo (), ou seja, este tambm um problema de otimizao de funes, para isto,
utilizaremos mais uma funo chamada metodoNewton, cuja entradas so (), itmax e
. Para a primeira iterao no mtodo do gradiente, temos 22 iteraes no mtodo de
Newton, visto que o processo repetitivo, iremos mostrar as duas primeiras (n = 0 e n = 1)
e as duas ltimas (n = 21 e n = 22) iteraes , o valor inicial para 5. A frmula abaixo
seria utilizada na obteno da raiz de utilizando mtodo de Newton.
!!! = !

(! )

(! )


No entanto, estamos interessados no min ! , ! temos que trabalhar sobre a
derivada de ! , ! como a funo principal no mtodo de Newton, conforme a frmula
que iremos mostrar a seguir, tambm iremos precisar da segunda derivada de ! , ! .
Ento a frmula utilizada foi a seguinte:
!!! = !

(! )

(! )

= (4 268 )4 + (6 792 )2 + 2(4 524 )4


! ( ) = 1072 4 268 3 1584 6 792 1 4192(4 524 )3
= 861888(4 268 )2 + 1254528 + 6589824(4 524 )2


Logo aps, calcula-se !!! e calcula-se o erro que dado por ! !!! que
far com que o mtodo de Newton se repita at que o erro seja menor que . Ao fim de
cada iterao ! recebe o valor de !!! , o contador de iteraes n incrementado para
tambm servir como critrio de parada caso seja necessrio. Vejamos:

n = 0:

! = 5
! = !

! !
1072 4 268! ! 1584 6 792! ! 4192(4 524! )!
=
!! !
861888 4 268! ! + 1254528 + 6589824(4 524! )!
= 3.33595800

! (+1 ) = 1072 4 268+1 3 1584 6 792+1 1 4192(4 524+1 )3

= 2.29936370 1013

= ! !!! = |5 3.33595800| = 1.66400000 >


continuar

n = 1:
! !
1072 4 268! ! 1584 6 792! ! 4192(4 524! )!
! = ! !!
=
!
861888 4 268! ! + 1254528 + 6589824(4 524! )!
= 2.22659640
! (+1 ) = 1072 4 268+1 3 1584 6 792+1 1 4192(4 524+1 )3

= 6.81293060 1012

= ! !!! = 3.33595800 2.22659640 = 1.10940000 >

continuar


O processo continua ao longo de n = 2 at n = 20 nas quais sero omitidas.
Teremos as seguintes finalizaes para o processo iterativo do mtodo de Newton:

Da iterao n = 20, temos !" = 0.00926006

n = 21:

!!

! !"
1072 4 268!" ! 1584 6 792!" ! 4192(4 524!" )!
= !" !!
=
!"
861888 4 268!" ! + 1254528 + 6589824(4 524!" )!
= 0.00914097
! (+1 ) = 1072 4 268+1 3 1584 6 792+1 1 4192(4 524+1 )3

= 35.708025

= ! !!! = 0.00926006 0.00914097 = 0.00011909 >


continuar

n = 22:

!" = !!

! !!
1072 4 268!! ! 1584 6 792!! ! 4192(4 524!! )!
=
!! !!
861888 4 268!! ! + 1254528 + 6589824(4 524!! )!
= 0.00913617

! (+1 ) = 1072 4 268+1 3 1584 6 792+1 1 4192(4 524+1 )3

= 0.054551486

= ! !!! = 0.00914097 0.00913617 = 0.00000480 <

parar


Realizado o processo iterativo do mtodo de Newton, o ltimo valor calculado para
, neste caso, !" = 0.00913617 que equivale ao proposto no problema, este
(!) (!)
retornado ao topo.m onde ser calculado os novos valores para (!) = (!) = (! , ! )!
que sero dados por:
!

!
!

= 3 0.00913617 268 !
!

= ! f !

= 0.55150629
!

= ! f !
!

= 4 0.00913617 524 !

= 0.78735336


Achado os novos valores para (!) , incrementamos o contador de iteraes k do
mtodo do gradiente, e portanto, podemos repetir todo o processo acima apresentado
para a segunda iterao do mtodo de gradiente. Apenas para resumir os resultados
obtidos, acompanhe na tabela abaixo os resultados para as demais iteraes:
k
0
1
2
3
4
5
6
7
8
9

()
804.00000000
8.09040869
2.99905231
1.61992167
1.09474203
0.98610815
0.98354632
0.98352982
0.98352976
0.98352976

()


268.00000000
12.46727442
-1.87045490
2.68934491
-0.63403233
0.16802468
-0.00864965
0.00082913
-0.00003305
0.00000307

()


524.00000000
-6.37649637
-3.65709838
-1.37548895
-1.23965490
-0.08593769
-0.01691175
-0.00042410
-0.00006462
-0.00000165

()
588.55756000
14.00330800
4.10767210
3.02068630
1.39238690
0.18872620
0.01899536
0.00093130
0.00007258
0.00000348

()
0.00913617
0.06759077
0.16345506
0.12884831
0.10695132
0.14478087
0.09137859
0.14719282
0.09122017
0.14761085

n
22
18
12
11
9
5
4
3
3
3

()


0.55150629
-0.29116637
0.01456894
-0.33194861
-0.26413801
-0.28846477
-0.28767438
-0.28779642
-0.28779341
-0.28779386

()


-0.78735336
-0.35636107
0.24141015
0.41863958
0.55122231
0.56366444
0.56520981
0.56527224
0.56527813
0.56527837

Os valores acima tambm foram apresentados para uma melhor visualizao e


interpretao dos grficos apresentados no prximo tpico.

Vale observar que quando k = 9, (!) ! < . Ou seja, de fato o mtodo do
gradiente convergiu na dcima iterao, resultando ento nos seguinte vetor de soluo
(!)
(!)
x! = 0.28779386 e x! = 0.56527837 que correspondem ao min 1 , 2 =
(1 + 1)! + (1 + 2 1)! + 22 ! = 0.98352976.
(!)

(!)


O mesmo cdigo converge para o mesmo valor x! e x! para diferentes (!) ,
mudando o nmero iteraes no mtodo do gradiente e de Newton.


()

()

2. Os grficos com os valores de () = ,

, () , () ao longo

das iteraes:
-

(!)

(!)

Grfico de (!) = ! , !

(!)

(!)

O problema encontrado que na primeira iterao, ! , !

assume um

nmero muito alto se comparado aos demais resultados de outras iteraes, portanto a
visualizao fica prejudicada, deste modo, podemos ver as demais iteraes
desconsiderando a primeira para uma melhor visualizao:

Grfico de (!)


O problema encontrado que na primeira iterao, (!) assume um nmero
muito alto se comparado as demais resultados de outras iteraes, portanto a visualizao
fica prejudicada, deste modo, podemos ver as demais iteraes desconsiderando a
primeira para uma melhor visualizao, vale tambm ressaltar que alguns pontos se
sobrepe um ao outro.


Para a anlise de convergncia, analisar (!) ! mais til, podemos ver que
os valores tendem a zero, o que esperado visto que uma das condies que a norma
seja menor que a tolerncia = 1 105 .

Grfico de (!) :



3. Nmero de iteraes do mtodo de Newton em cada iterao do mtodo do
gradiente:

Cada iterao k no mtodo do gradiente produz a quantia de iteraes n no


mtodo de Newton conforme a tabela abaixo:

Iterao k
Mtodo do Gradiente
0
1
2
3
4
5
6
7
8
9

Nmero de Iteraes n
do Mtodo de Newton
22
18
12
11
9
5
4
3
3
3

4. Valor timo de () e o nmero de iteraes fornecido pelo mtodo do


gradiente:

Utilizando 10 iteraes pelo mtodo do gradiente, foi possvel encontrar o seguinte
(!)
tal que a preciso = 1 105 , utilizando-se de 8 algarismos significativos:
()

()

() = () = ( , ) = (. , . )

De modo a ter uma comparao, atravs da funo fminsearch do prprio Matlab
foi encontrado:
(!) = (0.28777203, 0.56524650)!

E atravs do site WolframAlpha.com, este foi o resultado encontrado:


(!) = (0.28779385, 0.56527839)!


Como podemos ver, o valor encontrado pelo algoritmo desenvolvido no Matlab, se
aproxima bem com o valor de duas outras fontes, os valores comeam a diferir a partir do
quinto algarismo significativo pela funo fminsearch, e diferindo no oitavo algarismo
significativo pelo WolframAlpha.

5. Execute o algoritmo novamente considerando em cada iterao do mtodo de


Newton como o valor inicial igual ao valor da raiz obtida na iterao
anterior. Apresente apenas o nmero de iteraes do mtodo de Newton
encontrada em cada iterao do mtodo do gradiente:

Utilizando o valor inicial de (!) = 5 para a primeira iterao do mtodo do
gradiente e utilizando a raz obtida na iterao anterior como valor inicial para o mtodo
de Newton, temos o seguinte:
Iterao k
Mtodo do Gradiente
0
1
2
3
4
5
6
7
8
9

Nmero de Iteraes n
do Mtodo de Newton
22
5
4
4
3
3
3
2
2
2

Podemos concluir que quando fazemos esta alterao, o nmero de iteraes no


mtodo de Newton dentro de cada iterao do mtodo do gradiente reduz de maneira
significante, por conseguinte, ter-se- um barateamento computacional. No item 3, se
somarmos todas as iteraes considerando o valor inicial 5 para cada execuo da funo
metodoNewton.m teremos um total de 90 iteraes. Com a devida alterao realizada,
contamos com apenas 50 iteraes. Ou seja, uma reduo de aproximadamente 45% do
tempo gasto processando apenas o mtodo de Newton.
Concluso

Ao resolver este trabalho computacional, alm de podermos ver na prtica como
dois mtodos em conjunto podem ser teis para resolver um problema de otimizao, ele
mostra como a alterao da definio do valor inicial pelo valor anterior j calculado, faz
com que haja uma melhoria considervel no tempo do processamento, reduzindo o custo
computacional.

Apesar de alguns problemas terem sido enfrentados ao longo do desenvolvimento
do algoritmo, alguns por falta de conhecimento de funes do Matlab e outros por falta de
entendimento ao desenvolver o cdigo, o vetor soluo encontrado pelo algoritmo,
apresenta resultados satisfatrios quando comparados a outros mtodos, tais como a
funo fminsearch do prprio Matlab e tambm WolframAlpha.

Por fim, todo auxlio necessrio para resoluo dos problemas/erros foi
encontrado no Google, geralmente em documentaes e fruns de ajuda da prpria
MathWorks. Portanto, este trabalho acresce tambm no conhecimento e manuseamento
de um software til na vida profissional de um engenheiro.

10

EXTRA: Verificando Ponto de Mnimo atravs da Matriz Hessiana.



Desenvolvimento: Conforme colocado em sala, decidi por fazer este anexo a fim de
verificar que o ponto encontrado um ponto de mnimo da funo. Temos a seguinte
funo e suas derivadas parciais:
(!)

(!)

= (1 + 1)! + (1 + 2 1)! + 2(2 )!

x ! , !


Considerando o valor encontrado na ultima iterao como o ponto a ser analisado:
(!) (!)
(! , ! ) = (0.28779386, 0.56527837)
!
!

= 12(1 + 1)! + 2

!
!

= 242 ! + 2
!
=0
! !

!
!

(!)

(!)

x ! , !

(!)

(!)

x ! , !

= 8.0869

= 9.6690

!
(!) (!)
x! , ! = 0
! !

Montando a Matriz Hessiana:


!
=

(!)

(!)

x ! , !

! !
!
(!) (!)
x , !
! ! !

!
(!) (!)
x , !
! ! !
!
! !

(!)

(!)

x ! , !

Usando a funo eig do Matlab, tm-se os seguinte autovalores:


! = 8.0869 e ! = 9.6690

(!)

(!)

Concluso: Ambos autovalores so positivos, portanto, os pontos (! , ! ) =


(!)

(!)

(0.28779386, 0.56527837) so pontos de mnimo da funo x! , !

= (1 + 1)! +

(1 + 2 1)! + 2(2 )! .

11

Você também pode gostar