![]() |
[紧急求助]最速上升法debug
:confused: 求各位高手帮忙,先谢了
以下函数对任意z=f(x,y)求最大值,首先从起始点开始用最速上升法求上升最快的梯度,再用黄金分割法求得在此梯度上的局部最大值,如此类推,只到求得全局最大值. (x_1,y_1,gh) 为局部最大值的坐标,子函数黄金查找法算法经单独验证,没有问题,主函数在运行过程中在循环判断部分老是出现如下错误: 在命令窗口中随便输入函数进行测试,例如: >>syms x y >>f=f=-(x-2)^2-(y-1)^2+12; >> [x_1,y_1,gh]=mar(f) [COLOR="Red"]??? Function 'lt' is not defined for values of class 'sym'. Error in ==> lt at 18 [varargout{1:nargout}] = builtin('lt', varargin{:}); Error in ==> mar at 29 if t<0.0001[/COLOR] function [x_1,y_1,gh]=mar(f) syms x y a b t x_1 y_1 a=diff(f,'x'); % f 函数分别对x,y求导 b=diff(f,'y'); x_new=0; % starting point y_new=0; t=1; %随机设置循环条件 while 1 syms h m=subs(a,[x,y],[x_1,y_1]); %将m,n用x_1,y_1表示(替换掉x,y) n=subs(b,[x,y],[x_1,y_1]); t=sqrt(m^2+n^2); if t<0.0001 %判断条件 % break; else gh=subs(f,[x,y],[x_1+m*h,y_1+n*h]); %构筑在梯度方向上新函数gh(h) % gh_new=collect(gh,h); h=Gold_section(gh,-1000,1000) % 调用黄金查找,在区间-100,100找一维方向上的最佳步长 % m=subs(a,[x,y],[x_1,y_1]); % n=subs(b,[x,y],[x_1,y_1]); x_1=x_1+m*h; y_1=y_1+n*h; end %end x_new; y_new; function h=Gold_section(gh,p,q) phi = (sqrt(5)-1)/2; h1=p+phi*(q-p); h2=q-phi*(q-p) fh1=subs(gh,h1); fh2=subs(gh,h2); k=1; while q-p>=0.1 if(fh1 > fh2 ) p = h2; h2=h1; fh1=subs(gh,h1); fh2=subs(gh,h2); fh2=fh1; h1=p+phi*(q-p); fh1=subs(gh,h1); else q = h1; h1= h2; fh1=subs(gh,h1); h2= q-phi*(q-p); fh2=subs(gh,h2); fh1=fh2; fh1=subs(gh,h1); end k=k+1; end h=(p+q)/2; % g=subs(gh,h); k |
所有时间均为北京时间。现在的时间是 10:05。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.