优化程序-黄金分割法C语言程序设计

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

黄金分割法c语言程序

题目:用黄金分割法求f(x)=x2-7x+10的最优解。设置初始点为:x0=0,初始步长h=1,取迭代精度e=0.35

程序:

#include "stdio.h"

#include "math.h"

#include "conio.h"

#define e 0.35

#define tt 1

float function(float x)

{

float y;

y=pow(x,2)-7*x+10;

return(y);

}

void searching(float a[3],float f[3])

{float h=tt,a1,f1,ia,i;

a[0]=0;

f[0]=function(a[0]);

for(i=0;;i++)

{a[1]=a[0]+h;

f[1]=function(a[1]);

if(f[1]

if(fabs(f[1]-f[0])>=e)

{h=-h;a[0]=a[1];f[0]=f[1];}

else{ if(ia==1) return;

h=h/2;ia=1;}

}

for(i=0;;i++)

{a[2]=a[1]+h;

f[2]=function(a[2]);

if(f[2]>f[1]) break;

h=2*h;

a[0]=a[1];f[0]=f[1];

a[1]=a[2];f[1]=f[2];

}

if(a[0]>a[2])

{a1=a[0];f1=f[0];

a[0]=a[2];f[0]=f[2];

a[2]=a1;f[2]=f1;

}

return;

}

void main()

{ float function(float x);

float a1[3],f1[3],a[4],f[4];

float F1,F2,m,n,xx;

searching(a1,f1);

a[0]=a1[0];f[0]=f1[0];

a[3]=a1[2];f[3]=f1[2];

while(fabs(a[0]-a[3])>e)

{

m=a[3]-0.618*(a[3]-a[0]);

n=a[0]+0.618*(a[3]-a[0]);

F1=function(m);

F2=function(n);

if(F1

a[3]=n;

else a[0]=m;

xx=(a[0]+a[3])/2;

printf("F1=%16.12f F2=%16.12f a[0]=%16.12f a[3]=%16.12f\n xx=%16.12f\n",F1,F2,a[0],a

[3],xx);

}

}

相关文档
最新文档