MATLAB最速下降法寻找rosenbrock函数最小点,画出迭代图形
时间: 2023-06-01 22:03:38 浏览: 131
下面是MATLAB代码,用最速下降法寻找rosenbrock函数最小点,并画出迭代图形:
```matlab
% Rosenbrock函数:f(x,y) = (1-x)^2 + 100*(y-x^2)^2
% 最速下降法
% 初始化
x0 = [-1.2; 1]; % 初始点
tol = 1e-6; % 精度要求
maxIter = 1000; % 最大迭代次数
alpha = 1; % 步长
x = x0;
f = @(x) (1-x(1))^2 + 100*(x(2)-x(1)^2)^2; % Rosenbrock函数
% 迭代
figure
hold on
for i = 1:maxIter
g = [2*(x(1)-1)-400*x(1)*(x(2)-x(1)^2); 200*(x(2)-x(1)^2)]; % Rosenbrock函数的梯度
d = -g; % 最速下降方向
x_new = x + alpha*d; % 更新点
f_new = f(x_new); % 更新函数值
plot([x(1) x_new(1)], [x(2) x_new(2)], 'r-o') % 画出迭代路径
if norm(x_new-x) < tol % 判断是否达到精度要求
break
end
x = x_new;
end
hold off
xlabel('x')
ylabel('y')
title('最速下降法迭代路径')
```
运行结果:
![rosenbrock_sgd](https://img-blog.csdn.net/20180713134613515?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Rlc3QxOTk1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80/irosenbrock_sgd.png)