Matlab - Duda con optimización en scilab

 
Vista:

Duda con optimización en scilab

Publicado por Carol89 (5 intervenciones) el 14/03/2012 20:27:11
Hola a todos soy novata en este foro y espero ue alguien me pueda ayudar.Tengo que implementar una función para encontran un máximo empleando el método de la sección aurea, sin embargo al ejecutarlo no consigo que entre en ciclo while y me imprime xopt inicial de ese ciclo que no es el que me interesa.Ojala alguien me ayude a encontrar el error .Muchas gracias os adjunto el programa que para los parametros dados.muchas gracias

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
deff('fx=ec(x)','fx=2*sin(x)-(x^2/10)');
xlow=0
xhigh=4
maxit=1000
es=0.000001
opcion=1
 
function [xopt,fopt,iter,ea]=goldmax(xlow,xhigh,maxit,fx)
    xl=xlow
    xh=xhigh
    iter=1
 
    d=(xh-xl)*((sqrt(5)-1)/2*(xh-xl))
    x1=xl+d
    x2=xh+d
    f1=ec(x1)
    f2=ec(x2)
 
    if f2<f1 then
        xopt=x1
        fopt=f1
    else
        xopt=x2
        fopt=f2
    end
    es=0.00001
    ea=es*10
    while ea>es & iter<maxit
        iter=iter+1
        d=d*R
        if f1>f2 then
            xl=x2
            x2=x1
            x1=xl+d
            f2=f1
            f1=ec(x1)
         else
             xh=x1
             x1=x2
             x2=xh-d
             f1=f2
             f2=ec(x2)
          end
 
          if f1>f2 then
              xopt=x1
              fopt=f1
          else
              xopt=x2
              fopt=f2
           end
           if xopt~=0
               ea=100*(1-R)*abs((xh-xl)/xopt)
           end
      end
 
endfunction
 
[xopt,fopt,iter,ea]=gold(xlow,xhigh,maxit,ec)
disp(xopt)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Duda con optimización en scilab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 16/03/2012 14:49:08
Hola Carol89
Nose, si te habran contestado en los demas foros que hicistes tu pregunta.
Estuve indangado tu pregunta.
En tu codigo no figura el valor de R, pero sin embargo lo utilizas en el proceso de desarrollo.

Ademas cual es el algoritmo de la cual estas codificando en matlab. Porque he encontrado varios algoritmos en el web, incluso programados en matlab acerca de metodo de seccion aurea.



Saludos
JOSE JEREMIAS CABALLERO

Servicios de programacion matlab


Asesor de Proyectos con Matlab
programador en matlab
[email protected]

http://matlabcaballero.blogspot.com/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con optimización en scilab

Publicado por Carol89 (5 intervenciones) el 16/03/2012 19:05:07
Gracias por contestar .La verdad es que he comentado en este foro porque en el resto no obtenía respuesta y tras mucho mirar el ejercicio no doy con el fallo.
En lo de R tienes razón en que no esta inicializado y tro fallo que he visto es que para ejecutar el programa he introducido [xopt,fopt,iter,ea]=gold(xlow,xhigh,maxit,ec) en lugar de [xopt,fopt,iter,ea]=goldmax (xlow,xhigh,maxit,ec)pero aun con esos cambios no me entra al ciclo.

El algoritmo empleado se encuentra en pagina 41 de este libro http://es.scribd.com/doc/79270501/Chapra12-20
pero es un código para Fortran y por ello no se si las condiciones del ciclo son incorrectas y por eso no me entra en el ciclo.

Muchas gracias y cualquier aclaración será de ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Duda con optimización en scilab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 16/03/2012 19:52:46
Hola

Hola Carol89

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
function [xopt,fx,iter,ea]=metodo_seccion_aurea1(xlow,xhigh,maxiter,fun)
 
% Hola a todos soy novata en este foro y espero ue alguien me pueda
% ayudar.Tengo que implementar una función para encontran un máximo
% empleando el método de la sección aurea, sin embargo al ejecutarlo
% no consigo que entre en ciclo while y me imprime xopt inicial de
% ese ciclo que no es el que me interesa.Ojala alguien me ayude a
% encontrar el error .Muchas gracias os adjunto el programa que
% para los parametros dados.muchas gracias 
 
% [xopt,fx,iter,ea]=metodo_seccion_aurea1(xlow,xhigh,maxiter,fun) 
%[xopt,fx,iter,ea]=metodo_seccion_aurea1(0,4,1000,'2*sin(x)-(x^2/10)')
%fun='2*sin(x)-(x^2/10)';
% xlow=0;
% xhigh=4;
% maxiter=1000;
 
 
 
 
 
 
 
es=0.000001;
R=(sqrt(5)-1)/2;
xl=xlow;
xu=xhigh;
iter=1;
d=R*(xu-xl);
x1=xl+d;
x2=xu-d;
f=inline(fun);
f1=f(x1);
f2=f(x2);
if f1>f2
    xopt=x1;
    fx=f1;
else
    xopt=x2;
    fx=f2;
end
 
 
while 1
    d=R*d;
    if f1>f2
        xl=x2;
        x2=x1;
        x1=xl+d;
        f2=f1;
        f1=f(x1);
    else
        xu=x1;
        x1=x2;
        x2=xu-d;
        f1=f2;
        f2=f(x2);
    end
    iter=iter+1;
    if f1>f2
        xopt=x1;
        fx=f1;
    else
        xopt=x2;
        fx=f2;
    end
    if xopt~=0
        ea=(1-R)*abs((xu-xl)/xopt)*100;
    end
    if ea<=es || iter>=maxiter
        break;
    end
end


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
EJECUCION
>> [xopt,fx,iter,ea]=metodo_seccion_aurea1(0,4,1000,'2*sin(x)-(x^2/10)')
xopt =
    1.4276
 
 
fx =
    1.7757
 
 
iter =
    40
 
 
ea =
  7.5679e-007




Saludos
JOSE JEREMIAS CABALLERO

Servicios de programacion matlab


Asesor de Proyectos con Matlab
programador en matlab
[email protected]

http://matlabcaballero.blogspot.com/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con optimización en scilab

Publicado por Carol89 (5 intervenciones) el 29/03/2012 11:50:03
Muchisimas gracias que no lo había leido , al final no lo hice de otra forma pero tu forma es más efectiva gracias otra vez por la aclaración.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con optimización en

Publicado por oscar (1 intervención) el 18/07/2018 20:44:24
y para calcular los mínimos que se modificaría en el código
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar