Você está na página 1de 11

UNIVERSIDADE FEDERAL DO PAR UFPA

INSTITUTO DE TECNOLOGIA ITEC


PROGRAMA DE PS-GRADUAO EM ENGENHARIA ELTRICA
TEORIA DE SISTEMAS LINEARES






TRABALHO II



PROFESSORA: CAROLINA DE MATTOS AFFONSO




RENAN LANDAU PAIVA DE MEDEIROS
















BELM/PA
MAIO-2013


OBJETIVOS:

Solucionar um problema no linear desenvolvendo um algoritmo computacional que
minimize uma funo. Objetivando minimizar esta funo ser utilizado dois mtodos
iterativos, o primeiro mtodo ser o mtodo do gradiente (Steepest descet) juntamente
com a busca dicotmica, o segundo mtodo utilizado ser o mtodo do gradiente
conjugado.

APRESENTAO DO PROBLEMA:

O problema de minimizao utilizado para ser solucionado e analisado neste trabalho
mostrado abaixo:

(

) (



REFERNCIAL TERICO:

1- MTODO DO GRADIENTE COM BUSCA DICOTOMICA

O mtodo do gradiente utiliza-se de informaes providas pelo vetor gradiente para
encontrar a direo do valor timo de uma funo.
Seja um vetor coluna |

=
T
n
x x x X
2 1
que possua a dimenso n e
( ) |
.
|

\
|
= =
n
x x x f X f z , , , ,
2 1
uma funo objetivo de n variveis, tal que ( )
k
x X f c c /
exista para n k , , 2 , 1 = . Combinando os valores obtidos para as derivadas parciais,
compe-se o que se chama de gradiente da funo ( ) X f , denotado por
( )
( ) ( ) ( ) ( )
|
|
.
|

\
|
c
c
c
c
c
c
c
c
= V
n
x
X f
x
X f
x
X f
x
X f
X f , , , ,
3 2 1


O vetor gradiente ( ) X f V aponta na direo da mxima taxa de crescimento da funo
em cada ponto. Logo, o vetor ( ) X f V aponta na direo do maior decaimento da
mesma funo. Para um dado ponto X , ao caminhar na direo oposta ao vetor
gradiente, denotada por ( ) ( ) ( ) X f X f X U V V = / , tende-se a encontrar valores cada
vez menores da funo em torno do ponto X . Considerando a existncia de um mnimo
local dentro de um intervalo conhecido, tal caminhada levar consecuo do mnimo
local.
O procedimento para implementao do mtodo do gradiente bem simples. Partindo
de um ponto i X , determina-se o valor de ( ) i X f V e a posio e um novo ponto 1 + i X
pela expresso
( )
i i
i X f X X V + = + 1

Este procedimento levar determinao de pontos que obedecem condio
( ) ( ) ( ) > > >
2 1 0
X f X f X f

Esta condio garante que, quanto mais iteraes foram realizadas, mais prximo do
mnimo ser a soluo encontrada. No limite, quando o nmero de iteraes tende ao
infinito, o valor encontrado para a funo objetivo ( ) X f ser mnima, sendo, portanto,
o ponto X um mnimo local.
A varivel determina a velocidade da descida durante a busca pelos prximos pontos.
Quanto maior o valor de , maior o deslocamento entre pontos de mnimo. Quanto
menor o valor de , menor o deslocamento.
Para minimizar a funo ( ) ( ) ( )
2
2 1
4
1 2 1
2 2 , x x x x x f + = o valor do gradiente ser
dado por
( ) ( )
2 1 2 1
2
1
3
1 2 1
8 4 , 4 32 50 24 4 , x x x x x x x x f + + = V

Portanto, a expresso para determinao nos pontos pelo mtodo do gradiente
descendente dada por
(

+
+
+
(

=
(

+
+
2 1
2 1
2
1
3
1
) ( 2
) ( 1
) 1 ( 2
) 1 ( 1
8 4
4 32 50 24 4
x x
x x x x
x
x
x
x
n
n
n
n


Como ponto inicial, pode ser tomado as coordenadas localizadas no centro do intervalo,
ou seja, | | | |
T T
x x X 0 0
) 0 ( 2 ) 0 ( 1 0
= = . Entretanto, para este estudo utilizou-se os valores

.
Com o intuito de minimizar o valor do parametro de acordo com a evoluo do
algoritmo, faz-se para cada ponto
i
X , define-se uma reta na direo do vetor gradiente
que passa por este ponto, consistindo esta reta uma funo do parmetro , ou seja,
( )
i i
X f X X V + = ) (

Iniciando com 0 = e aumentando o seu valor de forma adaptativa, possvel encontar
um parmetro timo
0
que produz um mnimo para a funo dentro do domnio
estabelecido para o problema. Matematicamente,
0
determinado pela operao.
( ) ( )
n
i i
X f X f V = min arg
0


Uma vez determinado o valor de
0
, determina-se o prximo ponto que ir aproximar o
mnimo da funo.
Um dos mtodos para determinar o valor de
0
chamado de Busca Dicotmica. O uso
da Busca Dicotmica reduz a quantidade de clculo realizada para determinar o valor
timo de , esse mtodo no utiliza derivadas e a idia principal a seguinte.
Dado um problema unidimensional, no qual se conhece um intervalo de incerteza | | b a;
,
que inclui a soluo,
( )

s s b a a s
g Min
o
o
. .


o procedimento de busca consiste em sucessivamente excluir as partes do intervalo de
incerteza que no contm o mnimo de ( ) o g
.
Para reduo do intervalo de incerteza
| | b a;
particiona-se este intervalo em partes e
avalia-se a funo nas extremidades destas partes, sendo que a busca dicotmica realiza
a reduo do intervalo com duas avaliaes da funo objetivo. A partir do centro do
intervalo de incerteza, a funo avaliada em dois pontos:
c
+
=
2
k k
k
b a


c
+
=
2
k k
k
b a




Figura 1 Grfico da busca utilizada na busca dicotmica .
Quando ( ) ( )
k k
g g >
, sabe-se que o ponto de mnimo no se encontra no intervalo
| |
k k
a ;
. O novo intervalo de incerteza ser
| |
k k
b ;
.
Caso
( ) ( )
k k
g g <
, sabe-se que o ponto de mnimo no se encontra no intervalo
| |
k k
b ;
. O novo intervalo de incerteza ser
| |
k k
a ;
. :Quanto menor for
c
, maior ser
o intervalo descartado de cada vez.

2- MTODO DO GRADIENTE CONJUGADO

Este mtodo geralmente utilizado para solucionar problemas de minimizao de
funes no lineares. Este mtodo constitui um mtodo de direo conjugada obtido
pela seleo de vetores de direo sucessivos, como uma verso conjugada de
gradientes sucessivos obtidos conforme o mtodo progride. As direes no so
especificadas antecipadamente. So determinadas sequencialmente a cada passo da
iterao. Em cada passo
i
encontramos o vetor gradiente negativo e adiciona-se a ele
uma combinao linear dos vetores de direo prvios para obter um novo vetor de
direo conjugado, ao longo do qual se move.
No mtodo do gradiente possvel que uma direo utilizada na iterao i j tenha sido
utilizada em iteraes anteriores. Para evitar este problema o mtodo do gradiente
conjugado prope uma alterao no mtodo do gradiente. O Mtodo dos Gradientes
Conjugados sugere que, dada uma aproximao inicial x(0) para o sistema n n, Ax =
b, tomemos um conjunto de direes conjugadas {d0, d1, , dn1} e em at n
iteraes, teremos encontrado uma aproximao satisfatria para a soluo do sistema.

RESULTADOS:

1. MTODO DO GRADIENTE COM BUSCA DICOTOMICA
Foi utilizado o algoritmo computacional no ambiente de simulao Matlab, em anexo,
para obter a soluo tima do problema, foi utilizado como condies iniciais:

]
Foi obtido como resultado a tabela 1.

Tabela 1- Tabela de resultados para o mtodo do gradiente com busca dicotomica
N X1 X2 F(xopt) Alphaopt
0 1 0 2 0.27656
1 1.5531 1.1063 0.47465 0.27656
2 1.7203 0.85624 0.00618 2.1203
3 1.873 0.9221 0.00109 0.092188
4 1.8684 0.9327 0.0003 0.092188
5 1.8687 0.9338 0.00029 5.0703
6 1.9037 0.9556 0.00014 0.092188
7 1.9054 0.9528 8.0059e^-5 0.092188
8 1.9065 0.9525 7.8343e^-5 0.27656
9 1.9066 0.95307 7.642e^-5 0.092188

1000 1.9862 0.99312 3.5927e^-8 1.3828

A figura 1 apresenta o grfico em curvas de nvel do caminho percorrido pelo conjunto
de solues at encontrar o ponto timo da funo pelo mtodo do gradiente.


Figura 1- Curva de nvel e caminho percorrido pelas iteraes

2. MTODO DO GRADIENTE CONJUGADO
Foi utilizado o algoritmo computacional no ambiente de simulao Matlab, em anexo,
para obter a soluo tima do problema, foi utilizado como condies iniciais:

]
Foi obtido como resultado a tabela 2.







x
1
x
2
x
1
4
-8 x
1
3
+25 x
1
2
-32 x
1
-4 x
1
x
2
+4 x
2
2
+16
-6 -4 -2 0 2 4
-5
-4
-3
-2
-1
0
1
2
3
4
5
Tabela 2- Tabela de resultados para o mtodo do gradiente conjugado
N X1 X2 F(xopt)
0 1 0 2
1 1.3333 0.6667 0.19753
2 1.3762 0.66905 0.19752
3 1.3835 0.68237 0.14477
4 1.3577 0.68607 0.17022
5 1.3609 0.68683 0.167
6 1.374 0.68776 0.1535
7 1.3713 0.6825 0.1563
8 1.3657 0.68218 0.1618
9 1.3672 0.6849 0.1604

30 1.3684 0.68418 0.15919

A figura 2 apresenta o grfico em curvas de nvel do caminho percorrido pelo conjunto
de solues at encontrar o ponto timo da funo pelo mtodo do gradiente.


Figura 2- Curva de nvel e caminho percorrido pelas iteraes
x
1
x
2
x
1
4
-8 x
1
3
+25 x
1
2
-32 x
1
-4 x
1
x
2
+4 x
2
2
+16
-8 -6 -4 -2 0 2 4
-5
-4
-3
-2
-1
0
1
2
3
4
5
ANEXOS : CDIGO DOS PROGRAMAS EM MATLAB
1. METODO DO GRADIENTE COM BUSCA DICOTOMICA
% Mtodo do gradiente com Busca dicotmica
function[xopt,fopt,niter,gnorm,x,g]=grad_descent2(varargin)

if nargin == 0
x0=[1 0]';
elseif nargin == 1
x0 = varargin{1};
end

tol= 1e-6;
maxiter=1000;
dxmin=1e-6;
% alpha= .01;
format short g
gnorm= inf; x= x0; niter=0; dx=inf;

f= @(x1,x2)x1.^4-8*x1.^3+25*x1.^2-32*x1-4*x1*x2+4*x2.^2+16;
figure(1);clf;ezcontour(f,[-5 5 -5 5]); axis equal;
hold on
f2= @(x) f(x(1),x(2));

while and(gnorm>=tol, and(niter<= maxiter,dx>=dxmin))
g=grad(x);
gnorm= norm(g);
[alphaopt]= busca_dicotomica(x,g);
xnew= x - alphaopt*g;

if ~isfinite(xnew)
niter
error('x is inf or NaN')
end

plot([x(1) xnew(1)],[x(2) xnew(2)],'ko-')
refresh
niter= niter+1;
dx= norm(xnew-x);
x= xnew;
N(niter,1)= niter;
X1(niter,1)=x(1,1);
X2(niter,1)=x(2,1);
F(niter,1)=f2(x);
P(niter,1)=[alphaopt];
end

xopt= x
fopt= f2(xopt)
niter= niter-1;
RESULTADO=[N X1 X2 F P]

end


function g= grad(x)
g= [4*x(1)^3-24*x(1)^2+50*x(1)-32-4*x(2)
-4*x(1) + 8*x(2)];
end

% Busca dicotmica
function[alphaopt]=busca_dicotomica(x,g)

a=-6; b= 6; eps= .1; tol= .4; nitermaxh= 100; niterh=0;
a1= x(1,1);
a2= x(2,1);
%define a funo
f= @(alpha)[a1-alpha*g(1,1)].^4-8*[a1-alpha*g(1,1)].^3+25*[a1-
alpha*g(1,1)].^2-32*[a1-alpha*g(1,1)]-4*[a1-alpha*g(1,1)]*[a2-
alpha*g(2,1)]+4*[a2-alpha*g(2,1)].^2;
f2= @(alpha)f(alpha(1));
% figure(1);clf;fplot(f,[-5 5]);grid;hold on;
% pause
X=[];
N=[];
while and(abs(b-a) >= tol,niterh <= nitermaxh)
lambda= [(a+b)/2]- eps;
mi= [(a+b)/2]+eps;
if f(lambda) < f(mi)
a= a;
b= mi;
elseif f(lambda) > f(mi)
a= lambda;
b= b;
end
niterh=niterh+1;
% N(niterh,1)= niterh;
alphaopt=(a+b)/2;
% X(niter,1)=[alphaopt];
% plot(alphaopt,f(alphaopt),'ok')
end
% plot(alphaopt,f(alphaopt),'or','linewidth', 2.0)
% a;
% b;
% niter;
% Xf=[X N];
alphaopt;
fmin= f(alphaopt);
end

2. MTODO DO GRADIENTE CONJUGADO
% METODO DO GRADIENTE CONJUGADO
function[xopt,fopt,niter,gnorm,dx]=grad_conjugado(varargin)

if nargin == 0
x0=[1 0]';
elseif nargin == 1
x0 = varargin{1};
end

tol= 1e-6;
maxiter=1000;


gnorm= inf; x= x0; niter=0; dx=inf;

f= @(x1,x2) x1.^4-8*x1.^3+25*x1.^2-32*x1-4*x1*x2+4*x2.^2+16;
figure(1);clf;ezcontour(f,[-5 5 -5 5]); axis equal;
hold on
f2= @(x) f(x(1),x(2));
d=-grad(x);
g= grad(x);
gnorm= norm(g);
[H]= hessiana(x);
while and(gnorm >tol, niter< maxiter)
alpha= [-(g')*d]/[(d')*H*d];
X1(niter+1,1)=x(1);
X2(niter+1,1)=x(2);
F(niter+1,1)=f2(x);
xnew= x + alpha*d;

if ~isfinite(xnew)
niter
error('x is inf or NaN')
end

plot([x(1) xnew(1)],[x(2) xnew(2)],'ko-')
refresh
niter= niter+1;
N(niter,1)=niter;
gn=grad(xnew);
[Hn]=hessiana(xnew);
if niter < maxiter-1

beta = (gn' * Hn * d)/ ( d' * Hn * d);
d = -1*gn + beta * d;
end

x= xnew;
g= gn;
H=Hn;
gnorm= norm(g);

end
xopt= x
fopt= f2(xopt)
niter= niter-1
X=[N X1 X2 F]
end


function g= grad(x)
g= [4*x(1,1)^3-22*x(1,1)^2+48*x(1,1)-32-4*x(2,1)
-4*x(1,1)+8*x(2,1)];
end

function H= hessiana(x)
H=[12*(x(1,1)-2).^2+2 -4;
-4 8];
end