机械优化设计进退法c语言程序,机械优化设计坐标轮换发c语言.doc

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

include include define m 10 /*数组长度 m 维数 n */ float ffloat x; void mjtfint n,float x0,float h,float s,float a,float b; void mhjfgfint n,float a,float b,float flag,float x; void zblhfint n,float x0,float h,float flag1,float flag2,float a,float b,floatx; /*目标函数n 维*/ /*入口参数 x n 维数组,自变量 */ /*返回值 函数值 */ float ffloat x float result; result60-10*x0-4*x1x0*x0x1*x1-x0*x1; return result; /*多维进退法子程序*/ /*入口参数 n 优化模型维数 x0 n 维数组,初始点坐标 h 初始搜索步长 s n 维数组,搜索方向 */ /*出口参数 a n 维数组,搜索区间下限 b n 维数组,搜索区间上限*/ void mjtfint n,float x0,float h,float s,float a,float b int i; float x1m,x2m,x3m,f1,f2,f3; fori0;if1 /*判断搜索方向*/ /*搜索方向为反向,转身*/ h-1*h; fori0;in;i x3ix1i; f3f1; fori0;in;i x1ix2i; f1f2; fori0;in;i x2ix3i; f2f3; /*搜索方向为正向*/ fori0;in;i /*计算第三试点*/ x3ix2ih*si; f3fx3; whilef3f2 /*判断是否未完成搜索*/ /*未完成,继续搜索*/ h2*h; fori0;in;i x1ix2i; f1f2; fori0;in;i x2ix3i; f2f3; fori0;in;i x3ix2ih*si; f3fx3; /*已完成*/ fori0;i0 ifx1ix3i aix1i; bix3i; else aix3i; bix1i; /*多维黄金分割法子程序*/ void mhjfgfint n,float a,float b,float flag,float x int i; float x1m,x2m,f1,f2,sum; fori0;in;i /*计算初始两试点*/ x1ibi-float0.618*bi-ai; f1fx1; fori0;in;i x2iaifloat0.618*bi-ai; f2fx2; do iff1f2 /*判断消去区间*/ /*消去右*/ fori0;in;i bix2i; fori0;in;i x2ix1i; f2f1; fori0;in;i x1ibi-float0.618*bi-ai; f1fx1; else /*消去左*/ fori0;in;i aix1i; fori0;in;i x1ix2i; f1f2; fori0;in;i x2iaifloat0.618*bi-ai; f2fx2; sum0; fori0;iflag; /*判断是否未达到精度要求,若未达到则返回继续缩小区间*/ fori0;in;i xifloat0.5*biai; /*已达到,输出极小点*/ /*坐标轮换法子程序*/ /*入口参数 n 优化模型维数 x0 n 维数组,初始点坐标 h 初始搜索步长 flag1 黄金分割法迭代精度 flag2 鲍威尔法迭代精度 a n 维数组,搜索区间下限 b n 维数组,搜索区间上限*/ /*出口参数 x n 维数组,极小点坐标 */ void zblhfint n,float x0,float h,float flag1,float flag2,float a,float b,float x int i,k; float x1m,smm,sum; fori0;in;i /*方向矩阵初始化*/ fork0;kn;k ifik sik1; else sik0; k1; do fori0;in;i x1ix0i; fori0;in;i /*依次按每个方向搜索*/ mjtfn,x1, h,si,a,b; mhjfgfn, a, b, flag1, x1; sum0; /*计算一轮中终点与始点的距离*/ fori0;in;i sum sumx1i-x0i*x1i-x0i; ifsqrtsumflag2 /*判断是否满足精度要求*/ break; else kk1; /* 进行下一轮搜索 */ fori0;in;i /* 把末点传给下一轮的起点 */ x0ix1i; while1; fori0;in;i /*输出极小点坐标*/ xix1i; /*坐标轮换法主程序*/ void main int i,n; float h,flag1,flag2,x0m,am,bm,xm; printf“nn“; printf“请输入维数n“; scanf“d“, printf“请输入初始点“; fori0;in;i printf“nx0d“,i; scanf“f“, printf“n 请输入初始步长n“; scanf“f“, printf“n 请输入黄金分割法迭代精度n“; scanf“f“, printf“n 请输入坐标轮换法迭代精度n“; scanf“f“, zblhfn,x0,h,flag1,flag2,a,b,x; printf“n 极小点坐标为n“; fori0;in;i printf“xdfn“,i,xi; printf“n 极小值为nfn“,fx;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值