第二次最有优化上机讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程名称:最优化计算方法指导教师:付云姗
班级:信科13 姓名:李贵显学号: 1311710106
实验项目名称:
一维优化方法练习
实验目的及要求:
1.编写程序实现全局牛顿法;
2.编写程序实现割线法;
3.编写程序实现Goldstein非精确线性搜索。
实验原理:
在Matlab环境下,按照要求编写函数和程序,求解实例,直至取得正确的运行结果。
算法4:全局牛顿法
S1 给出精度,令k:=0;
S2 计算,, 若则转S4;若则停止;
令初始值;
S3 令, 如果, 则转 S3;
令,k=k+1,转S2;
S4令, 如果, 则令,置;
S5 如果
则转S6;置;转S5;
S6 令, k=k+1,转S2.
算法 5 割线法
S1 给出x0ÎR精度e>0,令k:=0;
S2 若¢f(x k)£e, 停止,极小值点为x k;
S3 令x
k+1
=x
k
-
(x
k
-x
k-1
)¢f(x
k
)
¢f(x
k
)-¢f(x
k-1
);
S4 令k:=k+1, 转S2.
算法 6 Goldstein非精确线性搜索
S1在搜索区间[0,¥)或([0,t max])上取定初始试探点,计算f(0),¢f(0),给出可接受系数
s
1Î(0,1)和s
2
Î(0,1)(s
2
>s
1
), 增大探索点系数a>1,a
=0,b
=+¥或(t
max
),k:=0;
S2 计算f(t k), 若
f(t
k
)£f(0)+s
1
t
k
¢f(0)
则转S3,否则令a k+1:=a k,b k+1=t k,转S4;
S3 若f(t k)³f(0)+s2t k¢f(0),停止迭代输出t k;否则令a k+1:=t k,b k+1=b k,若b k+1<+¥,转
S4, 否则令t k+1=a t k,k:=k+1,转S2;
S4 令t
k+1
=
a
k+1
+b
k+1
2,置k:=k+1转S2.
实验内容(方法和步骤):
题目7 编写程序实现全局牛顿法。
利用Matlab编写函数 [x,miny]=GlobalNewton(f,x0,eps).其中f为目标函数,x0为初始点,eps为算法终止的精度。用全局牛顿法求解无约束优化问题minf(x)。
GlobalNewton.m文件
function [x,miny]=GlobalNewton(f,x0,eps)
k = 0; x = x0;
g = diff(f); h = diff(g);
fx = subs(f, findsym(f), x);
gx = subs(g, findsym(g), x);
hx = subs(h, findsym(h), x);
delta = eps;
alpha = 0; beta = 0;
epsgx = eps;
while 1
if abs(gx) if hx>=0 break; else delta = 2 * delta; f3 = subs(f, findsym(f), x + delta); while f3>=fx delta = 2 * delta; f3 = subs(f, findsym(f), x + delta); end x= x + delta; k = k + 1; fx = subs(f, findsym(f), x); gx = subs(g, findsym(g), x); hx = subs(h, findsym(h), x); end continue; end beta = hx; if beta<=0 beta = 1; alpha = 1; end f1 = subs(f, findsym(f), x-alpha*gx/beta); f2 = subs(f, findsym(f), x)-alpha*gx^2/(4*beta); while f1>=f2 alpha = alpha/2; f1 = subs(f, findsym(f), x-alpha*gx/beta); f2 = subs(f, findsym(f), x-alpha*gx^2/(4*beta)); end x = x - alpha*gx/beta; k = k+1; fx = subs(f, findsym(f), x); gx = subs(g, findsym(g), x); hx = subs(h, findsym(h), x); end x = vpa(x, 6) miny = vpa(fx, 6)