Você está na página 1de 9

IM380 – Métodos de Otimização de Sistemas

Gabriela Otsubo

Busca dicotômica
IM380 – Métodos de Otimização de Sistemas
Gabriela Otsubo

Método Fibonacci
IM380 – Métodos de Otimização de Sistemas
Gabriela Otsubo

Método de Newton
IM380 – Métodos de Otimização de Sistemas
Gabriela Otsubo
IM380 – Métodos de Otimização de Sistemas
Gabriela Otsubo

Todos os programas foram implementados conforme as notas de aula e limitando-se o número máximo de iterações
(max_it = 10000). Nenhum deles foi implementado na forma de função, passo que será implementado futuramente.
Além disso, todos os dados estão sendo guardados a cada iteração, para facilitar a análise dos programas e
identificação de erros.

Busca dicotômica
%equação Teste 1 Equação: f(x) = x²+2x
f = @(x) x^2+2*x; (Exercício 3.1.) Intervalo inicial: I0 = [-3,5]
%intervalo inicial Critério de convergência: ε = 0.001
a(1) = -3; Resultado: (-1.0000,-1.0000)
b(1) = 5; Número de iterações: 18
Resultado analítico: (-1,-1)
E = 0.001;
%critério de convergência (l>2E)
Teste 2 Equação: f(x) = x²
l = 2.1*E; Intervalo inicial: I0 = [-3,5]
Critério de convergência: ε = 0.00001
max_it = 10000; Resultado: (1.1582e-07,1.3414e-14)
for k = 1:max_it
Número de iterações: 24
if abs(b(k)-a(k))<l
break Resultado analítico: (0,0)
end
xm = (a(k)+b(k))/2;
Teste 3 Equação: f(x) = cos(x)
lambda(k) = xm-E;
mi(k) = xm+E; Intervalo inicial: I0 = [0, 2π+0.0001]
f_lambda = f(lambda(k)); Critério de convergência: ε = 0.00001
f_mi = f(mi(k)); Resultado: (3.1416, -1.0000)
if f_lambda<f_mi Número de iterações: 24
a(k+1) = a(k); Resultado analítico: (π,-1)
b(k+1) = mi(k);
elseif f_lambda>f_mi
a(k+1) = lambda(k); Teste 4 Equação: f(x) = cos(x)
b(k+1) = b(k); Intervalo inicial: I0 = [0, π]
end
Critério de convergência: ε = 0.00001
end
Resultado: (1.5708, 1.0375e-05)
xmin = (a(k)+b(k))/2 Número de iterações: 22
fmin = f(xmin) Resultado analítico: (π/2,0)

A partir dos testes realizados, observou-se que o programa funciona conforme esperado. Além disso, pode-
se perceber algumas limitações do método, como o caso em que a função é simétrica dentro do intervalo dado. A
função cos(x) foi usada para avaliar esta característica. O teste 3, inicialmente foi realizado com o intervalo inicial I 0 =
[0, 2π], mas lambda e mi assumem valores iguais e o programa se torna incapaz de escolher um novo intervalo. Para
resolver este problema foi adicionado 0.0001 ao maior valor do intervalo, descentralizando-o em relação à função.
IM380 – Métodos de Otimização de Sistemas
Gabriela Otsubo

Método Fibonacci
Cada termo da série de Fibonacci foi calculado a partir da fórmula de Binet: F(n) = (e^n-(1-e)^n)/sqrt(5), onde e =
(1+sqrt(5))/2.
%equação Teste 1 Equação: f(x) = x²+2x
f = @(x) x^2+2*x; (Exercício Intervalo inicial: I0 = [-3,5]
%intervalo inicial 3.1.) Critério de convergência: l = 0.1
a(1) = -3; n = 11
b(1) = 5; Resultado: (-0.9775, -0.9995)
Número de iterações: 10
%critério de convergência Resultado analítico: (-1,-1)
l = 0.001;
Teste 2 Equação: f(x) = x²+2x
max_it = 10000; Intervalo inicial: I0 = [-3,5]
Critério de convergência: l = 0.001
%determinar sequência de Fibonacci n = 21
for n = 1:30 Resultado: (-1.0000, 1)
e = (1+sqrt(5))/2;
Número de iterações: 20
F(n) = (e^n-(1-e)^n)/sqrt(5); %Binet
end Resultado analítico: (-1,-1)
F(1) = 0.8; %permitir última iteração Teste 3 Equação: f(x) = x²
Intervalo inicial: I0 = [-3,5]
%determinar n Critério de convergência: l = 0.001
for n = 1:50 n = 21
if abs((b(1)-a(1))/F(n)) < l
break Resultado: (5.4815e-04, 3.0046e-07)
end Número de iterações: 20
end Resultado analítico: (0,0)
Teste 4 Equação: f(x) = x²
for k = 1:max_it Intervalo inicial: I0 = [-3,3]
if abs(b(k)-a(k)) < l
break Critério de convergência: l = 0.001
end n = 20
lambda(k) = a(k)+F(n-k-1)/F(n-k+1)*(b(k)- Resultado: (8.9989e-18, 8.0980e-35)
a(k)); Número de iterações: 19
mi(k) = a(k)+F(n-k)/F(n-k+1)*(b(k)-a(k)); Resultado analítico: (0,0)
f_lambda = f(lambda(k));
f_mi = f(mi(k)); Teste 5 Equação: f(x) = cos(x)
if f_lambda < f_mi Intervalo inicial: I0 = [0,pi]
a(k+1) = a(k); Critério de convergência: l = 0.001
b(k+1) = mi(k); n = 19
elseif f_lambda > f_mi Resultado: (3.1412, -1.0000)
a(k+1) = lambda(k);
Número de iterações: 18
b(k+1) = b(k);
end Resultado analítico: (π,-1)
end Teste 6 Equação: f(x) = cos(x)
Intervalo inicial: I0 = [0,pi]
xmin = (a(k)+b(k))/2 Critério de convergência: l = 0.001
fmin = f(xmin)
n = 17
Resultado: (1.5703, 4.9180e-04)
Número de iterações: 16
Resultado analítico: (π/2,0)

O programa funcionou conforme esperado. Para que o programa atingisse a precisão desejada, depois de
definida a sequência de Fibonacci, o termo n=1 foi redefinido para 0.8, ou seja, a sequência utilizada foi: 0.8, 1, 2, 3,
5, 8.... Esta alteração foi feita de forma que λ e μ não assumam valores iguais quando k = n-2, permitindo a última
iteração.
IM380 – Métodos de Otimização de Sistemas
Gabriela Otsubo

Busca de Newton
Para cada função teste, foram calculadas suas derivadas e inseridas diretamente no programa.

%equação Teste 1 Equação: f(x) = x²+2x


f = @(x) x^2+2*x; (Exercício 3.1.) Ponto inicial: x(1) = 0
%derivadas Critério de convergência: ε = 0.001
df = @(x) 2*x+2; Resultado: (-1,-1)
ddf = @(x) 2; Número de iterações: 2
Resultado analítico: (-1,-1)
%ponto inicial Teste 2 Equação: f(x) = x²
x(1) = 0;
Ponto inicial: x(1) = 3
%critério de convergência Critério de convergência: ε = 0.001
E = 0.001; Resultado: (0,0)
Número de iterações: 1
max_it = 10000; Resultado analítico: (0,0)
for k = 1:max_it
Teste 3 Equação: f(x) = cos(x)
x(k+1) = x(k)-df(x(k))/ddf(x(k));
if abs(x(k+1)-x(k))<E Ponto inicial: x(1) = 3*pi/4
break Critério de convergência: ε = 0.001
end Resultado: (3.1416, -1.0000)
end Número de iterações: 4
Resultado analítico: (π,-1)
xmin = x(k+1)
fmin = f(xmin) Teste 4 Equação: f(x) = cos(x)
Ponto inicial: x(1) = 0
Critério de convergência: ε = 0.001
Resultado: (0,1)
Número de iterações: 2
Resultado analítico: (π,-1)
Teste 5 Equação: f(x) = cos(x)
Ponto inicial: x(1) = pi/2
Critério de convergência: ε = 0.001
Resultado: (-1.6331e+16, -0.7534)
Número de iterações: 2
Resultado analítico: (π,-1)

O programa funcionou conforme esperado. Porém, percebeu-se que é preciso escolher o ponto inicial com
cuidado. Uma vez que o método usa a primeira e a segunda derivada da função para calcular o passo em relação ao
ponto anterior, é importante notar o que acontece quando alguma destas derivadas assume o valor zero.

Primeira derivada igual a zero (teste 4): a função já se encontra em um ponto de inflexão e o ponto seguinte
assume o valor do ponto anterior (xi+1 = xi) .

Segunda derivada igual a zero (teste 5): xi+1 tende a infinito.

Também é importante notar que o método procura pontos de inflexão, sem distinção de mínimos e
máximos. Por isso, incluiu-se no programa um passo para identificar se o ponto escolhido é um ponto de mínimo,
analisando a segunda derivada.
IM380 – Métodos de Otimização de Sistemas
Gabriela Otsubo

Busca Quadrática
A segunda derivada de cada função teste foi calculada e inserida no programa para ser usada como critério de
parada, conforme sugerido nas notas de aula.
close all Teste 1 Equação: f(x) = (x-2)4
clear all (Exercício Pontos iniciais:
clc
3.2.) x1 = -3
%equação x2 = 5
f = @(x) (x-2)^4; x3 = 1
Critério de convergência: ε = 0.001
%derivada Resultado: (1.9658, 1.3701e-06)
df = @(x) 4*(x-2)^3;
Número de iterações: 4
%pontos iniciais Resultado analítico: (2,0)
x1 = -3;
x2 = 5;
x3 = (x1+x2)/2; Teste 2 Equação: f(x) = x²+2x
%critério de convergência Pontos iniciais:
E = 0.001; x1 = -3
x2 = 5
max_it = 10000; x3 = 1
for k = 1:max_it Critério de convergência: ε = 0.001
num = (x2^2-x3^2)*f(x1)+(x3^2-x1^2)*f(x2)+
(x1^2-x2^2)*f(x3);
Resultado: (-1,-1)
den = (x2-x3)*f(x1)+(x3-x1)*f(x2)+(x1- Número de iterações: 1
x2)*f(x3); Resultado analítico: (-1,-1)
xm = 1/2*(num/den);
if ((x2-x3)*f(x1)+(x3-x1)*f(x2)+(x1-
x2)*f(x3))/((x2-x3)*(x3-x1)*(x1-x2)) >= 0
fprintf('Nao e ponto de minimo') Teste 3 Equação: f(x) = cos(x)
break Pontos iniciais:
end x1 = 0
if (xm>x1 & xm<x3) x2 = 2*pi
if (f(xm)<f(x3)) x3 = pi
x2 = x3;
x3 = xm; Critério de convergência: ε = 0.001
elseif (f(xm)>f(x3)) Resultado: (3.1416, -1)
x1 = xm; Número de iterações: 1
end Resultado analítico: (π,-1)
elseif (xm>x3 & xm<x2)
if (f(xm)<f(x3))
x1 = x3;
x3 = xm; Teste 4 Equação: f(x) = cos(x)
elseif (f(xm)>f(x3)) Pontos iniciais:
x2 = xm; x1 = 0
end
x2 = pi
end
if abs(df(xm))<E x3 = pi/2
break Critério de convergência: ε = 0.001
end Resultado: (-1.2827e+16, -0.1111)
end Número de iterações: 1
Resultado analítico: (3π/4,-1)
xmin = xm
fmin = f(xmin)
IM380 – Métodos de Otimização de Sistemas
Gabriela Otsubo

O programa funcionou conforme esperado. É importante notar que, já que o método é baseado na
aproximação para uma equação quadrática, a qualidade dos resultados depende da equação no intervalo dado. Por
exemplo, para a função cos(x), o resultado é coerente no intervalo que corresponde a um período (teste 3), mas não
para o intervalo (teste 4), já que o pontos escolhido estão alinhados e a aproximação do polinômio de interpolação
resulta na função abaixo:

Ou seja, ao calcular o mínimo do polinômio, o denominador de x tende a zero (-1.9237e-16).

Por fim, é importante notar que cada método tem vantagens e desvantagens e a escolha deve levar em
conta o contexto no qual ele será utilizado, por exemplo, a função a ser minimizada, os dados iniciais, se é possível
delimitar um intervalo confiável no qual do mínimo faz parte, etc.

De forma geral, a busca dicotômica é um método robusto, porém que converge mais lentamente. O método
de Newton converge rapidamente, mas apresenta uma complexidade maior, utilizando as derivadas. O método de
Fibonacci representa um meio termo entre os dois. Já a busca quadrática, também apresenta convergência
relativamente rápida, porém, sua precisão depende

Você também pode gostar