https://blog.csdn.net/sinat_34474705/article/details/70306327
我在看篇文章中作者的程序时,发现这段下面这段代码中需要自己手动输入梯度,我试着用matlab自带的求梯度函数改了一下,总数出现错误信息:输出项过多。想请教一下不可以让程序自己求梯度吗?
目标函数:Rosenbrock函数(Rosenbrock.m)
function [f,g] = Rosenbrock(x)
f = 100*(x(2)-x(1)^2)^2 +(1-x(1))^2;
g1 = 2*x(1) - 400*x(1)*(- x(1)^2 + x(2)) - 2;
g2 = - 200*x(1)^2 + 200*x(2);
g = [g1,g2]';
这是我改写的:
function [f,g] = Rosenbrock(x)
f = 100*(x(2)-x(1)^2)^2 +(1-x(1))^2;
[g1,g2]=gradient(f)
g = [g1,g2]';
错误信息:
错误使用 gradient (line 49)
输出参数太多。
出错 Rosenbrock (line 3)
[g1,g2]=gradient(f)
出错 main_steepDescent (line 16)
[~,gk] = Rosenbrock(x0); % 求初始梯度