返回信息流0.618法目的是要找到一个凸函数f(x)的最小值.给定一个函数f(x)=e^(-x)+e^x,初始区间[a0,b0]=[-1,1],然后在这个区间的1-0.618和0.618的位置取两个点m,nk,也就是说,mk = ak + 0.382|bk-ak|, nk = ak + 0.618|bk-ak|.计算f(mk),f(nk)
如果f(mk)>f(nk),则令ak+1 := nk, bk+1 := bk;
如果f(mk)<f(nk),则令 ak+1 := ak, bk+1 := mk;
得到下一次迭代的区间[ak+1,bk+1],继续进行以上的步骤直到区间长度|bk-ak| < 10^(-4)
k和k+1都是下标~~
输出每次的ak,bk 以及迭代次数
谁能帮忙写一下语法。。。。
这是一条镜像帖。来源:北邮人论坛 / matlab / #2251同步于 2007/11/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖
【求助】请教大牛
zzwganma
2007/11/6镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
function min = Gldsec(a,b)
tol = 1e-12;
R2 = 0.618304;
R1 = 1 - R2;
x=0;
if a > b
x = a;
a = b;
b = x;
end
x2 = a + R2*(b-a);
x1 = a + R1*(b-a);
f1 = f(x1);
f2 = f(x2);
while (b-a > tol)
if f2<f1
a = x1;
x1 = x2;
f1 = f2;
x2 = a + R2*(b-a);
f2 = f(x2);
elseif f2 > f1
b = x2;
x2 = x1;
x1 = a + R1*(b-a);
f2 = f1;
f1 = f(x1);
else
a = x1;
b = x2;
x2 = a + R2*(b-a);
x1 = a + R1*(b-a);
f1 = f(x1);
f2 = f(x2);
end
x=(a+b)/2;
end
if f1<f1
min = f1;
else
min = f2;
end