中国矿业大学(北京)实验报告 课程名称: 最优化计算方法 指导教师: 付云姗 班级: 信软2013 姓名: 孙裕道 学号: 1311710119 实验项目名称:
一维优化方法练习
实验目的及要求:
1. 编写程序实现进退法,利用进退法求解极值区间实例; 2. 编写程序实现0.618法,利用0.618法求解极值实例; 3. 编写程序实现牛顿法,来求解一维函数的局部极小值点。
实验原理:
在Matlab环境下,按照要求编写函数和程序,求解实例,直至取得正确的运行结果。 算法1:进退法
S1 给出x0R,h0>0, 令h:=h0,1,x1:x0,k:=0;
S2 令x4=x1+h, 置k:=k+1;
S3 若f(x4)S4 令x2=x1,x1=x4,f(x2)=f(x1),f(x1)=f(x4),令 h=2h,转S2; S5 若k=1,则转S6,否则转S7;S6 令h=-h,x2=x4,f(x2)=f(x4),转S2;
S7 令x3=x2,x2=x1,x1=x4,停止计算极小值点包含于[x1,x3]或[x3,x1].
算法2:0.618法
S1 选定区间[a1,b1]及精度0,计算试探点
a10.382*(b1a1) a10.618*(b1a1) 令 k=1;
S2 若b1a1,则停止计算。
否则,当f()f()时转S3;当f()f()时转S4; S3 令a1:,:,:a10.618*(b1a1), 转 S5; S4令b1:,:,:a10.382*(b1a1), 转 S5; S5 令k:=k+1,转S2.
第 1 页,共 7 页
中国矿业大学(北京)实验报告 算法3:牛顿法
S1 给出x0R精度0,令k:=0; S2 若
f(xk)xk1xk, 停止,极小值点为xk;
f(xk)f(xk);
S3 令
S4 令k:=k+1, 转S2.
实验内容(方法和步骤):
题目1 编写程序实现进退法。
利用Matlab编写函数 [xmin,xmax]=Brackeing(f,x0,h0).区间[xmin,xmax]包含函数f的一个局部极值点。
Brackeing.m文件
function [xmin,xmax] = Brackeing(f, x0, h0) h = h0; x1 = x0; k = 0; while 1 k = k + 1; x4 = x1 + h; if f(x4)x2 = x1; x1 = x4; h = 2*h; continue; elseif k==1h = -h; x2 = x4;
第 2 页,共 7 页
中国矿业大学(北京)实验报告 continue; else
x3 = x2; x2 = x1; x1 = x4; break; end end if x1xmin =x3; xmax = x1; end题目2
利用进退法求解极值区间实例。取初始点x0=0,步长h0=0.1,用进退法求函数
f(t)(t21)2(t1)23的极值区间。
f.m文件 function y =f(t)
y = (t^2 - 1)^2 + (t - 1)^2 +2; end
shiyan1_2.m文件 clear
第 3 页,共 7 页
中国矿业大学(北京)实验报告 x0 = 0; h0 = 0.1; f1 = @f;
[xmin, xmax] = Brackeing(f1, x0, h0)
题目3 编写程序实现0.618法。
利用Matlab编写函数 [x,miny]=MinHJ(f,a,b,eps).调用函数得到的x为函数f在区间[a,b]上的局部极小值点。
MinHJ.m文件
function [x, miny] = MinHJ(f, a, b, eps) h = b-a;
a0 = a + 0.382 * h; b0 = a + 0.618 * h; while ha0 = a + 0.382 * h; elsea = a0; h = b-a; a0 = b0;
b0 = a + 0.618 * h; end
第 4 页,共 7 页
中国矿业大学(北京)实验报告 end x = a0; miny = h;
题目4 利用0.618法求解极值实例。
222f(t)(t1)(t1)3,t[10,10]. 利用0.618法求下面函数的极小值;
Shiyan1_4.m文件 clear
a = -10; b = 10; eps = 0.1; f1 = @f;
[x, miny] = MinHJ(f1, a, b, eps)
题目5 编写程序实现牛顿法。
利用Matlab编写函数 [x,minf]=Newton(f,x0,eps).其中f为目标函数,x0为初始点,eps为算法终止的精度。用牛顿法求解无约束优化问题minf(x)。
function [x, minf] = Newton(f, x0, eps) k = 0; x= x0; g = diff(f); h = diff(g);
gx = subs(g, findsym(g), x); while abs(gx)>eps
hx = subs(h, findsym(h), x); x = x - gx/hx; k = k + 1;
第 5 页,共 7 页
中国矿业大学(北京)实验报告 gx = subs(g, findsym(g), x); end
x = vpa(x, 12);
minf = subs(f, findsym(f), x); minf = vpa(minf, 12); end
题目6
2f(t)tlnt5的任一极小值点。 取初始点x0=2,用牛顿法求函数
shiyan1_62.m文件
clear syms t;
f = t^2 - log(t) - 5; x0 = 2;eps = 1.0e-6;
[x, minf] = Newton(f, x0, eps)
实验结果与分析:
shiyan1_2.m运行结果:
Shiyan1_4.m运行结果:
第 6 页,共 7 页
中国矿业大学(北京)实验报告
shiyan1_62.m运行结果:
由于题目要求写函数[x,minf]=Newton(f,x0,eps).其中f为目标函数,Newton函数内部后续还要对f求微分,有点麻烦。经查阅,自变量为符号的函数可以作为参数传递给其他函数,并且不影响微分运算,但是如果用到f的函数值,必须再搭配subs函数,将f在某点的值计算出来复制给一个表示数字的变量。
成绩:
批阅教师签名: 年 月 日
第 7 页,共 7 页