主题:[讨论]关于梯度和赋值的问题
我做毕业论文!需要用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;
都报错。
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;
都报错。