簡體   English   中英

如何在matlab中繪制rosenbrock函數

[英]How to plot rosenbrock function in matlab

我正在嘗試繪制rosenbrock function

Rosenbrock功能

像這樣

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

我知道上面的函數實現不正確。 使用循環可以很容易地完成,但是使用矢量化我得到了錯誤的結果。 可以任何身體幫助。

的ROSENBROCK

rosenbrock function的矢量化版本將是 -

sum(100*(xx(2:end) - xx(1:end-1).^2).^2 + (xx(1:end-1)-1).^2)

樣品運行 -

% 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM