机械优化设计实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
机械优化设计作业
一、优化设计问题的提出
预制一无盖水槽,现有一块长为4m,宽为3m的长方形铁板作为原材料,想在这块铁板的四个角处剪去相等的正方形以制成无盖水槽,问如何剪法使水槽的底面积最大?
二、建立问题的数学模型
为了建成此无盖水槽,可设在这块铁板的四个角处剪去相等的正方形的边长为X,所建造水槽的底面积为S,分析问题有次问题变成
在约束条件:
X≥0
4-2X≥0
3-2X≥0
限制下,求目标函数:
S(X)=(4-2X)(3-2X)=4-14X+12
的最大值。
由此可得此问题的数学模型为:
Min S(X)=4
约束条件:
( =-X ≤0 ( = -(4-2X )≤0
( =-(3-2X )≤0 算法为黄金分割法。
四、外推法确定最优解的搜索区间
用外推法确定函数S (X )=4 索区间。
设初始点 , =S( )=12; = +h=0+1=1, =S( )=2;
比较 和 ,因为 < h=2h=2x1=2, = +h=1+2=3, 比较 和 ,因为 > ,面,故搜索区间可定为[a,b]=[1,3]。
五、算法框图
六、算法程序
#include <math.h>
#include <stdio.h>
double obfunc(double x)
{
double ff;
ff=4*X*X-14*X+12;
return(ff);
}
void jts(double x0,double h0,double s[],int n,double a[],double b[]) {
int i;
double x[3],h,f1,f2,f3;
h=h0;
for(i=0;i<n;i++)
x[0]=x0;
f1=obfunc(x[0]);
for(i=0;i<n;i++) x[1]=x[0]+h*s[i];
f2=obfunc(x[1]);
if(f2>=f1)
{
h=-h0;
for(i=0;i<n;i++)
x[2]=x[0];
f3=f1;
for(i=0;i<n;i++)
{
x[0]=x[1];
x[1]=x[2];
}
f1=f2;
f2=f3;
}
for(;;)
{
h=2.0*h;
for(i=0;i<n;i++)
x[2]=x[1]+h*s[i];
f3=obfunc(x[2]);
if(f2<f3)
break;
else
{
for(i=0;i<n;i++)
{
x[0]=x[1];
x[1]=x[2];
}
f1=f2;
f2=f3;
}
}
if(h<0)
for(i=0;i<n;i++)
{
a[i]=x[2];
b[i]=x[0];
}
else
for(i=0;i<n;i++)
{
a[i]=x[0];
b[i]=x[2];
}
printf("%4d",n);
}
double gold(double a[],double b[],double eps,int n,double xx) double f1,f2,ff,q,w;
double x[3];
for(i=0;i<n;i++)
{
x[0]=a[i]+0.618*(b[i]-a[i]);
x[1]=a[i]+0.382*(b[i]-a[i]);
}
f1=obfunc(x[0]); f2=obfunc(x[1]);
do
{
if(f1>f2)
{
for(i=0;i<n;i++)
{b[i]=x[0];
x[0]=x[1];
}
f1=f2;
for(i=0;i<n;i++)
x[1]=a[i]+0.382*(b[i]-a[i]);
f2=obfunc(x[1]);
}
else
{for(i=0;i<n;i++)
{
a[i]=x[1];
x[1]=x[0];
}
f2=f1;
for(i=0;i<n;i++)
x[0]=a[i]+0.618*(b[i]-a[i]);
f1=obfunc(x[0]);
}
q=0;
for(i=0;i<n;i++)
q=q+(b[i]-a[i])*(b[i]-a[i]);
w=sqrt(q);
}while(w>eps);
for(i=0;i<n;i++)
xx=0.5*(a[i]+b[i]);
ff=obfunc(xx);
printf("xx=ff=%5.2f,,,,%5.2f",xx,ff);
return(ff);
}
void main()
{
int n=1;
double a[1],b[1],xx;
double s[]={1},x0=0;
double eps1=0.001,h0=0.1;
jts(x0,h0,s,n,a,b);
gold(a,b,eps1,n,xx);
七、程序运行结果与分析(1)程序运行结果(截屏)
(2)结果分析、
对与函数S(X)=(4-2X)(3-2X)=4-14X+12,令(X)=8X-14=0可解的X=1.75,说明程序运行结果正确。
八、心得与体会
通过对问题的求解让我更好的理解了黄金分割法的思想和外推法求搜索区间的方法,而这些也巩固了我的课堂所学。