Borrar filtros
Borrar filtros

Where's the bug in the following codes?

2 visualizaciones (últimos 30 días)
Shawn Miller
Shawn Miller el 9 de Oct. de 2015
Comentada: Stephen23 el 10 de Oct. de 2015
fun=@(x,y)100*(y-x^2)^2+(1-x)^2;
x=-10:1:10;
y=-10:1:10;
[z,val]=fminsearch(fun,3,3);

Respuesta aceptada

Star Strider
Star Strider el 9 de Oct. de 2015
You have to give fminsearch a function of one parameter vector. I created two versions of your ‘fun’ function, one to use as an argument to fminsearch and one for the plot, vectorising both functions so they will work:
% MAPPING: b(1) = x, b(2) = y
fun=@(b)100*(b(2)-b(1).^2).^2+(1-b(1)).^2; % Argument To ‘fminsearch’
[z,val]=fminsearch(fun,[3,3])
x=-10:1:10;
y=-10:1:10;
[X,Y] = meshgrid(x,y); % Create Matrix Arguments
funplot=@(x,y)100*(y-x^2)^2+(1-x)^2; % Plotting Version
figure(1)
surfc(X, Y, funplot(X,Y))
grid on
I could have used the same function for both, but this is more straightforward.
  5 comentarios
Star Strider
Star Strider el 10 de Oct. de 2015
Editada: Star Strider el 10 de Oct. de 2015
@Shawn — Yes it should. I miscopied it somehow. (The code worked and produced the correct plot with the correct element-wise function operators.) It should look like ‘fun’:
funplot=@(x,y)100*(y-x.^2).^2+(1-x).^2; % Plotting Version
EDIT — To plot the minimum as well as the function, the code becomes:
fun=@(b)100*(b(2)-b(1).^2).^2+(1-b(1)).^2; % Argument To ‘fminsearch’
[z,val]=fminsearch(fun,[3,3])
x=-10:1:10;
y=-10:1:10;
[X,Y] = meshgrid(x,y); % Create Matrix Arguments
funplot=@(x,y)100*(y-x.^2).^2+(1-x).^2; % Plotting Version
figure(1)
surfc(X, Y, funplot(X,Y))
hold on
plot3(z(1), z(2), funplot(z(1),z(2)), 'mp', 'MarkerSize',15, 'MarkerFaceColor','c')
hold off
grid on
view(-15, 30)
It plots the minimum with a slightly buried magenta pentagram with a red outline.
Stephen23
Stephen23 el 10 de Oct. de 2015
@Shawn Miller: one can vectorize funplot, and this can be called (and plotted) with vector/matrix inputs. funfmin stays the same.

Iniciar sesión para comentar.

Más respuestas (1)

Stalin Samuel
Stalin Samuel el 9 de Oct. de 2015
yrfun = @(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2;
[z,val]=fminsearch(yrfun,[-10 10]);
  1 comentario
Shawn Miller
Shawn Miller el 9 de Oct. de 2015
Editada: Shawn Miller el 9 de Oct. de 2015
Thanks Stalin, I actually know that using a vector x in the anonymous function works, however, the problem appeared when I tried to plot the fun, and it makes it difficult to plot using vector x I suspect. This is why I turn to use x and y as independent variables. Do you know if fminsearch supports function defined in my way/if you don't think so, how do you plot the function using vector x as input?

Iniciar sesión para comentar.

Categorías

Más información sobre Line Plots en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by