一维优化黄金分割法c语言程序,机械优化设计黄金分割法.doc

机械优化设计黄金分割法

课程设计(实验)材料(2)

机械优化设计

课程设计(实验)报告

专 业 班 级:

设 计 题 目: 黄金分割法程序设计

学 生 姓 名:

学 生 学 号:

任 课 教 师:

2013年 月 日

一、设计要求:

基于一维搜索的试探方法思想,运用黄金分割法编写C语言程序,得到极小点的数值近似解。

已知条件:

1、目标函数:f(x)=x*x+2*x

2、给定搜索区间:(-3,5)

方法原理

黄金分割法适用于a,b】区间上的任何单股函数求极小值问题,对函数除要求“单谷”外不 做其他要求,甚至可以 不 连续。因此 ,这种方法的适应面非常广。黄金分割法也是建立在区间消去法原理基础上的试探方法,即在搜索区间a,b】内适当插入两点a1,a2,并计算其函数值。a1,a2将区间分成三段,应用函数的单谷性质,通过函数值 大 小 的 比 较,删去其中 一段,是搜索区间得以缩小。然后再在保留下来的区间上作同样的处理,如此迭代下去,是搜索区间无限缩小,从而得到极小点的数值近似解#include

#include

double hanshu (double x);

void main()

{

int k;

double a,a1,a2,b,y1,y2,c,e,i,j;

e=0.618,k=0;

printf("a=");

scanf("%lf",&a);

printf("b=");

scanf("%lf",&b);

printf("c=");

scanf("%lf",&c);

a1=b-e*(b-a);

y1=hanshu(a1);

a2=a+e*(b-a);

y2=hanshu(a2);

printf("输出次数=%d\n a=%lf, a1=%lf, a2=%lf, b=%lf, y1=%lf, y2=%lf\n",k,a, a1,a2,b,y1,y2);

i=(b-a)/b;

j=(y2-y2)/y2;

while(fabs(i)>=c||fabs(j>=c))

{

k++;

if(y1>=y2)

{

a=a1,a1=a2,y1=y2,a2=a+e*(b-a),y2=hanshu(a2);

}

else{b=a2,a2=a1,y2=y1,a1=b-e*(b-a),y1=hanshu(a1);

}

printf("输出次数=%d\n a=%lf, a1=%lf, a2=%lf, b=%lf, y1=%lf, y2=%lf\n",k,a,a1,a2,b,y1,y2);

i=(b-a)/b;

j=(y2-y1)/y2;

}

printf("k=%lf\n",0.5*(a+b));

}

double hanshu (double x)

{

double m;

m = x*x+2*x;

return m;

}实验结果(要求附上程序运行结果截图)

手算过程

如以下表格:

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值