- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
优化方法课程
优化方法课程
这是我最优化方法课程的编程作业,贴来和大家分享,后续会继续发来一些最优化的程序。、
以下程序由matlab编写
程序简介
f.m
老师测试的例子函数
运行程序中,要根据计算的不同函数,修改此文件
g.m
老师作业例子4函数求梯度
jintuifa.m
进退法,用于确定下单峰区间.根据最优化方法(天津大学出版社)20页算法1.4.3编写。
输出:[left right] 为下单峰区间
输入:x0 step(0)分别为初始点,初始步长
golddiv.m
黄金分割法。根据最优化方法(天津大学出版社)17页算法1.4.2编写。
当保留的区间长度|b-a|=epsilon时停止迭代
输出:[best_x best_fx] best_x为最优的x值,best_fx为最优的函数值
输入: a b epsilon 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为已知的三点且满足f1f0f2,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
%最优化编程作业中的例子
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……
%author liuxi BIT
function result =g(x)
syms x1 x2;%定义符号变量
f=100*(x2-x1^2)^2+(1-x1)^2;
result_1=diff(f,x1);%函数f对符号变量x1求一阶微分
result_2=diff(f,x2);
result(1)=subs(result_1,[x1 x2],[x(1) x(2)]);%将result_1中的符号变量x1和x2替换为普通变量x(1),x(2)
result(2)=subs(result_2,[x1 x2],[x(1) x(2)]);
golddiv.m
%黄金分割法。根据最优化方法(天津大学出版社)17页算法1.4.2编写。
%v1.0 author: liuxi BIT
%best_x为最优的x值,best_fx为最优的函数值,a,b为下单峰区间[a,b],epsilon为精确度
%当保留的区间长度|b-a|=epsilon时停止迭代
function [best_x best_fx]=golddiv(a,b,epsilon)
if nargin==2
epsilon=0.0000001;;%设置默认的epsilon
end
x2=a+0.618*(b-a);%step1
f2=f(x2);
x1=a+0.382*(b-a);%step2
f1=f(x1);
while(abs(b-a)epsilon)
if f1f2 %step4
b=x2;x2=x1;f2=f1;
x1=a+0.382*(b-a);%转step2
f1=f(x1);
elseif f1==f2
a=x1;b=x2;
x2=a+0.618*(b-a);f2=f(x2);%转step1
x1=a+0.382*(b-a);f1=f(x1);
else
a=x1;x1=x2;f1=f2;
x2=a+0.618*(b-a);%step5
f2=f(x2);
end
end%while
best_x=(a+b)/2;%最优的x值
best_fx=f(best_x);%最优的函数值
jintuifa.m
%进退法,用于确定下单峰区间.根据最优化方法(天津大学出版社)20页算法1.4.3编写。
%v1.0 autho
文档评论(0)