如何在3D表面上绘制梯度下降matlab的推进

时间:2018-01-02 18:45:14

标签: matlab plot gradient-descent

我会尽量减少代码。对不起提前。

我在以下网格上实现了梯度下降算法:

[x,y] = meshgrid(-3:.1:3,-3:.1:3);
f = 80.*(x.^4 )+0.01.*(y.^6 );

我正在使用:

surf(x,y,f); xlabel('x'); ylabel('y'); zlabel('f(x,y)');
print('f.png','-dpng');
hold on;

之后是算法。 hold on;就在那里,因为在每次迭代中,当我有一个新的x,y点时,我想在原始函数的表面上绘制算法的收敛图。

换句话说,我希望每次迭代都在现有图上添加一条线,描述函数的下降。

我如何策划这个?

我正在添加我的渐变算法以供参考。箭袋方法是我失败的尝试,任何其他建议都非常受欢迎:

eta = 0.001;
x0 = 1;
y0 = 1;
eps = 1e-4;
dw = 10;
maxIter=5000000;
itr=1;
f_GD=zeros(maxIter,1);

x = x0;
y= y0;
while itr<maxIter && dw > eps

    dx = 4.*80.*(x.^3 );
    dy = 6.*0.01.*(y.^5 );

    x = x - eta*dx;
    y = y - eta*dy;

    dw = sqrt(dx^2+dy^2);
    f_GD(itr)=80.*(x.^4 )+0.01.*(y.^6 );
    quiver(x,y,dx,dy,2,'linewidth',3);
    itr=itr+1;

end
hold off;

1 个答案:

答案 0 :(得分:0)

我通过简单地使用plot3(x,y,z)函数找到了解决方案:

eta = 0.001;
x0 = 1;
y0 = 1;
eps = 1e-4;
dw = 10;
maxIter=5000000;
itr=1;
f_GD=zeros(maxIter,1);

x = x0;
y= y0;
while itr<maxIter && dw > eps

    dx = 4.*80.*(x.^3 );
    dy = 6.*0.01.*(y.^5 );

    x = x - eta*dx;
    y = y - eta*dy;

    dw = sqrt(dx^2+dy^2);
    f_GD(itr)=80.*(x.^4 )+0.01.*(y.^6 );
    plot3(x,y,f_GD);
    itr=itr+1;

end
hold off;