马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
- function g=conjugate_grad_2d(x0,t)
- %please input this:conjugate_grad_2d([2,2],0.05)
- x=x0;
- syms xi yi a
- f=xi^2-xi*yi+3*yi^2;
- fx=diff(f,xi);
- fy=diff(f,yi);
- fx=subs(fx,{xi,yi},x0);
- fy=subs(fy,{xi,yi},x0);
- fi=[fx,fy];
- count=0;
- while double(sqrt(fx^2+fy^2))>t
- s=-fi;
- if count<=0
- s=-fi;
- else
- s=s1;
- end
- x=x+a*s;
- f=subs(f,{xi,yi},x);
- f1=diff(f);
- f1=solve(f1);
- if f1~=0
- ai=double(f1);
- else
- break
- x,f=subs(f,{xi,yi},x),count
- end
- x=subs(x,a,ai);
- f=xi^2-xi*yi+3*yi^2;
- fxi=diff(f,xi);
- fyi=diff(f,yi);
- fxi=subs(fxi,{xi,yi},x);
- fyi=subs(fyi,{xi,yi},x);
- fii=[fxi,fyi];
- d=(fxi^2+fyi^2)/(fx^2+fy^2);
- s1=-fii+d*s;
- count=count+1;
- fx=fxi;
- fy=fyi;
- end
- x,f=subs(f,{xi,yi},x),count
复制代码
本程序由tammy友情提供 |