while循环持续执行

时间:2019-08-02 22:14:02

标签: matlab while-loop

我需要使用导数来获得向量的最小长度,我已经完成了数学工作并获得了公式,但是通过类似于下面的代码,我被要求使用matlab在定向搜索中找到最小的长度

    D_v=[dLdx dLdy];

    LD=norm(D_v)

    while LD > (10^-3)
        newx=Dx-0.01*dLdx;
        newy=Dy-0.01*dLdy;

        newdLdx = (newx-Ax)/sqrt((newx-Ax)^2+(newy-Ay)^2)+(newx-Bx)/sqrt((newx-Bx)^2+(newy-By)^2)+(newx-Cx)/sqrt((newx-Cx)^2+(newy-Cy)^2);
        newdLdy = (newy-Ay)/sqrt((newy-Ay)^2+(newx-Ax)^2)+(newy-By)/sqrt((newy-By)^2+(newx-Bx)^2)+(newy-Cy)/sqrt((newy-Cy)^2+(newx-Cx)^2);
        newD_v=[newdLdx newdLdy];
        LD=norm(newD_v)


    end

这个while循环继续运行,LD并没有改变,我确定它缺少一些简单的信息,但是我似乎找不到我的错误。

1 个答案:

答案 0 :(得分:0)

没有一个最小的,可重复的示例,我不能确定这是唯一的错误,但这绝对是您的问题之一:

在循环中,您定义

newx=Dx-0.01*dLdx;
newy=Dy-0.01*dLdy;

,但是dLdxdLdy不在循环内更新。

因此将代码修改为:

D_v = [dLdx dLdy];
LD = norm(D_v)

while LD > (10^-3)
    newx = Dx-0.01*dLdx;
    newy = Dy-0.01*dLdy;

    dLdx = ...
    dLdy = ...
    newD_v =[dLdx dLdy];
    LD = norm(newD_v)
end