最优化 马昌凤 第二章作业Word格式文档下载.docx
- 文档编号:935493
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:31
- 大小:60.35KB
最优化 马昌凤 第二章作业Word格式文档下载.docx
《最优化 马昌凤 第二章作业Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《最优化 马昌凤 第二章作业Word格式文档下载.docx(31页珍藏版)》请在冰点文库上搜索。
目标函数,a:
搜索区间左侧端点;
b:
搜索区间右侧端点;
%H:
搜索区间允许范围;
F:
搜索区间函数值允许范围;
%输出:
%s:
近似极小值点:
fa:
近似极小点数值;
k:
迭代次数:
%FX:
近似迭代函数值;
E=[h,fh],h为近似区间误差,fh为函数值误差
t=(sqrt(5)-1)/2;
h=b-a;
p=a+(1-t)*h;
q=a+t*h;
fa=feval(f,a);
fb=feval(f,b);
fp=feval(f,p);
fq=feval(f,q);
k=1;
G(k,:
)=[a,p,q,b];
%初始时错误语句:
G(1,:
%初始调试的时候没有注意到后面需要开辟k行空间
FX(k,:
)=[fa,fp,fq,fb];
while(abs(fa-fb)>
F)((b-a)>
H)
if(fp<
fq)
b=q;
fb=fq;
q=p;
fq=fp;
%初始时错误语句:
b=q;
%初始调试的时候对0.618方法没有充分理解所以出现错误
else
a=p;
fa=fp;
p=q;
fp=fq;
a=p;
end
k=k+1;
%初始调试的时候没有注意到前面已经开辟k行空间
FX(k,:
end
if(fp<
s=p;
fs=fp;
else
s=q;
fs=fq;
fh=abs(fb-fa);
%选取试探点最小的数值为近似点,并且计算出以上为搜索区间的的最后误差以及函数值误差
E=[h,fh];
在命令窗口内输入如下命令:
[s,fs,k,G,FX,E]=gold(inline('
s^2-s-1'
),-1,1,0.05,1e-10)
回车之后得到如下数据结果:
极小点
极小点数值
0.500
-1.2500
24
附:
在窗口中输出的结果如下
>
s=
0.5000
fs=
-1.2500
k=
24
G=
-1.0000-0.23610.23611.0000
-0.23610.23610.52791.0000
0.23610.52790.70821.0000
0.23610.41640.52790.7082
0.41640.52790.59670.7082
0.41640.48530.52790.5967
0.41640.45900.48530.5279
0.45900.48530.50160.5279
0.48530.50160.51160.5279
0.48530.49530.50160.5116
0.49530.50160.50540.5116
0.49530.49920.50160.5054
0.49530.49770.49920.5016
0.49770.49920.50010.5016
0.49920.50010.50060.5016
0.49920.49970.50010.5006
0.49970.50010.50030.5006
0.49970.50000.50010.5003
0.49970.49990.50000.5001
0.49990.50000.50000.5001
0.50000.50000.50000.5001
0.50000.50000.50000.5000
FX=
1.0000-0.7082-1.1803-1.0000
-0.7082-1.1803-1.2492-1.0000
-1.1803-1.2492-1.2067-1.0000
-1.1803-1.2430-1.2492-1.2067
-1.2430-1.2492-1.2406-1.2067
-1.2430-1.2498-1.2492-1.2406
-1.2430-1.2483-1.2498-1.2492
-1.2483-1.2498-1.2500-1.2492
-1.2498-1.2500-1.2499-1.2492
-1.2498-1.2500-1.2500-1.2499
-1.2500-1.2500-1.2500-1.2499
-1.2500-1.2500-1.2500-1.2500
E=
1.0e-04
*0.31210.0000
2、用0.618法求解
的近似最优解,初始搜索区间为
0.8115
8
0.1003
0.0040
由第一题目可以发现当增加函数值限制时,最小近似值的误差会减小,所以在设计程序的时候添加函数值误差范围,并取范围为
具体源程序与上一题相同,在此处不做详细列出。
s^3-2*s+1'
),0,3,0.15,1e-10)
0.8165
-0.0887
26
0.8165
-0.0887
26
01.14591.85413.0000
00.70821.14591.8541
00.43770.70821.1459
0.43770.70820.87541.1459
0.70820.87540.97871.1459
0.70820.81150.87540.9787
0.70820.77210.81150.8754
0.77210.81150.83590.8754
0.77210.79650.81150.8359
0.79650.81150.82080.8359
0.81150.82080.82660.8359
0.81150.81730.82080.8266
0.81150.81510.81730.8208
0.81510.81730.81860.8208
0.81510.81640.81730.8186
0.81510.81590.81640.8173
0.81590.81640.81680.8173
0.81590.81620.81640.8168
0.81620.81640.81660.8168
0.81640.81640.81650.8166
0.81640.81650.81650.8166
0.81640.81650.81650.8165
0.81650.81650.81650.8165
1.00000.21293.665622.0000
1.0000-0.06120.21293.6656
1.00000.2085-0.06120.2129
0.2085-0.0612-0.08000.2129
-0.0612-0.0800-0.01990.2129
-0.0612-0.0886-0.0800-0.0199
-0.0612-0.0839-0.0886-0.0800
-0.0839-0.0886-0.0877-0.0800
-0.0839-0.0877-0.0886-0.0877
-0.0877-0.0886-0.0886-0.0877
-0.0886-0.0886-0.0884-0.0877
-0.0886-0.0887-0.0886-0.0884
-0.0886-0.0887-0.0887-0.0886
-0.0887-0.0887-0.0887-0.0886
-0.0887-0.0887-0.0887-0.0887
1.0e-04*
0.17880.0000
3、用抛物线法求
的近似极小点,给定初始点
,初始步长
运用书上的算法框架,进行自我编写程序,并输出近似极小点值与近似极小点函数值,程序调制修改后如下:
function[s,fs,k,G,E]=paowu1(f,s0,h0,H,F)
目标函数;
s0:
初始迭代点;
h0:
初始选择步长;
搜索区间容许误差值;
函数值容许误差值;
近似极小数值点;
fs:
近似极小点函数值;
迭代次数;
%G:
k行4列矩阵;
E[hb,fc,m]分别为最终步长、搜索函数值误差、搜索区间误差
s1=s0+h0;
s2=s0+2*h0;
h=h0;
fs0=feval(f,s0);
fs1=feval(f,s1);
fs2=feval(f,s2);
)=[s0,s1,s2];
if((fs1<
fs0)&
&
(fs1<
fs2)),
fprintf('
itiserror,pleasechangeanotheranableh0'
);
itisOK,pleasegoon'
%调试错误分析:
调试时候将书中的数据进行带入,改变函数输入步长,发现不同步长的
%结果不一样,并且误差较大。
后来发现在一开始的时候,步长较短不能保证
%三个插值函数点中间低两边高,所以在进行测验时,特此编写此判断控制语句。
%如果正确,则可运用此结果;
反之,则改变原来输入数值。
if(abs(s2-s0)<
H),
sb=s1;
fsb=fs1;
hb=h0;
k=1;
在进行第二次调试的时候,发现没有考虑当初始的时候,搜索区间初始值
%小于给定搜索区间数值,即:
2倍的步长小于给定区间允许误差,所以在此
%处特此加入判断语句,进行改正。
while(abs(fs0-fs2)>
F)|(abs(s0-s2)>
sb=s0+(((3*fs0-4*fs1+fs2)*h)/(2*(fs0-2*fs1+fs2)));
hb=((4*fs1-3*fs0-fs2)*h)/(2*(2*fs1-fs0-fs2));
fsb=feval(f,sb);
在初始的时候,sb,hb(分别代表下一步搜索点和搜索步长)的公式记错,
%出现结果计算不出现象,特此在调试的时候进行改正。
if(fs1<
=fsb)
if(s1<
sb),
s2=sb;
fs2=fsb;
s0=sb;
fs0=fsb;
if(s1>
s2=s1;
s1=sb;
fs2=fs1;
fs1=fsb;
s0=s1;
fs0=fs1;
k=k+1;
s=s1;
fs=fs1;
fc=fs2-fs0;
c=abs(s2-s0);
E=[hb,c,fc];
在初始调试的时候,令其输出的是sb,fsb但结果算出的不正确。
我对算法
%没能够完全理解,其实再算出的中间的时候,数值已经赋值给s1,所以应该
%输出s1值,并且增加了输出最后一步步长的数值功能。
在此处我选取,抛物线方法搜索区间允许误差为0.005,函数值允许误差为0.001,并在窗口内输入如下语句:
>
[s,fs,k,G,E]=paowu1(inline('
s^2-6*s+2'
),1,0.1,0.005,0.01)
3.0000
-7.0000
3
0.0027
0.0097
[s,fs,k,G,E]=paowu1(inline('
itisOK,pleasegoon
3.0000
-7.0000
3
1.00001.10001.2000
1.10003.00001.2000
1.20273.00001.2000
0.10270.00270.0097
4、用抛物线法求
,初始插值点
,终止条件为
首先对函数作出图像,观察其最小值点在给定区间的大致位置,如下所示,在命令窗口中输入命令:
f='
;
fplot(f,[02])
holdon;
title(f)
从函数图像可以看出,最小值点大致在0.8左右,所以根据给出的初始点为1,所以步长取负数假设为-0.15,由于区间为[0,3],所以在程序中加入,判断控制语句,当插入的点有小于0时,程序停止。
在上一题的基础上编写的修正程序为:
if((fs1>
fs0)||(fs1>
while(abs(fs0-fs2)>
F)||(abs(s0-s2)>
if(((s0)<
0)&
(s1)<
0&
((s2)<
0)),
break
continue
在窗口中输入命令语句:
),1,-0.15,0.01,0.01)
得到的结果为:
最小值近似点为0.8127,函数值为:
-0.0886,迭代6次,允许误差均在控制范围之内。
命令窗口语句如下
0.8127
-0.0886
6
1.00000.85000.7000
1.00000.81270.8500
0.77950.81270.8500
0.62310.81270.8500
0.40290.81270.8500
0.17910.81270.8500
-0.22500.00010.0000
5、分别用书中所给的0.618法和抛物线法matlab程序计算下列问题的近似最优解:
(1)
由函数图像可知极小近似点大约在0.5左右,所以应用第一题程序,选取区间为[-1,1],计算出结果如下:
0,3517;
近似点函数值:
0.8272;
23;
误差为1.0e-04*0.5050。
其中在命令窗口输入指令如下:
exp(-s)+s^2'
),-1,1,0.15,1e-10)
0.3517
0.8272
23
-0.23610.05570.23610.5279
0.05570.23610.34750.5279
0.23610.34750.41640.5279
0.23610.30500.34750.4164
0.30500.34750.37380.4164
0.30500.33130.34750.3738
0.33130.34750.35760.3738
0.34750.35140.35370.3576
0.34750.34990.35140.3537
0.34990.35140.35230.3537
0.34990.35080.35140.3523
0.35080.35140.35170.3523
0.35140.35170.35190.3523
0.35140.35160.35170.3519
0.35160.35170.35180.3519
0.35160.35170.35170.3518
0.35170.35170.35170.3518
0.35170.35170.35180.3518
3.71831.32200.84551.3679
1.32200.84550.86851.3679
1.32200.9489
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最优化 马昌凤 第二章作业 优化 第二 作业