好文档 - 专业文书写作范文服务资料分享网站

机械优化设计C语言程序

天下 分享 时间: 加入收藏 我要投稿 点赞

目 录

一、 黄金分割法 二、 二次插值法

三、 最速下降法(阶梯法) 四、 变尺度法 五、 鲍威尔法

一、黄金分割法

#include #include #define r 0.618

#define f(x) x*x+2*x golden(float,float,float); main() {

float a,b,e;

printf(\请输入区间和收敛精度:a,b,e\\n\ scanf(\ golden(a,b,e); }

golden(float a,float b,float e) {

float y1,y2,a1,a2,A,Y; int n=0;

a1=b-r*(b-a); a2=a+r*(b-a); y1=f(a1); y2=f(a2);

printf(\黄金分割法的搜索过程:\ do { printf(\

a=%f,b=%f,a1=%f,a2=%f,y1=%f,y2=%f\

if(y1>=y2) {

a=a1; a1=a2; y1=y2;

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

else {

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

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

%d

}

n++;

}while(fabs((b-a)/b)>=e||fabs((y2-y1)/y2)>=e); A=(a+b)/2; Y=f(A);

printf(\

printf(\结果:\\n极值点及其函数值:A=%f,Y=%f\\n\}

二、二次插值法

#include\#include\#include\void main() {

float*area(float a1,float p,float a[3]); float f(float x); float ar,fr;

float a1=10,p=0.01,e=0.000001; float pa[3]; area(a1,p,pa); a1=pa[0];

float a2=pa[1]; float a3=pa[2]; float f1=f(a1); float f2=f(a2); float f3=f(a3); do {

ar=((a3*a3-a2*a2)*f1+(a1*a1-a3*a3)*f2+(a2*a2-a1*a1)*f3); ar=ar/2/((a3-a2)*f1+(a1-a3)*f2+(a2-a1)*f3); fr=f(ar); if(ar>a2) { if(fr>f2)

{ a3=ar; f3=fr; } else if(fr

{ a1=a2; f1=f2; a2=ar; f2=fr; } else

{ a3=ar; a1=a2; a2=(a1+a3)/2; f1=f2; f3=fr; f2=f(a2); } }

else if(ar

{ if(fr>f2)

{ a1=ar; f1=fr; } else if(fr

{ a1=ar; a3=a2; a2=(a1+a3)/2; f1=fr; f3=f2; f2=f(a2); } }

if (fabs(a1-a3)<=e) break; } while(1); if(f2

{ ar=a2; fr=f2; }

printf(\ }

float*area(float a1,float p,float a[3]) {

float f(float x);

float a2,f2,a3,f3,temp; float acc=0.00001; float f1=f(a1); float storep=p; while(1)

{ a2=a1+p; f2=f(a2); if(f2>=f1)

{ if(fabs(f2-f1)

p=-p; }

else break; }

while(1)

{ a3=a2+p; f3=f(a3); if(f2<=f3) break; p=2*p;

a1=a2; f1=f2; a2=a3; f2=f3; }

if(a1>a3)

{ temp=a1; a1=a3; a3=temp; } a[0]=a1;a[1]=a2;a[2]=a3; return a; }

float f(float x) {

float y=pow(fabs(x-1),1.5)+pow(fabs(x-1),2.7); return y; }

三、最速下降法

#include #include

float fun1(float x1,float x2) {float a; a=2*x1; return a; }

float fun2(float x1,float x2) {float b; b=50*x2; return b; }

float fun3(float x1,float x2) {float y;

y=x1*x1+25*x2*x2; return y; }

main()

{ float t, e=0.01, x1=0, x2=1, a, b, y, m;

a=fun1(x1,x2); b=fun2(x1,x2); m=sqrt(a*a+b*b); while(m>e) { t=(a*a+b*b)/(2*a*a+50*b*b);

x1=x1-a*t; x2=x2-b*t;

a=fun1(x1,x2); b=fun2(x1,x2); m=sqrt(a*a+b*b); }

y=fun3(x1,x2); printf(\ }

机械优化设计C语言程序

目录一、黄金分割法二、二次插值法三、最速下降法(阶梯法)四、变尺度法五、鲍威尔法一、黄金分割法#include#include#definer0.618#definef(x
推荐度:
点击下载文档文档为doc格式
5rzsg6v66d7yogk1itxy
领取福利

微信扫码领取福利

微信扫码分享