我需要使用导数来获得向量的最小长度,我已经完成了数学工作并获得了公式,但是通过类似于下面的代码,我被要求使用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并没有改变,我确定它缺少一些简单的信息,但是我似乎找不到我的错误。
答案 0 :(得分:0)
没有一个最小的,可重复的示例,我不能确定这是唯一的错误,但这绝对是您的问题之一:
在循环中,您定义
newx=Dx-0.01*dLdx;
newy=Dy-0.01*dLdy;
,但是dLdx
和dLdy
不在循环内更新。
因此将代码修改为:
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