机械优化设计坐标轮换发c语言.doc

上传人:工**** 文档编号:542222418 上传时间:2023-08-27 格式:DOC 页数:5 大小:38.51KB
返回 下载 相关 举报
机械优化设计坐标轮换发c语言.doc_第1页
第1页 / 共5页
机械优化设计坐标轮换发c语言.doc_第2页
第2页 / 共5页
机械优化设计坐标轮换发c语言.doc_第3页
第3页 / 共5页
机械优化设计坐标轮换发c语言.doc_第4页
第4页 / 共5页
机械优化设计坐标轮换发c语言.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《机械优化设计坐标轮换发c语言.doc》由会员分享,可在线阅读,更多相关《机械优化设计坐标轮换发c语言.doc(5页珍藏版)》请在金锄头文库上搜索。

1、#include #include #define m 10 /*数组长度m = 维数n */ float f(float x); void mjtf(int n,float x0,float h,float s,float a,float b); void mhjfgf(int n,float a,float b,float flag,float x); void zblhf(int n,float x0,float h,float flag1,float flag2,float a,float b,floatx); /*目标函数(n维)*/ /*入口参数: x :n维数组,自变量 */ /

2、*返回值 :函数值 */ float f(float x) float result; result=60-10*(x0)-4*(x1)+(x0*x0)+(x1*x1)-(x0*x1); return result; /*多维进退法子程序*/ /*入口参数: n :优化模型维数 x0 :n维数组,初始点坐标 h :初始搜索步长 s :n维数组,搜索方向 */ /*出口参数: a :n维数组,搜索区间下限 b :n维数组,搜索区间上限*/ void mjtf(int n,float x0,float h,float s,float a,float b) int i; float x1m,x2m,

3、x3m,f1,f2,f3; for(i=0;i=f1) /*判断搜索方向*/ /*搜索方向为反向,转身*/ h=(-1)*h; for(i=0;in;i+) x3i=x1i; f3=f1; for(i=0;in;i+) x1i=x2i; f1=f2; for(i=0;in;i+) x2i=x3i; f2=f3; /*搜索方向为正向*/ for(i=0;in;i+) /*计算第三试点*/ x3i=x2i+h*si; f3=f(x3); while(f3f2) /*判断是否未完成搜索*/ /*未完成,继续搜索*/ h=2*h; for(i=0;in;i+) x1i=x2i; f1=f2; for(

4、i=0;in;i+) x2i=x3i; f2=f3; for(i=0;in;i+) x3i=x2i+h*si; f3=f(x3); /*已完成*/ for(i=0;i0) /if(x1ix3i) ai=x1i; bi=x3i; else ai=x3i; bi=x1i; /*多维黄金分割法子程序*/ void mhjfgf(int n,float a,float b,float flag,float x) int i; float x1m,x2m,f1,f2,sum; for(i=0;in;i+) /*计算初始两试点*/ x1i=bi-(float)0.618*(bi-ai); f1=f(x1)

5、; for(i=0;in;i+) x2i=ai+(float)0.618*(bi-ai); f2=f(x2); do if(f1=f2) /*判断消去区间*/ /*消去右*/ for(i=0;in;i+) bi=x2i; for(i=0;in;i+) x2i=x1i; f2=f1; for(i=0;in;i+) x1i=bi-(float)0.618*(bi-ai); f1=f(x1); else /*消去左*/ for(i=0;in;i+) ai=x1i; for(i=0;in;i+) x1i=x2i; f1=f2; for(i=0;in;i+) x2i=ai+(float)0.618*(b

6、i-ai); f2=f(x2); sum=0; for(i=0;iflag); /*判断是否未达到精度要求,若未达到则返回继续缩小区间*/ for(i=0;in;i+) xi=(float)0.5*(bi+ai); /*已达到,输出极小点*/ /*坐标轮换法子程序*/ /*入口参数: n :优化模型维数 x0 :n维数组,初始点坐标 h :初始搜索步长 flag1 :黄金分割法迭代精度 flag2 :鲍威尔法迭代精度 a :n维数组,搜索区间下限 b :n维数组,搜索区间上限*/ /*出口参数: x :n维数组,极小点坐标 */ void zblhf(int n,float x0,float

7、h,float flag1,float flag2,float a,float b,float x) int i,k; float x1m,smm,sum; for(i=0;in;i+) /*方向矩阵初始化*/ for(k=0;kn;k+) if(i=k) sik=1; else sik=0; k=1; do for(i=0;in;i+) x1i=x0i; for(i=0;in;i+) /*依次按每个方向搜索*/ mjtf(n,x1, h,si,a,b); mhjfgf(n, a, b, flag1, x1); sum=0; /*计算一轮中终点与始点的距离*/ for(i=0;in;i+) s

8、um= sum+(x1i-x0i)*(x1i-x0i); if(sqrt(sum)=flag2) /*判断是否满足精度要求*/ break; else k=k+1; /* 进行下一轮搜索 */ for(i=0;in;i+) /* 把末点传给下一轮的起点 */ x0i=x1i; while(1); for(i=0;in;i+) /*输出极小点坐标*/ xi=x1i; /*坐标轮换法主程序*/ void main() int i,n; float h,flag1,flag2,x0m,am,bm,xm; printf(nn); printf(请输入维数:n); scanf(%d,&n); printf(请输入初始点:); for(i=0;in;i+) printf(nx0%d=,i); scanf(%f,&x0i); printf(n请输入初始步长:n); scanf(%f,&h); printf(n请输入黄金分割法迭代精度:n); scanf(%f,&flag1); printf(n请输入坐标轮换法迭代精度:n); scanf(%f,&flag2); zblhf(n,x0,h,flag1,flag2,a,b,x); printf(n极小点坐标为:n); for(i=0;in;i+) printf(x%d=%fn,i,xi); printf(n极小值为:n%fn,f(x);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

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