黄金分割法调试程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1 黄金分割法求解的最小值,区间[-10,10],精度:0.001

c程序:

#include"stdio.h"

#include"math.h"

double eq(double x)

{double y;

y =8.0*x * x * x - 2.0 * x * x -7.0 * x + 3.0;

return y;

}

void main()

{

double a1,a2,a3,a4,f2,f3,x;

a1 =-10.0; // 左边界

a4 = 10.0; // 右边界

Lab1:

a3 = a1 + 0.618 * (a4 - a1);

f3 = eq(a3);

Lab2:

a2 = a1 + 0.382 * (a4 - a1);

f2 = eq(a2);

Lab3:

if (fabs(a4-a1) < 0.001)

{ x = (a1 + a4) / 2.0;

printf("x=%g fmin=%e \n",x,eq(x));

}

else

{

if (f2 < f3) {a4=a3; a3 = a2; f3 = f2; goto Lab2;};

if (f2 == f3) {a1=a2; a4=a3; goto Lab1;};

if (f2 > f3) {a1=a2; a2=a3; f2=f3;

a3 = a1 + 0.618*(a4-a1); f3=eq(a3); goto Lab3;};

};

}

运行结果:

2 黄金分割法求解的最小值,区间[-10,10],精度:0.001

Matlab程序:

●建立M文件:func.m

function f=func(x)

f = 8.0*x * x * x - 2.0 * x * x -7.0 * x + 3.0

●命令窗口:

a1 = -10 ; %左边界

a4 = 10 ; %右边界

e = 0.001 ; %精度

r = ( sqrt (5) -1 ) / 2 ; %即0.618

a2 = a1 + (1-r) * (a4 - a1) ;

a3 = a1 + r* (a4 - a1) ;

f2 = func (a2) ;

f3 = func (a3) ;

k = 1 ;

while ( abs (a4 - a1 ) >= e )

if f2 < f3 ;

a4 = a3 ;

a3 = a2 ;

f3 = f2 ;

a2 = a1 + (1-r) * (a4 - a1) ;

else

a1 = a2 ;

a2 = a3 ;

f2 = f3 ;

a3 = a1 + r* (a4-a1) ;

f3 = func (a3) ;

end

k+1 ;

end

x = ( a1 + a4 ) / 2

f = func ( x )

运行结果:

f = -96.8658

f = 80.5746

f =-1.1925e+003

f = -2.8893e+003

f = -4.4795e+003

f = -5.7048e+003

f = -6.5633e+003

f = -7.1345e+003

f = -7.5035e+003

f =-7.7377e+003

f =-7.8849e+003

f = -7.9768e+003

f = -8.0340e+003

f = -8.0694e+003 黄金分割算法框图f = -8.0914e+003

f = -8.1050e+003

f =-8.1134e+003

f = -8.1186e+003

f = -8.1218e+003

f = -8.1238e+003

f =-8.1250e+003

f =-8.1258e+003

f =-8.1262e+003

x = -9.9996

f = -8.1260e+003

相关文档
最新文档