实验1 一维搜索算法的程序设计
实验一 一维搜索算法的程序设计
一、实验目的
1、熟悉一维无约束优化问题的二分法、0.618算法和牛顿法。
2、培养matlab 编程与上机调试能力。
二、实验课时:2个课时
三、实验准备
1、预习一维无约束优化问题的二分法、0.618算法和牛顿法的计算步骤。
2、熟悉matlab 软件的基本操作。
四、实验内容
课堂实验演示
1、根据二分法算法编写程序,求函数
f (x ) =x +2x +2 2
在区间[-2,1]上的极小值。
二分法如下:
(1)给定区间[a , b ](要求满足f ' (a ) 0) 以及精度δ>0;
(2)若b -a ≤δ,则停,输出x *=(a +b ) /2;
(3)计算c =(a +b ) /2;
(4)若f ' (c ) 0,令b =c ;否则若f ' (c ) =0,则停输出x *=(a +b ) /2;
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)
x = (a+b)/2;
val = y;
return;
elseif dy
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算法编写程序,求函数
f
在区间[0,1]上的极大值。
令g (x )=-f
0.618算法如下: (x )=(sin x )6tan (1-x )e 30x (x )=-(sin x )6tan (1-x )e 30x ,则原问题转化为求m in g (x ) x ∈[0,1]
(1)给定区间[a , b ],及精度eps >0;
(2)计算试探点r =a +0.382(b -a ), u =a +0.618(b -a ) . 令k =1;
(3)若b -a
若f (r )>f (u ),转(4);若f (r )
(4)令a =r ,r =u ,计算u =a +0.618(b -a ) ,转(6);
(5)令b =u ,u =r ,计算r =a +0.382(b -a ) ,转(6);
(6)令k =k +1,回 (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
则m ax f
x ∈[0,1](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) 给出初始近似根 x 0及精度ε,令k =0;
(2) 计算 x 1=x 0-f ' (x 0) f " (x 0) ,k =k +1;
(3) 若x 1-x 0
(4) 输出满足精度的根x 1,结束.
课堂实验任务
1. 编写函数文件,实现二分法,0.618 法,并求解下列问题
1) 求函数f (x ) =3x -4x -12x 在[0,1]内的极大值 432
2) 求函数ψ(t )=e -t +e 在[-1,1]内的极小值 t
2. 编写函数文件,实现牛顿 法,并求函数f (x ) =x 4-4x 3-6x 2-16x +4的极小值. 分
别取初始点x 0=2. 5和x 0=3.
五、实验主要步骤
1、安装matlab7.0及以上版本软件;
2、编写m 文件以创建和保存各函数;
3、运行程序,保存结果;
4、撰写实验报告。
六、实验报告的撰写要求
1. 写出实验课程名称;
2. 写出姓名、学号、日期;
3. 写出实验目的、实验内容;
4. 写出实验过程及结果(程序代码及数值解),尽量给出其图象;
5. 写出心得体会;
6. 递交实验报告。