实验1 一维搜索算法的程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一 一维搜索算法的程序设计

一、实验目的

1、熟悉一维无约束优化问题的二分法、0.618算法和牛顿法。

2、培养matlab 编程与上机调试能力。

二、实验课时:2个课时

三、实验准备

1、预习一维无约束优化问题的二分法、0.618算法和牛顿法的计算步骤。

2、熟悉matlab 软件的基本操作。

四、实验内容

课堂实验演示

1、根据二分法算法编写程序,求函数

2()22f x x x =++

在区间[2,1]-上的极小值。

二分法如下:

(1)给定区间[,]a b (要求满足0)(',0)('>δ;

(2)若δ≤-a b ,则停,输出*()/2x a b =+;

(3)计算()/2c a b =+;

(4)若0)('c f ,令b c =;否则若0)('=c f ,则停输出*()/2x a b =+;

function [val,x,iter] = bisection_method(a,b,delta)

iter = 0;

while abs(b-a)>delta

iter = iter+1;

[y,dy] = fun((a+b)/2);

if abs(dy)<= delta

x = (a+b)/2;

val = y;

return;

elseif dy<0

a = (a+b)/2;

else

b = (a+b)/2;

end

end

x = (a+b)/2;

[val,dval] = fun(x);

%%%%%%%%%%%%%%%%%%%%%%% obj function %%%%%%%%%%%%%%%%%%%%%%%%% function [y,dy] = fun(x)

y = x^2+2*x+2;

dy = 2*x+2;

>> delta = 1.0e-6;

[val,x,iter] = bisection_method(-2,1,delta)

val = 1

x = -1

iter = 21

2、根据0.618算法编写程序,求函数

()()()630sin tan 1x f x x x e =-

在区间[0,1]上的极大值。

令()()()()630sin tan 1x g x f x x x e

=-=--,则原问题转化为求[]

()0,1min x g x ∈

0.618算法如下:

(1)给定区间[,]a b ,及精度0eps >;

(2)计算试探点0.382(),0.618()r a b a u a b a =+-=+-. 令1=k ;

(3)若eps a b <-,则停止计算,输出)(,2/)(***x f f a b x =+=;否则,

若()()f r f u >,转(4);若)()(u f r f <,转(5);

(4)令a r =,r u =,计算0.618()u a b a =+-,转(6);

(5)令b u =,u r =,计算0.382()r a b a =+-,转(6);

(6)令1+=k k ,回 (3).

运行结果,如下:

>> a=0,b=1,eps=10^(-5);

[optx,opty,iter]=gold_section_method(a,b,eps) iter =

26

optx =

0.9707

opty =

-4.1086e+010

则[]

()0,1max x f x ∈为 4.1086e+010

其程序如下:

function [optx,opty,iter]=gold_section_method(a,b,eps)

r = a + 0.382*(b-a);

u = a + 0.618*(b-a);

iter = 1;

while (b-a) > eps

if f(r)>= f(u)

a = r;

r = u;

u = a + 0.618*(b-a);

else

b = u;

u = r;

r = a + 0.382*(b-a);

end

iter = iter + 1;

end

optx = ( a + b )/2;

opty = f(optx);

%%%%%%%%%%%%%%%%%%%%%%%obj function %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function y=f(x)

y=-(sin(x))^6*tan(1-x)*exp(30*x);

%%%%%%%%%%%%%%%%%%%%%%%obj function %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

3、牛顿法的计算步骤为:

(1) 给出初始近似根 0x 及精度ε,令0=k

; (2) 计算 )

(")('0001x f x f x x -=,1+=k k ; (3) 若ε<-01x x ,则转(4);否则 1x 赋予0x ,转向(2);

(4) 输出满足精度的根1x ,结束.

课堂实验任务

1. 编写函数文件,实现二分法,0.618 法,并求解下列问题

1) 求函数2

341243)(x x x x f --=在[]0,1内的极大值 2) 求函数()t t

t e e ψ-=+在[]1,1-内的极小值