Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 我想确保代码真正实现了最速下降法_Matlab_Nonlinear Optimization - Fatal编程技术网

Matlab 我想确保代码真正实现了最速下降法

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_

我制定了最陡下降的代码,我想知道我是否在赖特的路上?!!当我把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_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循环来代替。