Where's the bug in the following codes?
조회 수: 1 (최근 30일)
이전 댓글 표시
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);
댓글 수: 0
채택된 답변
Star Strider
2015년 10월 9일
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
Star Strider
2015년 10월 10일
편집: Star Strider
2015년 10월 10일
@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
2015년 10월 10일
@Shawn Miller: one can vectorize funplot, and this can be called (and plotted) with vector/matrix inputs. funfmin stays the same.
추가 답변 (1개)
Stalin Samuel
2015년 10월 9일
yrfun = @(x)100*(x(2)-x(1)^2)^2+(1-x(1))^2;
[z,val]=fminsearch(yrfun,[-10 10]);
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!