Un problema con matlab.
Buenos días tengo un proyecto con matlab y hay uno de los ejercicios que no me sale después de mucho intentarlo y nada.He pensado que como usted es experto en el tema seguramente pueda conseguir resolverlo.
Muchas gracias de antemano.
El problema es el siguiente:
Ejecuta el script de Matlab SteepestStep (que acompa~na a esta practica) para ver un ejemplo
de como ir desde un punto P (donde de nimos v) a otro punto QUE (donde g(s) = 0) para
la funcion F(x; ¿y) =? Sin(x) sin(y). Estudia las lneas 37 y 38 del script para aprender como
se de ne en Matlab una funcion que depende de parametros (por ejemplo, una funcion de una
variable a partir de una funcion de varias variables que se mantienen jas { como nuestra funcion
g(s), eq (1)).
El proceso completo consiste simplemente en repetir este paso iterativamente hasta que nos
encontremos tan cerca como deseemos del mnimo buscado (donde rF = 0) lo que controlaremos
a traves de un parametro peque~no TOL:
(1) Escoger un punto inicial p
(2) Para este punto p, determinar v = rF(p)
(3) Para estos p y v, de nimos g (eq. (1))
(4) Resolvemos g(s) = 0
(5) Con el valor s obtenido, calcular q = p ?? S v
(6) Si jjrF(q)jj2 < TOL , ya esta.
(7) En caso contrario, el vector q sera el nuevo punto p. Ir a (2)
Sin embargo hay todava un problema tecnico importante. Para resolver g(s) = 0, necesitamos
encontrar un intervalo donde se halle el punto s buscado, esto es tenemos que encontrar
un intervalo (sa; sb) donde g cambia de signo. Notese que hemos construido f(s) de manera tal
que g(0) = f0(0) < 0. As, si escogemos sa = 0, solo necesitaremos encontrar un valor sb > 0
tal que g(sb) > 0. En general, esta tarea no es trivial. Sin embargo, si nuestra funcion F crece
cuando nos movemos su cientemente en cualquier direccion (limjjxjj! 1 F(x) ! 1), solamente
tendremos que incrementar s lo su ciente para hallar un valor apropiado para sb. Una manera
de hacer esto es comenzar con s = 1 y comprobar si g(s) > 0. Si lo fuera, este sera nuestro
valor sb. Una manera de proceder es comenzar con s = 1 y comprobar si g(1) > 0. Si lo es, este
sera sb. En caso contrario duplicamos s recursivamente hasta que g(s) > 0.
Escribir la funcion de Matlab SteepestMin que implementa el algoritmo de la \maxima
pendiente" para funciones de 2 variables. La funcion debe usar el mecanismo de busqueda
de intervalos (sa; sb) indicado anteriormente y fzerotx para hallar la solucion de g(s) = 0.
Adicionalmente, la funcion debe producir una gra ca de contornos de F(x; y) en el dominio
[? 1:5; 1:5] [?1:5; 1:5], mostrando los puntos p obtenidos a lo largo del proceso de
minimizacion unidos por una poligonal. (En caso de necesidad, estudiar las lneas 83{114
del script SteepestStep).
function [qx,qy,Fxy,k] = SteepestMin(F,Fx,Fy,px,py,TOL)
% Encuentra un mínimo de la función inline F(x, y) usando el algoritmo
% De la máxima pendiente, utilizando fzerotx para solucionar g(s)=0.
%
% INPUT. F Función que deseamos minimizar ('inline' function)
% Fx Derivada de F con respecto a x ('inline' function)
% Fy Derivada de F con respecto a y ('inline' function)
% px coordenada x del punto inicial
% py coordenada x del punto inicial
% TOL tolerancia de la solución
% OUTPUT. Qx coordenada x del mínimo
% qy coordenada y del mínimo
% Fxy Valor de la función en el mínimo
% Que Numero de iteraciones del algoritmo
Escribir una funcion Steepest3 que implementa el algoritmo anterior para funciones de 3
variables:
function [qx,qy,qz,Fxyz,k] = Steepest3(F,Fx,Fy,Fz,px,py,pz,TOL)
Utilizar Steepest3 para hallar el mnimo de
H(x; y; z) = (x + e??x)(y + e??2y)(z + e??3z)
Utilizar TOL=10??3, 10??9, y 10??15.
Muchas gracias de antemano.
El problema es el siguiente:
Ejecuta el script de Matlab SteepestStep (que acompa~na a esta practica) para ver un ejemplo
de como ir desde un punto P (donde de nimos v) a otro punto QUE (donde g(s) = 0) para
la funcion F(x; ¿y) =? Sin(x) sin(y). Estudia las lneas 37 y 38 del script para aprender como
se de ne en Matlab una funcion que depende de parametros (por ejemplo, una funcion de una
variable a partir de una funcion de varias variables que se mantienen jas { como nuestra funcion
g(s), eq (1)).
El proceso completo consiste simplemente en repetir este paso iterativamente hasta que nos
encontremos tan cerca como deseemos del mnimo buscado (donde rF = 0) lo que controlaremos
a traves de un parametro peque~no TOL:
(1) Escoger un punto inicial p
(2) Para este punto p, determinar v = rF(p)
(3) Para estos p y v, de nimos g (eq. (1))
(4) Resolvemos g(s) = 0
(5) Con el valor s obtenido, calcular q = p ?? S v
(6) Si jjrF(q)jj2 < TOL , ya esta.
(7) En caso contrario, el vector q sera el nuevo punto p. Ir a (2)
Sin embargo hay todava un problema tecnico importante. Para resolver g(s) = 0, necesitamos
encontrar un intervalo donde se halle el punto s buscado, esto es tenemos que encontrar
un intervalo (sa; sb) donde g cambia de signo. Notese que hemos construido f(s) de manera tal
que g(0) = f0(0) < 0. As, si escogemos sa = 0, solo necesitaremos encontrar un valor sb > 0
tal que g(sb) > 0. En general, esta tarea no es trivial. Sin embargo, si nuestra funcion F crece
cuando nos movemos su cientemente en cualquier direccion (limjjxjj! 1 F(x) ! 1), solamente
tendremos que incrementar s lo su ciente para hallar un valor apropiado para sb. Una manera
de hacer esto es comenzar con s = 1 y comprobar si g(s) > 0. Si lo fuera, este sera nuestro
valor sb. Una manera de proceder es comenzar con s = 1 y comprobar si g(1) > 0. Si lo es, este
sera sb. En caso contrario duplicamos s recursivamente hasta que g(s) > 0.
Escribir la funcion de Matlab SteepestMin que implementa el algoritmo de la \maxima
pendiente" para funciones de 2 variables. La funcion debe usar el mecanismo de busqueda
de intervalos (sa; sb) indicado anteriormente y fzerotx para hallar la solucion de g(s) = 0.
Adicionalmente, la funcion debe producir una gra ca de contornos de F(x; y) en el dominio
[? 1:5; 1:5] [?1:5; 1:5], mostrando los puntos p obtenidos a lo largo del proceso de
minimizacion unidos por una poligonal. (En caso de necesidad, estudiar las lneas 83{114
del script SteepestStep).
function [qx,qy,Fxy,k] = SteepestMin(F,Fx,Fy,px,py,TOL)
% Encuentra un mínimo de la función inline F(x, y) usando el algoritmo
% De la máxima pendiente, utilizando fzerotx para solucionar g(s)=0.
%
% INPUT. F Función que deseamos minimizar ('inline' function)
% Fx Derivada de F con respecto a x ('inline' function)
% Fy Derivada de F con respecto a y ('inline' function)
% px coordenada x del punto inicial
% py coordenada x del punto inicial
% TOL tolerancia de la solución
% OUTPUT. Qx coordenada x del mínimo
% qy coordenada y del mínimo
% Fxy Valor de la función en el mínimo
% Que Numero de iteraciones del algoritmo
Escribir una funcion Steepest3 que implementa el algoritmo anterior para funciones de 3
variables:
function [qx,qy,qz,Fxyz,k] = Steepest3(F,Fx,Fy,Fz,px,py,pz,TOL)
Utilizar Steepest3 para hallar el mnimo de
H(x; y; z) = (x + e??x)(y + e??2y)(z + e??3z)
Utilizar TOL=10??3, 10??9, y 10??15.
Respuesta de mariscvc
1