You are on page 1of 41

UNIVERSIDAD AUTONOMA DE COAHUILA

Mtodos de
optimizacin
Simulacin y optimizacin

FERNANDO ARANDA GUEVARA
29/10/2013




Mtodos de bsqueda unidireccional y optimizacin multivariable sin restricciones
BSQUEDA UNIDIRECCIONAL: MTODOS DE APROXIMACIN POLINMICA.

Otra clase de mtodos de minimizacin unidimensional localizan un punto x
cercano a x*, el valor de la variable independiente correspondiente al mnimo de
f(x), por interpolacin y extrapolacin utilizando aproximaciones polinmicas a f(x).
Se han propuesto tanto aproximaciones cuadrticas como cbicas usando tanto
los valores de la funcin solamente como los de sus derivadas primeras. Se ha
comprobado que los mtodos de interpolacin polinmica son normalmente
ligeramente mejores que el mtodo de la seccin urea.


Interpolacin cuadrtica.

Si comenzamos con tres puntos, por ejemplo x1, x2, x3 en orden creciente, y no
necesariamente igualmente espaciados, pero contenidos dentro de la zona de
bsqueda (a,b), podemos aproximarlos a un polinomio de grado 2, f ( x) = a +bx
+ cx2 de tal manera que dicho polinomio pasa exactamente por esos tres puntos y
debe presentar un mnimo en:



Si suponemos que f(x) se evala en los tres puntos, podramos calcular los valores
de a, b, c resolviendo el sistema de tres ecuaciones lineales:


lo que nos lleva a :





Criterio de seleccin:
I. Si x* esta entre x
2
y x
3

a). f*<f
2
y f*<f
3
entonces x
2
, x*,x
3

b). f*>f
2
y f*<f
3
entonces x
1
,x
2
,x



II Si x* est entre x
1
y x
2

a). f*<f
2
y f*<f
1
entonces x
1
, x*, x
2

b). f*>f
2
y f*<f
1
entonces x
*
, x
2
,x
3







Ejercicio:
Encontrar por el mtodo de interpolacin cuadrada el mnimo de la siguiente
funcin.


- Si tomamos las siguientes aproximaciones:
x
1
=-5 x
2
=-4 x
3
=-3
Observamos que el mtodo se desborda y nos arroja un resultado equivocado de
x*= -2.5954
- Si tomamos las siguientes aproximaciones:
x
1
=+3 x
2
=+4 x
3
=+5
Observamos que el mtodo se desborda y nos arroja un resultado equivocado de
x*= 2.6005
- Si tomamos las siguientes aproximaciones:
x
1
=-5 x
2
=-4 x
3
=+3
Observamos que el mnimo es x*= 0.5000
- Si tomamos las siguientes aproximaciones:
x
1
=-3 x
2
=+4 x
3
=+5
Observamos que el mnimo es x*= 0.5000
- Si tomamos las siguientes aproximaciones:
x
1
=-0.005 x
2
=-0.004 x
3
=0.9
Observamos que el mnimo es x*= 0.5000
- Si tomamos las siguientes aproximaciones:
x
1
=-0.0005 x
2
=0.0004 x
3
=0.8
Observamos que el mnimo es x*= 0.5000



Conclusiones sobre el mtodo:
Es un mtodo de fcil programacin pero no acepta valores muy lejanos al punto
de bsqueda (mnimo) y no acepta que las tres aproximaciones estn ubicadas a
la derecha o izquierda del punto que buscamos. Tambin es necesario dar las
aproximaciones en orden creciente.




-10 -8 -6 -4 -2 0 2 4 6 8
-1
0
1
2
3
4
5
x 10
4
valores X
v
a
l
o
r
e
s

Y
METODO PROGRAMADO EN MATLAB:
%interpolacion polinomial%
clc
x1=input('dame el primer valor ');
x2=input('dame el segundo valor ');
x3=input('dame el tercer valor ');
f1=6*x1^4-3*x1+7
f2=6*x2^4-3*x2+7
f3=6*x3^4-3*x3+7
subs x
x=0.5*(((x2^2-x3^2)*f1+(x3^2-x1^2)*f2+(x1^2-x2^2)*f3)/(((x2-
x3)*f1+(x3-x1)*f2+(x1-x2)*f3)))
f=6*x^4-3*x+7
i=0
while 1000>i
if x2<x
if x<x3
sprintf('x esta entre x2 y x3')
if f<f3
if f<f2
sprintf('se cumplen las condiciones a')

x1=x2
x2=x
x3=x3
f1=6*x1^4-3*x1+7
f2=6*x2^4-3*x2+7
f3=6*x3^4-3*x3+7
x=0.5*(((x2^2-x3^2)*f1+(x3^2-x1^2)*f2+(x1^2-
x2^2)*f3)/(((x2-x3)*f1+(x3-x1)*f2+(x1-x2)*f3)))
f=6*x^4-3*x+7
else
if f>f2
sprintf('se cumplen las condiciones b')
x1=x1
x2=x2
x3=x
f1=6*x1^4-3*x1+7
f2=6*x2^4-3*x2+7
f3=6*x3^4-3*x3+7
x=0.5*(((x2^2-x3^2)*f1+(x3^2-x1^2)*f2+(x1^2-
x2^2)*f3)/(((x2-x3)*f1+(x3-x1)*f2+(x1-x2)*f3)))
f=6*x^4-3*x+7
else
end
end
else
end
else
end

else
if x1<x
sprintf('x esta entre x1 y x2 ')
if f<f1
if f<f2
sprintf('se cumplen las condiciones a')
x1=x1
x3=x2
x2=x
f1=6*x1^4-3*x1+7
f2=6*x2^4-3*x2+7
f3=6*x3^4-3*x3+7
x=0.5*(((x2^2-x3^2)*f1+(x3^2-x1^2)*f2+(x1^2-
x2^2)*f3)/(((x2-x3)*f1+(x3-x1)*f2+(x1-x2)*f3)))
f=6*x^4-3*x+7
else
if f>f2
sprintf('se cumplen las condiciones b')
x1=x
x2=x2
x3=x3
f1=6*x1^4-3*x1+7
f2=6*x2^4-3*x2+7
f3=6*x3^4-3*x3+7
x=0.5*(((x2^2-x3^2)*f1+(x3^2-x1^2)*f2+(x1^2-
x2^2)*f3)/(((x2-x3)*f1+(x3-x1)*f2+(x1-x2)*f3)))
f=6*x^4-3*x+7
else
end

end
else
end
else
end
end
i=i+1
end
sprintf('el minimo es ')
x
sprintf('quieres ver la grafica? si=1 no=2 ')
s=input('dame tu eleccion ');
if s==1
x=-10:0.1:10
y=6*x.^4-3*x+7
plot(x,y)
end












Seccin dorada.

El mtodo solicita una aproximacin adecuada a la funcin problema as como
tambin requiere un tamao de paso coherente, a partir de estos dos valores el
mtodo comienza a realizar iteraciones reduciendo el tamao de paso en cada una
de ellas hasta encontrar el punto mnimo de la funcin, bsicamente trabaja
eliminando regiones de bsqueda en cada iteracin.
Los mtodos ms eficientes de bsqueda por eliminacin de regiones son los
mtodos de Fibonacci y de la seccin urea, los cuales usan una relacin
constante para dividir el intervalo en segmentos. Pasaremos a discutir el mtodo
de la seccin urea que viene de los nmeros de Fibonacci.
La estrategia empleada en el mtodo de la seccin urea es localizar dos puntos
interiores del intervalo eliminado en cada iteracin de tal manera que se cumpla la
relacin:




Adems solamente una nueva evaluacin se realiza en cada etapa de bsqueda.

Ejercicio:
Encontrar por el mtodo de la seccin dorada el mnimo de la siguiente funcin.



- Si tomamos los siguientes valores x
1
=3 y tamao de paso s=0.005 nos
arroja lo que sigue.
x4 =0.5059 la funcin evaluada es f4 =-5.8753
- Si tomamos los siguientes valores x
1
=-30 y tamao de paso s=0.0005 nos
arroja lo que sigue.
x4 = 0.4902 la funcin evaluada es f4 = -5.8759
- Si tomamos los siguientes valores x
1
=0.002 y tamao de paso s=0.00005
nos arroja lo que sigue.
x4 = 0.5016 la funcin evaluada es f4 = -5.8750

















Conclusiones del mtodo:
P ara calcular el mnimo de una funcin utilizando este mtodo es necesario
multiplicar la funcin objetivo por (-1). Es fcil de utilizar ya que solo necesita dos
valores iniciales para comenzar las iteraciones.









-10
-5
0
5
-6
-5 -4
-3
-2
-1
0
x 10
4
-1
-0.5
0
0.5
1
valores y
valores x
METODO PROGRAMADO EN MATLAB:
%seccion dorad%
clc
x1=input('dame x1 ');
s=input('dame el tamao de paso ');
x3=x1+s;
f1=-6*x1^4+3*x1-7;
f3=-6*x3^4+3*x3-7;
t=0.618034;
if f3>f1
else
x3=x1;
x1=x1+s;
s=-1*s;
end
s=s/t;
x2=x3+s;
f2=-6*x2^4+3*x2-7;
f3=-6*x3^4+3*x3-7;


while f2>f3
x1=x3;
x3=x3+s;
f1=-6*x1^4+3*x1-7;
f3=-6*x3^4+3*x3-7;
s=s/t;
x2=x3+s;
f2=-6*x2^4+3*x2-7;
end
x1;
x2;
x3;
f2=-6*x2^4+3*x2-7;
f1=-6*x1^4+3*x1-7;
f3=-6*x3^4+3*x3-7;
x4=(1-t)*x1+t*x2;
f4=-6*x4^4+3*x4-7;
l=abs(f3-f4);

while 0.001<l
if f3>f4
x2=x1;
x1=x4;
x3=x3;
x4=(1-t)*x1+t*x2;
f2=-6*x2^4+3*x2-7;
f1=-6*x1^4+3*x1-7;
f4=-6*x4^4+3*x4-7;
f3=-6*x3^4+3*x3-7;
l=abs(f3-f4);
else
x1=x3;
x2=x2;
x3=x4;
x4=(1-t)*x1+t*x2;
f2=-6*x2^4+3*x2-7;
f1=-6*x1^4+3*x1-7;
f4=-6*x4^4+3*x4-7;
f3=-6*x3^4+3*x3-7;
l=abs(f3-f4);
end

end
disp ('el minimo de la funcion es ')
x4
disp ('la funcion evaluada es ')
f4=-6*x4^4+3*x4-7

sprintf('quieres ver la grafica? si=1 no=2 ')
s=input('dame tu eleccion ');
if s==1
x=-10:0.1:10
y=-6*x.^4+3*x-7
plot(x,y)
end






































Mtodo de Newton en diferencias finitas

Los mtodos en diferencias finitas tipo Newton, se utilizan si la derivada de la
funcin objetivo es difcil de calcular, o sta viene dada de forma numrica. Se
basan en sustituir las derivadas por aproximaciones en diferencias finitas.



Ejercicio:
Encontrar por el mtodo de diferencias finitas el mnimo de la siguiente funcin.



- Si tomamos x
0
= -0.00003 entonces min = 0.5099
- Si tomamos x
0
= 389 entonces min = 0.5098




METODO PROGRAMADO EN MATLAB:
%diferencias finitas %
clc
xo=input('dame la primera aproximacion ');
n=1000;
tol=0.001;
[con,x]=cuasinewton('taller3',xo,n,tol);
min=x

function [con,x]=cuasinewton(f,xo,n,tol)
for i=1:n
dx=xo/1000;
fd=(feval(f,xo+dx)-feval(f,xo-dx))/dx;
fdd=(feval(f,xo+dx)-2*feval(f,xo)+feval(f,xo-dx))/dx^2;
x=xo-fd/fdd;
if (abs((x-xo)/x))<tol
con=true;
return
else
xo=x;
con=false;
end
end
end

Conclusin del mtodo:
En este mtodo de diferencias finitas no es necesario calcular la derivada de la
funcin de forma analtica ya que esto se hace por medio de las aproximaciones
en diferencias finitas que pueden ser diferencias centrales, hacia adelante o hacia
atrs.




Mtodo de Newton

De acuerdo con la primera condicin necesaria para que una funcin tuviera un
mnimo local se debe cumplir que f '( x) = 0. Por lo tanto podemos aplicar el
mtodo de Newton a la derivada, as:

Realmente lo que hace el mtodo de Newton es aproximar la funcin por una
funcin cuadrtica en x
k
.




y dado que f '( x) = 0, diferenciando la ecuacin anterior:

0



Que se puede reordenar para dar la primera ecuacin. El mtodo de Newton es
equivalente a usar un modelo cuadrtico y aplicar las condiciones necesarias de
optimalidad.










Ejercicio:
Encontrar por el mtodo de newton el mnimo de la siguiente funcin.




- Si tomamos x
0
= -0.00003 entonces min = 0.5000
- Si tomamos x
0
= 389 entonces min = 0.5000








METODO PROGRAMADO EN MATLAB:

%metodo de newton%
clc
xo=3;
n=1000;
tol=0.001;
[con,x]=newton('taller3d','taller3dd',xo,n,tol);
resultado=x



function y=taller3d(xo)
y=24*xo^3-3;
end


function y=taller3dd(xo)
y=72*xo^2;
end

Conclusin del mtodo:
El procedimiento es cuadrticamente convergente (p=2), siempre que f ''(x) = 0 y
Para una funcin cuadrtica el mnimo se obtiene en una nica iteracin. Si existe
ms de un extremo, el mtodo podra no converger al extremo deseado.
Adems el mtodo podra oscilar.



Mtodo de la secante
Los mtodos de secante toman dos puntos, x
p
y x
q
y resuelve una ecuacin similar
a la dada en el mtodo de Newton:


El mtodo de la secante aproxima la segunda derivada por una lnea recta.
Cuando xqxp el valor de m se aproximar al valor de la segunda derivada. En
este sentido el mtodo de la secante se podra considerar tambin un mtodo
cuasi Newton. Admitiendo que la funcin es unimodal, el mtodo comienza con dos
puntos cualquiera del intervalo de tal manera que la primera derivada tenga signos
diferentes. Calculando el cero de la ecuacin de partida se obtiene.



Los dos puntos seleccionados para el paso siguiente son x* y xp xq dependiendo
de los signos de f(xp) y de f(xq) con respecto al de f (x*)

El mtodo de la secante parece bastante crudo pero funciona bastante bien en la
prctica. El orden de convergencia para funciones de una sola variable es de
(1+ 5) / 2 ~1.6. Su convergencia es ligeramente menor que la del mtodo de
Newton de diferencias finitas, pero en muchas ocasiones funciona mejor que este
en lo que a nmero de evaluaciones de la funcin objetivo se refiere.

.
Ejercicio:
Encontrar por el mtodo de la secante el mnimo de la siguiente funcin.



- Si tomamos x
p
= 90; x
q
=95 entonces x= 0.5001 con 95102
iteraciones.
- Si tomamos x
p
= 3;x
q
=4 entonces x= 0.5001 con 122
Iteraciones.
- Si tomamos x
p
= -17; x
q
=17 entonces x= 0.4999 con 3969
iteraciones.

Conclusin del mtodo:
El mtodo de la secante solo utiliza l derivada de la funcin y dos valores iniciales
para realizar las iteraciones. El valor que se mantiene constante es el valor de xp y
el mtodo termina cuando encuentra un valor tal que df/dx=0































METODO PROGRAMADO EN MATLAB:

%metodo de la secante%
clc
xp=input('dame xp aproximacion ');
xq=input('dame xq aproximacion ');
fp=24*xp^3-3;
fq=24*xq^3-3;
x=xq-(fq*(xq-xp)/(fq-fp));
f=24*x^3-3;
e=0.001;
i=0;
while (abs(f))>e
xq=x;
xp=xp;
fp=24*xp^3-3;
fq=24*xq^3-3;
x=xq-(fq*(xq-xp)/(fq-fp));
f=24*x^3-3;
i=i+1;
end
sprintf('el numero de iteraciones ');
i

sprintf('el valor del minimo es ');
x

-10
-5
0
5
10
-5
0
5
10
x 10
4
-1
0
1
funcion
derivada de la funcion
OPTIMIZACIN NUMRICA MULTIVARIABLE SIN RESTRICCIONES
La optimizacin numrica de funciones no lineales requiere la utilizacin de
tcnicas de optimizacin eficiente y robusta. La eficiencia es importante porque la
solucin de estos problemas se lleva a cabo por un procedimiento iterativo. La
robustez (habilidad para encontrar la solucin) es una propiedad deseable dado
que el comportamiento de las funciones no lineales puede ser impredecible:
pueden presentar mximos, mnimos y puntos de silla. En algunas regiones el
avance hacia el ptimo puede ser muy lento, necesitando mucho tiempo de clculo
etc. Afortunadamente se posee mucha experiencia utilizando mtodos de
optimizacin numrica lo que permite contar con buenos algoritmos y conocer sus
limitaciones y posibilidades.






Mtodo de lagrange





Criterio de seleccin:
>0 y f
xx
>0 existe un mnimo relativo
>0 y f
xx
<0 existe un mximo relativo
<0 no existe ni mximo ni mnimo
=0 el criterio no da informacin









Ejercicio:
Encontrar el mnimo de la siguiente funcin.






La primera derivada respecto a x es




grafica de df/dx















-10
-5
0
5
10
-10
0
10
-4000
-2000
0
2000
4000
6000
valores x
valores y
v
a
l
o
r
e
s

z
La primera derivada respecto a y es



Grafica de df/dx













Resolviendo df/dx y df/dy de manera simultanea tenemos que
Despejando x de df/dx


Sustituyendo x en df/dy y despejando para y tenemos
Y
1
= 1.5000
Y
2
= 1.6514
Y
3
= -0.1514
X
1
= -0.5000
x
2
= -0.6514
x
3
= 1.1514
-10
-5
0
5
10
-10
-5
0
5
10
-50
0
50
valores x
valores y
v
a
l
o
r
e
s

z

Si para cada pareja de valores resolvemos los determinantes tendremos que.
Y
1
= 1.5000 y X
1
= -0.5000 no existe ni mximo ni mnimo.
Y
2
= 1.6514 y X
2
= -0.6514tienes un mximo.
Y
3
= -0.1514 y x
3
= 1.1514.tienes un mximo.



La grafica de la funcin es:




















-10
-5
0
5
10
-10
-5
0
5
10
-12000
-10000
-8000
-6000
-4000
-2000
valores x valores y
v
a
l
o
r
e
s

z


METODO PROGRAMADO EN MATLAB:
%dos dimensiones%
clc
syms x y
f=3.5*x+2*y+x^2-x^4-2*x*y-y^2;

%----------------calculando derivadas de la funcion-------------------
--%
sprintf('la 1er derivada respectoa a x es ')
f1=diff(f,x)

sprintf('la 2da derivada respectoa a x es ')
f2dx=diff(f,x,2)

sprintf('la 1er derivada respectoa a y es ')
f2=diff(f,y)

sprintf('la 2da derivada respectoa a y es ')
f2dy=diff(f,y,2)

sprintf('la 2da derivada respectoa a y-x es ')
f2yx=diff(f2,x)

sprintf('la 1er derivada respectoa a x-y es ')
f2xy=diff(f1,y)

%-----------------resolviendo la df/dx y df/dy -----------------------
-%
sprintf('si df/dx y df/dy se resuelven por simultaneas presiona 1 de
lo contrario 2')
g=input('dame tu eleccion ');
if g==1
subs x y
sprintf('resolviendo la 1a derivada en x-y ')
%--c=df/fy---%
w1=input('dame la df/dy ');
x=solve(w1*1.0,x)
x=x*1.0;
%---d=df/dx---%
w=input('dame la df/dx ');
d=solve(w*1.0,y)
sprintf('los valores del polinomio son los siguientes ')
y1=input('dame el primer valor del polinomio ');
y2=input('dame el segundo valor del polinomio ');
y3=input('dame el tercer valor del polinomio ');
y1
y2
y3
x1=1-y1
x2=1-y2
x3=1-y3
else

if g==2
subs x y
%--w1=df/fy---%
w1=input('dame la df/dx ');
x=solve(w1*1.0,x)
%---d=df/dx---%
w=input('dame la df/dy ');
d=solve(w*1.0,y)
sprintf('los valores del polinomio son los siguientes ')
y1=input('dame el primer valor del polinomio y1 ');
y2=input('dame el segundo valor del polinomio y2 ');
y3=input('dame el tercer valor del polinomio y3 ');
y1
y2
y3
x1=input('dame el primer valor del polinomio x1 ');
x2=input('dame el segundo valor del polinomio x2 ');
x1
x2
end
end



%----------------calculando el determinante-------------------------%
x1=input('dame el valor de x1 ');
y1=input('dame el valor de y1 ');
sprintf('introduce los valores en funcion de x1-y1')
z1=input('dame f2dx ');
z2=input('dame f2xy ');
z3=input('dame f2yx ');
z4=input('dame f2dy ');
z1=z1;
z2=z2;
z3=z3;
z4=z4;
h(1,1)=z1;
h(1,2)=z2;
h(2,1)=z3;
h(2,2)=z4;
h
h1=det(h)
d1=z1
if h1~=0
if h1>0
if d1>0
sprintf('TIENES UN MINIMO')
else
sprintf('TIENES UN MAXIMO')
end
else
sprintf('NO EXISTE NI MAXIMO NI MINIMO')
end
else
sprintf('EL CRITERIO NO DA INFORMACION')
end



x1=input('dame el valor de x2 ');
y2=input('dame el valor de y2 ');
sprintf('introduce los valores en funcion de x2-y2')
z1=input('dame f2dx ');
z2=input('dame f2xy ');
z3=input('dame f2yx ');
z4=input('dame f2dy ');
z1=z1;
z2=z2;
z3=z3;
z4=z4;
h(1,1)=z1;
h(1,2)=z2;
h(2,1)=z3;
h(2,2)=z4;
h
h1=det(h)
d1=z1
if h1~=0
if h1>0
if d1>0
sprintf('TIENES UN MINIMO')
else
sprintf('TIENES UN MAXIMO')
end
else
sprintf('NO EXISTE NI MAXIMO NI MINIMO')
end
else
sprintf('EL CRITERIO NO DA INFORMACION')
end



x1=input('dame el valor de x3 ');
y3=input('dame el valor de y3 ');
sprintf('introduce los valores en funcion de x3-y3')
z1=input('dame f2dx ');
z2=input('dame f2xy ');
z3=input('dame f2yx ');
z4=input('dame f2dy ');
z1=z1;
z2=z2;
z3=z3;
z4=z4;
h(1,1)=z1;
h(1,2)=z2;
h(2,1)=z3;
h(2,2)=z4;
h
h1=det(h)
d1=z1
if h1~=0
if h1>0
if d1>0
sprintf('TIENES UN MINIMO')
else
sprintf('TIENES UN MAXIMO')
end
else
sprintf('NO EXISTE NI MAXIMO NI MINIMO')
end
else
sprintf('EL CRITERIO NO DA INFORMACION')
end




%--------------------------grafica---------------------------------%
sprintf('si quieres ver la grafica presiona 2 si no presiona 1')
s=input('dame s ');
if s>1
sprintf('COMIENZA LA GRAFICA')
[x,y]=meshgrid(-10:0.5:10);
z=3.5*x+2*y+x.^2-x.^4-2*x*y-y.^2;
mesh(x,y,z)
else
end























Ejercicio:
Encontrar el mnimo de la siguiente funcin.



La primera derivada respecto a x es





















-10
-5
0
5
10
-10
0
10
-10
-5
0
5
10
15
20
25
30
valores x
valores y
v
a
l
o
r
e
s

z


La primera derivada respecto a y es





Resolviendo df/dx y df/dy de manera independiente tenemos
X
1
= 9
x
2
= -9
Y
1
= 0
Y
2
= 1
Y
3
= -1

Si para cada pareja de valores resolvemos los determinantes tendremos que.
-10
-5
0
5
10
-10
-5
0
5
10
-4000
-2000
0
2000
4000
valores x
valors y
v
a
l
o
r
e
s

z
X
1
= 9 y Y
1
=0 tienes un mximo
X
1
= 9 y Y
2
=1 no existe ni mximo ni mnimo.
X
1
= 9 y Y
3
=-1 no existe ni mximo ni mnimo.
X
2
=- 9 y Y
1
=0 no existe ni mximo ni mnimo
X
2
= -9 y Y
2
=1 no tienes un mnimo.
X
2
= -9 y Y
3
=-1 no tienes un mnimo.

La grafica de la funcin es:





















-10
-5
0
5
10
-10
-5
0
5
10
-2000
0
2000
4000
6000
8000
10000
valores x
valores y
v
a
l
o
r
e
s

z


METODO PROGRAMADO EN MATLAB:
%dos dimensiones%
clc
syms x y
f=27*x-(1/9)*x^3-2*y^2+y^4;

%----------------calculando derivadas de la funcion-------------------
--%
sprintf('la 1er derivada respectoa a x es ')
f1=diff(f,x)

sprintf('la 2da derivada respectoa a x es ')
f2dx=diff(f,x,2)

sprintf('la 1er derivada respectoa a y es ')
f2=diff(f,y)

sprintf('la 2da derivada respectoa a y es ')
f2dy=diff(f,y,2)

sprintf('la 2da derivada respectoa a y-x es ')
f2yx=diff(f2,x)

sprintf('la 1er derivada respectoa a x-y es ')
f2xy=diff(f1,y)

%-----------------resolviendo la df/dx y df/dy -----------------------
-%
sprintf('si df/dx y df/dy se resuelven por simultaneas presiona 1 de
lo contrario 2')
g=input('dame tu eleccion ');
if g==1
subs x y
sprintf('resolviendo la 1a derivada en x-y ')
%--c=df/fy---%
w1=input('dame la df/dy ');
x=solve(w1*1.0,x)
x=x*1.0;
%---d=df/dx---%
w=input('dame la df/dx ');
d=solve(w*1.0,y)
sprintf('los valores del polinomio son los siguientes ')
y1=input('dame el primer valor del polinomio ');
y2=input('dame el segundo valor del polinomio ');
y3=input('dame el tercer valor del polinomio ');
y1
y2
y3
x1=1-y1
x2=1-y2
x3=1-y3
else

if g==2
subs x y
%--w1=df/fy---%
w1=input('dame la df/dx ');
x=solve(w1*1.0,x)
%---d=df/dx---%
w=input('dame la df/dy ');
d=solve(w*1.0,y)
sprintf('los valores del polinomio son los siguientes ')
y1=input('dame el primer valor del polinomio y1 ');
y2=input('dame el segundo valor del polinomio y2 ');
y3=input('dame el tercer valor del polinomio y3 ');
y1
y2
y3
x1=input('dame el primer valor del polinomio x1 ');
x2=input('dame el segundo valor del polinomio x2 ');
x1
x2
end
end



%----------------calculando los valores-------------------------%
x1=input('dame el valor de x1 ');
y1=input('dame el valor de y1 ');
sprintf('introduce los valores en funcion de x1-y1')
z1=input('dame f2dx ');
z2=input('dame f2xy ');
z3=input('dame f2yx ');
z4=input('dame f2dy ');
z1=z1;
z2=z2;
z3=z3;
z4=z4;
h(1,1)=z1;
h(1,2)=z2;
h(2,1)=z3;
h(2,2)=z4;
h
h1=det(h)
d1=z1
if h1~=0
if h1>0
if d1>0
sprintf('TIENES UN MINIMO')
else
sprintf('TIENES UN MAXIMO')
end
else
sprintf('NO EXISTE NI MAXIMO NI MINIMO')
end
else
sprintf('EL CRITERIO NO DA INFORMACION')
end



x1=input('dame el valor de x1 ');
y2=input('dame el valor de y2 ');
sprintf('introduce los valores en funcion de x1-y2')
z1=input('dame f2dx ');
z2=input('dame f2xy ');
z3=input('dame f2yx ');
z4=input('dame f2dy ');
z1=z1;
z2=z2;
z3=z3;
z4=z4;
h(1,1)=z1;
h(1,2)=z2;
h(2,1)=z3;
h(2,2)=z4;
h
h1=det(h)
d1=z1
if h1~=0
if h1>0
if d1>0
sprintf('TIENES UN MINIMO')
else
sprintf('TIENES UN MAXIMO')
end
else
sprintf('NO EXISTE NI MAXIMO NI MINIMO')
end
else
sprintf('EL CRITERIO NO DA INFORMACION')
end



x1=input('dame el valor de x1 ');
y3=input('dame el valor de y3 ');
sprintf('introduce los valores en funcion de x1-y3')
z1=input('dame f2dx ');
z2=input('dame f2xy ');
z3=input('dame f2yx ');
z4=input('dame f2dy ');
z1=z1;
z2=z2;
z3=z3;
z4=z4;
h(1,1)=z1;
h(1,2)=z2;
h(2,1)=z3;
h(2,2)=z4;
h
h1=det(h)
d1=z1
if h1~=0
if h1>0
if d1>0
sprintf('TIENES UN MINIMO')
else
sprintf('TIENES UN MAXIMO')
end
else
sprintf('NO EXISTE NI MAXIMO NI MINIMO')
end
else
sprintf('EL CRITERIO NO DA INFORMACION')
end



x2=input('dame el valor de x2 ');
y1=input('dame el valor de y1 ');
sprintf('introduce los valores en funcion de x2-y1')
z1=input('dame f2dx ');
z2=input('dame f2xy ');
z3=input('dame f2yx ');
z4=input('dame f2dy ');
z1=z1;
z2=z2;
z3=z3;
z4=z4;
h(1,1)=z1;
h(1,2)=z2;
h(2,1)=z3;
h(2,2)=z4;
h
h1=det(h)
d1=z1
if h1~=0
if h1>0
if d1>0
sprintf('TIENES UN MINIMO')
else
sprintf('TIENES UN MAXIMO')
end
else
sprintf('NO EXISTE NI MAXIMO NI MINIMO')
end
else
sprintf('EL CRITERIO NO DA INFORMACION')
end



x2=input('dame el valor de x2 ');
y2=input('dame el valor de y2 ');
sprintf('introduce los valores en funcion de x2-y2')
z1=input('dame f2dx ');
z2=input('dame f2xy ');
z3=input('dame f2yx ');
z4=input('dame f2dy ');
z1=z1;
z2=z2;
z3=z3;
z4=z4;
h(1,1)=z1;
h(1,2)=z2;
h(2,1)=z3;
h(2,2)=z4;
h
h1=det(h)
d1=z1
if h1~=0
if h1>0
if d1>0
sprintf('TIENES UN MINIMO')
else
sprintf('TIENES UN MAXIMO')
end
else
sprintf('NO EXISTE NI MAXIMO NI MINIMO')
end
else
sprintf('EL CRITERIO NO DA INFORMACION')
end



x2=input('dame el valor de x2 ');
y3=input('dame el valor de y3 ');
sprintf('introduce los valores en funcion de x2-y3')
z1=input('dame f2dx ');
z2=input('dame f2xy ');
z3=input('dame f2yx ');
z4=input('dame f2dy ');
z1=z1;
z2=z2;
z3=z3;
z4=z4;
h(1,1)=z1;
h(1,2)=z2;
h(2,1)=z3;
h(2,2)=z4;
h
h1=det(h)
d1=z1
if h1~=0
if h1>0
if d1>0
sprintf('TIENES UN MINIMO')
else
sprintf('TIENES UN MAXIMO')
end
else
sprintf('NO EXISTE NI MAXIMO NI MINIMO')
end
else
sprintf('EL CRITERIO NO DA INFORMACION')
end

%--------------------------grafica---------------------------------%
sprintf('si quieres ver la grafica presiona 2 si no presiona 1')
s=input('dame s ');
if s>1
sprintf('COMIENZA LA GRAFICA')
[x,y]=meshgrid(-10:0.5:10);
z=27*x-(1/9)*x.^3-2*y.^2+y.^4;
mesh(x,y,z)
else
end





Conclusiones sobre el mtodo:
Este mtodo presenta inconsistencias al momento de resolver df/dx y df/dy ya que
en este punto puede presentarse indeterminaciones o valores fuera de lo
esperado as como puntos de inflexin o de silla.



Mtodo del mximo descenso del gradiente

Empezamos en un punto (po) y buscamos una mejora en la semirrecta que parte
de (po) en la direccin sealada por el vector s0=-g/abs(g). este es un problema en
una variable que podemos resolver con mtodos de bsqueda unidireccional . de
esta manera llegamos a (p1), en el cual hay un mnimo local de la funcin f(x)
restringida a los puntos x de la semirrecta x=p1+t*s0. Esto es un proceso iterativo
hasta encontrar la solucin con la tolerancia deseada.

Encontrar por mximo descenso del gradiente el mnimo de la siguiente funcin.



i x1 x2 foriginal dF1 dF2 normal alfa
0 1,5 0,5 0,3125 0,5 -2 2,061552813 0,103

La minimizacin de alfa es mediante el mtodo de la secante como se puede
ver en la grafica para la primera iteracin.







-10 -8 -6 -4 -2 0 2 4 6 8 10
-1000
-500
0
500
1000
1500
2000
2500
3000
La siguiente tabla desarrollada en Excel muestra algunas iteraciones hechas
para resolver el mnimo de la funcin.
i x1 x2 foriginal dF1 dF2 normal alfa h
0 1,5 0,5 0,3125 0,5 -2 2,061552813 0,10283145 0,09384025

1 1,44858427 0,7056629 0,09384025
-
0,59613539
-
0,14903387 0,6144823 0,36752205 0,03374833

2 1,66767718 0,76043614 0,03374833 0,14680492
-
0,58721961 0,605292126 0,10404737 0,01468555

3 1,65240251 0,8215348 0,01468555
-
0,14932666
-
0,03733167 0,153922401 0,67718545 0,00727786

4 1,75352435 0,84681526 0,00727786 0,05989384
-
0,23957533 0,246948598 0,10445618 0,00409268

5 1,74726807 0,87184038 0,00409268
-
0,05739682
-
0,01434921 0,059163284 0,95530035 0,00249505

6 1,80209927 0,88554819 0,00249505 0,0310029
-
0,12401158 0,127828215 0,10462973 0,00164021

7 1,79885544 0,89852348 0,00164021
-
0,02893559 -0,0072339 0,029826121 1,16963871 0,00113424

8 1,83269963 0,90698453 0,00113424 0,01873057
-
0,07492225 0,077228088 0,1047186 0,00082196

9 1,83073819 0,91483029 0,00082196
-
0,01724187
-
0,00431047 0,017772515 1,32921272 0,00061583

10 1,8536563 0,92055982 0,00061583 0,01253668
-
0,05014669 0,051690026 0,10477056 0,00047587

11 1,85234283 0,92581371 0,00047587
-
0,01144646
-
0,00286162 0,011798738 1,44883826 0,00037629

12 1,86892689 0,92995973 0,00037629 0,00900744
-
0,03602973 0,037138595 0,10480393 0,00030401

Donde x1 y x2 son las
aproximaciones
Foriginal=la funcin
original evaluada en
x1 y x2
F1=derivada de la
funcin original en x1
F2=derivada de la
funcin original en x2
A=alfa
H=funcin a
minimizar



















-10
-5
0
5
10
-10
0
10
0
0.5
1
1.5
2
2.5
x 10
4
valores x
valores y
v
a
l
o
r
e
s

z
-10
-5
0
5
10
-10
-5
0
5
10
-8000
-6000
-4000
-2000
0
2000
4000
valores x valores y
v
a
l
o
r
e
s

z





























-10
-5
0
5
10
-10
-5
0
5
10
-150
-100
-50
0
50
100
150
valores x
valores y
v
a
l
o
r
e
s

z
Encontrar los puntos crticos y determinar si son mximos o mnimos en la funcin.





Resolviendo de manera independiente df/dx y df/dy para calcular los puntos
crticos tenemos que de la 1 derivada en x
X
1
=0
X
2
=1
X
3
=2

De la 1 derivada en y
y
1
=0
y
2
= 2.1472
y
3
= -1.3972


Para la primer pareja de valores, es decir (x1, y1)


Hess= -96
Por lo tanto no hay mximo ni mnimo

Concluyendo que
X1=0, y1=0 no existe ni mximo ni mnimo.
X2=1, y2=2.1472 no existe ni mximo ni mnimo.
X1=0, y1=0 tienes un mnimo.







Grafica de


































-10
-5
0
5
10
-10
0
10
-5000
0
5000
10000
15000
valores x
valores y
v
a
l
o
r
e
s

z
Mtodo de Newton.

El mtodo de Newton hace uso de la aproximacin de segundo orden de la funcin
utilizando las derivadas segundas con respecto a cada una de las variables
independientes. De esta forma es posible tener en cuenta la curvatura de la
funcin en el punto e identificar las mejores direcciones de bsqueda.
El mnimo de f(x) se obtiene diferenciando la aproximacin cuadrtica de f(x) con
respecto a cada una de las variables e igualando a cero. As:

Vf (x) =Vf (xk ) +H(xk ) Axk
Si f(x) es una funcin cuadrtica el mnimo se alcanza en un nico paso. Pero para
una funcin general no lineal el ptimo no se alcanza en un nico paso, por lo que
se puede modificar la ecuacin anterior para introducir el parmetro de longitud de
paso, con lo que queda:



La longitud de paso se puede calcular va cualquier mtodo de optimizacin
numrica de los ya comentados o bien analticamente con lo que se obtendra:




En el mtodo de Newton estrictamente hablando el valor de es la unidad. El
problema tambin se puede resolver sin necesidad de invertir la matriz hessiana
resolviendo directamente el sistema de ecuaciones lineales en Ax, aplicando la
factorizacin adecuada y evitando los errores de redondeo, en la medida de lo
posible, que puedan aparecer como consecuencia del proceso de inversin de
matrices.

El mtodo de Newton es el mtodo de minimizacin ms rpido, cuando funciona
bien.
Pero presenta las siguientes desventajas:
1.- El mtodo no encuentra necesariamente un ptimo global (pero esto es una
caracterstica de todos los mtodos que hemos comentado hasta el momento)
2.- Requiere la inversin de matrices o la resolucin de un sistema de n
ecuaciones lineales
3.- Necesita de las derivadas primera y segunda, las cuales en la prctica no son
fciles de obtener.
4.- El mtodo puede llevar a un punto de silla si la matriz hessiana no es definida
positiva.

La dificultad 3 se puede aliviar utilizando mtodos apropiados de diferencias finitas
para el clculo de las derivadas primera y segunda. La convergencia global se
puede reforzar si, al realizar un paso de Newton propiamente dicho (=1) no se
obtiene mejora de la funcin objetivo, se vuelve al punto anterior y se realiza una
bsqueda con el valor de variable.
Para evitar la dificultad 4 se debe ser muy cuidadoso con la tcnica que se utiliza
para garantizar que la matriz hessiana o su inversa sea definida positiva. (en
algunos casos debido al nmero de condicin de la matriz la inversin de sta
podra llevar a matrices no definidas positivas). Por otra parte slo est
garantizado que el valor de la funcin objetivo mejora si la matriz hessiana es
definida positiva. H(x) es definida positiva slo para funciones estrictamente
convexas, pero las funciones no lineales en general la matriz
H(x) puede cambiar de punto a punto y el mtodo de Newton podra llevarnos a
direcciones que no reducen el valor de la funcin objetivo (o al menos no a las
direcciones ptimas). En otras palabras si los valores propios de la matriz hessiana
son todos positivos sabemos que estamos aproximando nuestra funcin por una
cuadrtica de contornos circulares o elipsoidales que tienen un mnimo. Pero si al
menos dos valores propios presentan signos opuestos podramos movernos en
direccin a un punto de silla en lugar de hacia el mnimo.
El mtodo de Newton tiene la ventaja de la convergencia cuadrtica slo en la
vecindad del ptimo, donde la funcin objetivo puede ser aproximada bastante
bien por una funcin cuadrtica. Pero en zonas ms alejadas otros mtodos
pueden presentar velocidades de convergencia mayores.


Ejercicio:
Minimizar la siguiente funcin:


Las derivadas correspondientes son:






Haciendo los clculos en Excel el ejercicio quedara de la siguiente forma:



























-10
-5
0
5
10
-10
-5
0
5
10
0.95
1
1.05
1.1
1.15
1.2
x 10
5
valores x
valores y
v
a
l
o
r
e
s

z


Ref. bibliogrfica:
Libro: Mtodos numricos con matlab 5 edicicon,Johns H.Mathews,Kurtis D. Fink.
Cap. 8 Optimizacion numrica pag. 433

You might also like