优化程序-黄金分割法C语言程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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); } }