机械优化设计C语言程序

上传人:ni****g 文档编号:508393112 上传时间:2022-12-07 格式:DOC 页数:16 大小:45.50KB
返回 下载 相关 举报
机械优化设计C语言程序_第1页
第1页 / 共16页
机械优化设计C语言程序_第2页
第2页 / 共16页
机械优化设计C语言程序_第3页
第3页 / 共16页
机械优化设计C语言程序_第4页
第4页 / 共16页
机械优化设计C语言程序_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《机械优化设计C语言程序》由会员分享,可在线阅读,更多相关《机械优化设计C语言程序(16页珍藏版)》请在金锄头文库上搜索。

1、目 录一、 黄金分割法二、 二次插值法三、 最速下降法(阶梯法)四、 变尺度法五、 鲍威尔法一、黄金分割法#include#include#define r 0.618#define f(x) x*x+2*xgolden(float,float,float);main() float a,b,e; printf(n请输入区间和收敛精度:a,b,en); scanf(%f,%f,%f,&a,&b,&e); 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

2、+r*(b-a); y1=f(a1); y2=f(a2); printf(黄金分割法的搜索过程:); do printf(n %d a=%f,b=%f,a1=%f,a2=%f,y1=%f,y2=%f,n,a,b,a1,a2,y1,y2); 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); n+; while(fabs(b-a)/b)=e|fabs(y2-y1)/y2)=e);A=(a+b)/2;Y=f(A); printf(n %d a=%

3、f,b=%f,a1=%f,a2=%f,n,a,b,a1,a2); printf(n结果:n极值点及其函数值:A=%f,Y=%fn, A,Y);二、二次插值法#includestdio.h#includemath.h#includeconio.hvoid main() float*area(float a1,float p,float a3); float f(float x); float ar,fr; float a1=10,p=0.01,e=0.000001; float pa3; area(a1,p,pa); a1=pa0; float a2=pa1; float a3=pa2; flo

4、at 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(ara2) if(frf2) a3=ar; f3=fr; else if(frf2) 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(arf2)

5、 a1=ar; f1=fr; else if(frf2) a3=a2; f3=f2; a2=ar; f2=fr; else 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=f1) if(fabs(f2-f1)acc) p=p/2; else p=-p; else break; while(1) a3=a2+p; f3=f(a3); if(f2a3) temp=a1; a1=a3; a3=temp; a0=a1;a1=a2;a2=a3;return a; fl

6、oat 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,

7、x1=0, x2=1, a, b, y, m; a=fun1(x1,x2); b=fun2(x1,x2); m=sqrt(a*a+b*b); while(me) 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(The min is %f,y); 四、DFP变尺度法#include#include#include#include#define tt 0.01#define ff 1.0e-6#define a

8、c 1.0e-6#define ad 1.0e-6#define n 2double ia;double fny(double *x) double x1=x0,x2=x1;double f;f=x1*x1+2*x2*x2-4*x1-2*x1*x2;return f;double * iterate(double *x,double a,double *s)double *x1;int i;x1=(double *)malloc(n*sizeof(double);for(i=0;in;i+) x1i=xi+a*si;return x1;double func(double *x,double

9、a,double *s)double *x1;double f;x1=iterate(x,a,s);f=fny(x1);return f;void finding(double a3,double f3,double *xk,double *s)double t=tt;int i;double a1,f1;a0=0;f0=func(xk,a0,s);for(i=0;i+) a1=a0+t; f1=func(xk,a1,s); if(f1=ad) t=-t; a0=a1;f0=f1; else if(ia=1) return; /break t=t/2;ia=1; for(i=0;i+) a2=

10、a1+t; f2=func(xk,a2,s); if(f2f1) break; t=2*t; a0=a1;f0=f1; a1=a2;f1=f2;if(a0a2) a1=a0; f1=f0; a0=a2; f0=f2; a2=a1; f2=f1;return;double lagrange(double *xk,double *ft,double *s) int i;double a3,f3;double b,c,d,aa;finding(a,f,xk,s);for(i=0;i+) if(ia=1) aa=a1; *ft=f1; break; d=(pow(a0,2)-pow(a2,2)*(a0-a1)-(pow(a0,2)-pow(a1,2)*(a0-a2); if(fabs(d)=0) break; c=(f0-f

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号