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

更新时间:2023-11-19 10:52:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

董建兴 现代设计方法之优化设计 编程

黄金分割法 c语言程序

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

#include \#include \#include \#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]=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

else a[0]=m;

xx=(a[0]+a[3])/2; printf(\F2=.12f xx=.12f\\n\[3],xx); } }

a[0]=.12f a[3]=.12f\\n

本文来源:https://www.bwwdw.com/article/dxxv.html

Top