用黄金分割法求极小点程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用黄金分割法求极小点程序
用黄金分割法求目标函数82430163)(234+-+-=x x x x x f 在[0,3]中的极小点,迭代精度取0.001。
解:在搜索区间[0,3]内取两试点a 1和a 2,计算它们的函数值
a 1=
b −0.618 b −a =3−0.618∗ 3−0 =1.146 f 1=f a 1 =3∗1.1464−16∗1.1463+30∗1.1462−24∗1.146+8=0.9889
a 2=a +0.618
b −a =0.618∗3=1.854
f 2=f a 2 =3∗1.8544−16∗1.8543+30∗1.8542−24∗1.854+8=0.1044 比较函数值f 1和f 2,缩短搜索区间
由于f 2 a 1=a 2,f 1=f 2,a 2=a+0.618(b-a),f 2= f a 2 判断迭代终止条件 (b-a)是否小于0.001 不满足迭代终止条件,就再取两试点a 1和a 2,并且比较函数值f 1和f 2,继续缩短搜索区间。经过17次迭代得出最终结果。 黄金分割法的M 文件如下: f=inline('3*x^4-16*x^3+30*x^2-24*x+8','x'); a=0; b=3; epsilon=0.001; x1=b-0.618*(b-a);f1=f(x1); x2=a+0.618*(b-a);f2=f(x2); while ((b-a)>=epsilon) if f1<=f2 b=x2;x2=x1;f2=f1; x1=b-0.618*(b-a);f1=f(x1); else a=x1;x1=x2;f1=f2; x2=a+0.618*(b-a);f2=f(x2); end end x=0.5*(b+a); f=3*x^4-16*x^3+30*x^2-24*x+8; disp('x='); disp(x); disp('f='); disp(f); 运行结果如下: x= 2.0000 f=2.3027e-10