1、1. 目标函数2. function f=fun(x)3. f=10*(x(1)+x(2)-5)2+(x(1)-x(2)2;2. 关于步长的函数function f=falpha(alpha,x0,s)x1=x0+alpha*s;f=fun(x1);4. 关于补偿的寻尤function f=fsearch(x0,s)%利用进退法确定区间ap1=0;h=2;ap2=ap1+h;f1=falpha(ap1,x0,s)f2=falpha(ap2,x0,s)if f1f2ap3=ap2+h;f3=falpha(ap3,x0,s);while f2f3ap1=ap2;ap2=ap3;ap3=ap3+h;
2、f1=f2;f2=f3;f3=falpha(ap3,x0,s);endelsea=ap1;ap1=ap2;ap2=a;av=f1;f1=f2;f2=av;h=-h;ap3=ap2+h;f3=falpha(ap3,x0,s);while f2f3ap1=ap2;ap2=ap3;ap3=ap3+h;f1=f2;f2=f3;f3=falpha(ap3,x0,s);endenda=min(ap1,ap3);b=max(ap1,ap3);ap1=a+0.382*(b-a);ap2=a+0.618*(b-a);f1=falpha(ap1,x0,s);f2=falpha(ap2,x0,s);while ab
3、s(b-a)0.01if f1f2a=ap1;ap1=ap2;f1=f2;ap2=a+0.618*(b-a);f2=falpha(ap2,x0,s); elseb=ap2;ap2=ap1;f2=f1;ap1=a+0.382*(b-a);f1=falpha(ap1,x0,s);endendf=0.5*(a+b);5. 主程序clear%初始点x0=0;0;%搜索方向s1=1;0;s2=0;1;f0=fun(x0);f2=1;while abs(f0-f2)1f0=fun(x0);%沿着 s1 方向进行搜索fa=fsearch(x0,s1);x1=x0+fa*s1;% 沿着 s2 方向进行搜索fa=fsearch(x1,s2);x2=x1+fa*s2;f2=fun(x2);x0=x2;end