用黄金分割法求极小点程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档