机械优化
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
黄金分割法
已知:F(x)=x4-4x3-6x2-16x+4,求极小值,极小值点,区间,迭代次数, 用进退法确定区间,用黄金分割法求极值。
#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(f3x3) {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);
printf("\n The min is %f and the result is %f.",x,min);
printf("\n The nunmber 2 is %d.",n2)
二插法
已知:F(x1,x2)=4*x1-x2的平方-12;求极小值,极小值点,迭代次数,
用复合形法求极值。
约束条件:x2>=0;
x1>=0;
25-x1的平方-x2的平方>=0; #include
#include
#define EP 0.0001
#define E 0.01
#define fori for(i=0;i<=1;i++) int i;
float f(float *p)
{
float y;
y=4*p[0]-pow(p[1],2)-12;
return(y);
}
int cons(float *q)
{
int n;
if((pow(q[0],2)+pow(q[1],2)-25<=0)&&(q[0]>=0)&&(q[1]>=0))
n=1;
else
n=0;
return(n);
}
void paixu(float *p1,float *p2,float *p3) {
float f1,f2,f3;
float L[2],M[2],H[2];
f1=f(p1);
f2=f(p2);
f3=f(p3);
fori { H[i]=p1[i];M[i]=p2[i];L[i]=p3[i];} if(f1>f2)
{
if(f2f3)
fori { M[i]=p3[i];L[i]=p2[i];}
else
fori { H[i]=p3[i];M[i]=p1[i];L[i]=p2[i];}
}
else
if(f2f3)
fori { H[i]=p2[i];M[i]=p1[i];L[i]=p3[i];}
else
fori { H[i]=p2[i];M[i]=p3[i];L[i]=p1[i];}
fori { p1[i]=H[i];p2[i]=M[i];p3[i]=L[i];} }
float r()
{
float rr;
do
rr=rand();
while(rr<=0);
rr=rr/32767;
return(rr);
}
main()
{
float x1[2]={2,1},x2[2]={4,1},x3[2]={3,3}; float XC[2],XR[2],A[2],B[2];
float H=1.3,FH,FR,FC,FL,cha,min,S; int tf,tf1,tf2;
do
{
do
{
paixu(x1,x2,x3);
/*
fori printf("\n X1%d is %f,X2%d is %f,X3%d is %f.",i,x1[i],i,x2[i],i,x3[i]);
*/
fori XC[i]=(x2[i]+x3[i])/2;
/*
fori printf("\n XC%d is %f.",i,XC[i]);
*/
tf1=cons(XC);
if(tf1==0)
{
FC=f(XC);
FL=f(x3);
if(FLE);
min=f(x3);
printf("\n The Min is %f.",min); fori printf("\n The X%d is %f.",i,x3[i]);