《机械优化设计》
实验报告
目录
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