[英]How to plot rosenbrock function in matlab
I'm trying to plot rosenbrock function
我正在尝试绘制
rosenbrock function
Rosenbrock Function Rosenbrock功能
like this 像这样
clear; clc; close all;
% Parameters
nx = 2; % No. of Input variables
f = @rosenbrock;
limits = repmat([-10 10], nx, 1);
titl = 'Rosenbrock';
% Plot
[X,Y] = meshgrid(linspace(limits(1,1),limits(1,2),100),...
linspace(limits(2,1),limits(2,2),100));
Z = reshape(f([X(:)'; Y(:)']), 100, 100);
surfc(X,Y,Z);
rosenbrock.m
function [y] = rosenbrock(x)
xn = circshift(x',1)';
xn(1) = 0;
y = sum(100*(xn - x.^2).^2 + (x - 1).^2);
end
I know the above function implementation is not correct. 我知道上面的函数实现不正确。 With loop it can be easily done, but with vectorization I'm getting wrong results.
使用循环可以很容易地完成,但是使用矢量化我得到了错误的结果。 Can any body help.
可以任何身体帮助。
The vectorized version of rosenbrock function
would be - rosenbrock function
的矢量化版本将是 -
sum(100*(xx(2:end) - xx(1:end-1).^2).^2 + (xx(1:end-1)-1).^2)
Sample run - 样品运行 -
% Input array
>> xx
xx =
5 1 3 9 2 8 5 9 1 4
% Loopy implementation
>> d = length(xx);
sum1 = 0;
for ii = 1:(d-1)
xi = xx(ii);
xnext = xx(ii+1);
new = 100*(xnext-xi^2)^2 + (xi-1)^2;
sum1 = sum1 + new;
end
y = sum1;
>> y
y =
1698514
% Vectorized implementation
>> sum(100*(xx(2:end) - xx(1:end-1).^2).^2 + (xx(1:end-1)-1).^2)
ans =
1698514
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.