回 帖 发 新 帖 刷新版面

主题:[讨论]关于梯度和赋值的问题

我做毕业论文!需要用matlab做数值实验,要编一个共轭梯度的程序调试!可是在求梯度那部分总是说出现错误。无论是用diff还是gradient都不行!请高手帮我看下,是为什么。
function [x,i]=conja(x0,t,z)
x=x0;
F=@funcFaa;
fi=gradient(F);%求梯度
fi=subs(fi,x);
d=-fi;%共轭方向取负梯度
i=0;
   while double(norm(fi))>t
     a=-z*fi'*d/norm(d)^2;
     x=x+a*d;
     fxi=subs(fx,'x');
     fyi=subs(fy,'x');
     fii=[fxi,fyi];
     b=(norm(fii))^2/(norm(fi))^2;
     c=(fii'*d+norm(fi)^2)/norm(fi)^2;
     d=-c*fii+b*d;
     i=i+1;
     fi=fii;
   end
?? Error using ==> zeros
Trailing string input must be a valid numeric class name.

Error in ==> gradient at 59
   g  = zeros(size(f),class(f)); % case of singleton dimension

Error in ==> conja at 4
[fx,fy]=gradient(F);%求梯度

或者这样
function [x,i]=conja(x,t,z)

F=@funcFaa;
fx=diff(F,x(1));
fy=diff(F,x(2));
fx=subs(fx,x);
fy=subs(fy,x);
fi=[fx,fy];
d=-fi;
i=0;
都报错。

回复列表 (共1个回复)

沙发

因为 x是向量,所以梯度矩阵应该改为jacobian来求,gradient和diff求得的是向量。

我来回复

您尚未登录,请登录后再回复。点此登录或注册