这是我最优化方法课程的编程作业,贴来和大家分享,后续会继续发来一些最优化的程序。
以下程序由matlab编写
程序简介
jintuifa.m
进退法,用于确定下单峰区间.根据最优化方法(天津大学出版社)20页算法1.4.3编写。
输出:[left right] 为下单峰区间
输入:y x x0 step
y为函数,x为函数y的变量,x0 step(>0)分别为初始点,初始步长
golddiv.m
黄金分割法。根据最优化方法(天津大学出版社)17页算法1.4.2编写。
当保留的区间长度|b-a|<=epsilon时停止迭代
输出:[best_x best_fx] best_x为最优的x值,best_fx为最优的函数值
输入: y x a b epsilon
y为函数,x为函数y的变量,a,b为下单峰区间[a,b],epsilon为精确度
paowuxianfa.m
抛物线法(二次插值法)。根据最优化方法(天津大学出版社)22页算法1.4.5编写。
输出:[best_x best_fx] best_x为最优的x值,best_fx为最优的函数值
输入:x1 x0 x2 epsilon1 epsilon2 x1,x0,x2为已知的三点且满足f1>f0<f2,epsilon为精确度
wolfe.m
Wolfe不精确一维搜索。根据最优化方法(天津大学出版社)24页算法1.4.6编写。
输出:[alpha xk1] alpha为要求的步长,xk1为x(k+1)是得出的下一个点
输入:xk pk mu sigma xk为初始点,pk为方向,mu和sigma为参数. 一般mu属于(0,1/2),sigma属于(mu,1)
f.m
老师测试的例子函数例4
g.m
老师作业例子4函数求梯度
test.m
一个调用jintuifa.m golddiv.m paowuxianfa.m的计算的例子
程序详细代码
f.m
%最优化编程作业中的例子
function result = f(x)
%result = x.^4+2.*x+4;%例1 区间为[-1,0]
%result = exp(-x)+x.^2;%例2 区间为[0,1]
result =100*(x(2)-x(1)^2)^2+(1-x(1))^2;%例4
g.m
%求在点x处的梯度,对应编程作业中的例四 这里的x是向量,代表x1,x2…