簡體   English   中英

如何在3D曲面上繪制漸變下降Matlab的進階

[英]How to plot advance of gradient descent matlab on a 3D surface

我將嘗試保留盡可能少的代碼。 提前對不起。

我已經在以下網格上實現了梯度下降算法:

[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;

我已經找到了解決方案,只需使用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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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