Matlab 我想确保代码真正实现了最速下降法
我制定了最陡下降的代码,我想知道我是否在赖特的路上?!!当我把x1=0和x2=0放在一起时,它不起作用,因为微分函数Matlab 我想确保代码真正实现了最速下降法,matlab,nonlinear-optimization,Matlab,Nonlinear Optimization,我制定了最陡下降的代码,我想知道我是否在赖特的路上?!!当我把x1=0和x2=0放在一起时,它不起作用,因为微分函数 Max_iter=5; n=0; lamda=0; syms x1 syms x2 x=[x1;x2]; fun=inline(x1-x2+2*x1^2+2*x1*x2+2*x2^2); diff(fun(x1,x2),x1) gradf=[diff(fun(x1,x2),x1);diff(fun(x1,x2),x2)]; while n<=Max_
Max_iter=5;
n=0;
lamda=0;
syms x1
syms x2
x=[x1;x2];
fun=inline(x1-x2+2*x1^2+2*x1*x2+2*x2^2);
diff(fun(x1,x2),x1)
gradf=[diff(fun(x1,x2),x1);diff(fun(x1,x2),x2)];
while n<=Max_iter
if(gradf~=0)
gradf=[diff(fun(x1,x2),x1);diff(fun(x1,x2),x2)];
y=x-lamda*gradf;
x=y;
n=n+1;
end
end
n ;
x;
Max_iter=5;
n=0;
lamda=0;
syms x1
syms x2
x=[x1;x2];
fun=内联(x1-x2+2*x1^2+2*x1*x2+2*x2^2);
差异(乐趣(x1,x2,x1)
梯度=[diff(fun(x1,x2),x1);diff(fun(x1,x2,x2)];
如果lamda
为0,则不会发生任何事情。您似乎误认为我是读心术或千里眼。也许您可以分享这个错误是什么,以尽量减少并防止今后我们讨论的任何挫折。您的代码有几个引发错误的问题。1.将字符串作为参数。您可以为它提供一个标量值。无论如何,使用一个新的方法可能会更简单。函数fun
返回一个值。获取矩阵或向量并返回相邻元素之间的差。如果您希望函数的输出与x1
之间的差异使用简单的减法,即fun(x1,x2)-x1
或将它们串联在一个向量中并使用diff
,即diff([fun(x1,x2),x1])
除了这些问题之外,您还需要确保从非零梯度开始。对于当前代码,如果您从x1=0,x2=0开始,则gradf
也将为0,这意味着您的if条件将永远无法满足,并且您将无休止地卡在while循环中。考虑使用for循环来代替。