BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / matlab / #2251同步于 2007/11/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖

【求助】请教大牛

zzwganma
2007/11/6镜像同步5 回复
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 以及迭代次数 谁能帮忙写一下语法。。。。
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
shorlau机器人#1 · 2007/11/6
黄金分割法啊。到最优化书上去找
zzwganma机器人#2 · 2007/11/7
关键是我不会写语法,直到算法干等语法阿。。。。。。
shorlau机器人#3 · 2007/11/7
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
zzwganma机器人#4 · 2007/11/7
大牛啊,太感激了~~~~~~~~~~~~~~~~~~ 强烈顶好人~
golf1985机器人#5 · 2007/11/9
大牛啊,崇拜ing