第二次最有优化上机讲解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)

相关文档
最新文档