c语言编程用进退法求搜索区间代码,机械优化设计实验报告.doc

《机械优化设计》

实验报告

目录

TOC \o "1-3" \h \z \u 1.进退法确定初始区间 3

1.1 进退法基本思路 3

1.2 进退法程序框图 3

1.3 题目 4

1.4 源程序代码及运行结果 4

2.黄金分割法 5

2.2黄金分割法流程图 5

2.3 题目 5

2.4 源程序代码及结果 5

3.牛顿型法 6

3.1牛顿型法基本思路 6

3.2 阻尼牛顿法的流程图 6

3.3 题目 7

3.4 源程序代码及结果 7

4.鲍威尔法 8

4.1 鲍威尔法基本思路 8

4.2 鲍威尔法流程图 8

4.3 题目 9

4.4 源程序代码及结果 9

5. 复合形法 16

5.1 复合行法基本思想 16

5.3 源程序代码及结果 16

6. 外点惩罚函数法 24

6.1解题思路: 24

6.2 流程框图 24

6.3 题目 24

6.4 源程序代码及结果 24

7.机械设计实际问题分析 30

7.2计算过程如下 30

7.3 源程序编写 32

8.报告总结 33

1.进退法确定初始区间

1.1 进退法基本思路:按照一定的规则试算若干个点,比较其函数值的大小,直至找到函数值按“高-低-高”变化的单峰区间。

1.2 进退法程序框图

1.3 题目:用进退法求解函数的搜索区间

1.4 源程序代码及运行结果

#include

#include

main()

{

float h,h0,y1,y2,y3,a1=0,a2,a3,fa2,fa3;

scanf("h0=%f,y1=%f",&h0,&y1);

h=h0;a2=h;y2=a2*a2-7*a2+10;

if (y2>y1)

{

h=-h;a3=a1;y3=y1;

loop:a1=a2;y1=y2;a2=a3;y2=y3;

}

a3=a2+2*h;y3=a3*a3-7*a3+10;

if (y3

{

goto loop;

}

else

printf("a1=%f,a2=%f,a3=%f,y1=%f,y2=%f,y3=%f\n",a1,a2,a3,y1,y2,y3);

}

搜索区间为0 6

2.黄金分割法

2.1黄金分割法基本思路:通过不断的缩短单峰区间的长度来搜索极小点的一种有效方法。按() 缩小 比较大小 确定取舍区间。

2.2黄金分割法流程图

2.3 题目:对函数,给定搜索区间时,试用黄金分割法求极小点

2.4 源程序代码及结果:

f=inline('x^2-7*x+9')

a=0;b=8;eps=0.001;

a1=b-0.618*(b-a);y1=f(a1);

a2=a+0.618*(b-a);y2=f(a2);

while(abs(b-a)>eps)

if(y1>=y2)

a=a1;

a1=a2;

y1=y2;

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

y2=f(a2);

else

b=a2;a2=a1;y2=y1;

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

y1=f(a1);

end

end

xxx=0.5*(a+b)

f =

Inline function:

f(x) = x^2-7*x+9

xxx =

3.4997

3.牛顿型法

3.1牛顿型法基本思路:在邻域内用一个二次函数 来近似代替原目标函数,并将 的极小点作为对目标函数求优的下一个迭代点。经多次迭代,使之逼近目标函数的极小点。

3.2 阻尼牛顿法的流程图:

3.3 题目:用牛顿阻尼法求函数的极小点

3.4 源程序代码及结果:

k=0;

ptol=1.0e-5;

xk=input('input x0:')

itcl=[1;1];

while norm(itcl)>=ptol

f1=[4*xk(1,1)^3-24*xk(1,1)^2+50*xk(1,1)-4*xk(2,1)-32;-4*xk(1,1)+8*xk(2,1)];

G=[12*xk(1,1)^2-48*xk(1,1)+50,-4;-4,8];

dk=-inv(G)*f1; a=-(dk'*f1)/(dk'*G*dk);

xk=xk+a*dk;

itcl=a*dk;

k=k+1;

end

f=(x

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值