机械优化设计进退法c语言程序,机械优化设计-黄金分割法编程

用进退法确定区间,用黄金分割法求极值。

#include

#include

#define e 0.001

#define tt 0.01

float f(double x)

{

float y=pow(x,4)-4*pow(x,3)-6*pow(x,2)-16*x+4;

return(y);

}

finding(float *p1,float*p2)

{

float x1=0,x2,x3,t,f1,f2,f3,h=tt;

int n=0;

x2=x1+h;f1=f(x1);f2=f(x2);

if(f2>f1) {h=-h;t=x2;x2=x1;x1=t;}

do

{ x3=x2+h;h=2*h;f3=f(x3);n=n+1;}

while(f3

if(x1>x3) {t=x1;x1=x3;x3=t;}

*p1=x1;*p2=x3;

return(n);

}

gold(float *p)

{

float a,b,x1,x2,f1,f2;

int n=0;

finding(&a,&b);

do

{x1=a+0.382*(b-a);

x2=a+0.618*(b-a);f1=f(x1);f2=f(x2);n=n+1;

if(f1>f2) a=x1;

else b=x2;}

while((b-a)>e);

*p=(x1+x2)/2;return(n);

}

main()

{

float a,b,x,min;int n1,n2;

n1=finding(&a,&b);

n2=gold(&x);

min=f(x);

printf("\n The area is %f to %f.",a,b); printf("\n The nunmber 1 is %d.",n1);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值