无约束最优化方法可变单纯形算法(simplex)NelderMead_无约束最优化方法
无约束最优化方法可变单纯形算法(simplex)NelderMead由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“无约束最优化方法”。
无约束最优化方法可变单纯形法(simplex)Nelder-Mead
可爱的馒头
本程序是用C++编写的,从编写的算例来看,应该是没有问题的。所采用的原理和步骤是参考华南理工大学出版社蒋金山等编写的最优化计算方法第8章第三节可变单纯形法。欢迎各位批评指正。
#include #include #include int i,j;double d[3][100]={{0,1,0,0},{0,0,1,0},{0,0,0,1}},f[100];//d[][]为单纯形的顶点,本算例中未知数个数为3,则顶点个数为4 double g,h,l,q,s=1,t=2,u=0.5,v=0.0001,y=0;//s为反射系数,t为扩展系数,u为压缩系数,v为允许误差 int o,F,r,D,e,lj=0,N=4;//N为顶点的个数,o为最大值点的位置,F为最小值点的位置,r为次大值点的位置 void function1(int e)//求解函数f[e] { f[e]=(d[0][e]-3)*(d[0][e]-3)+2*(d[1][e]+2)*(d[1][e]+2)+(d[2][e]-4)*(d[2][e]-4);//函数为f=(x1-3)^2+2(x2+2)^2+(x3-4)^2,求其最小值 } void function2(){
while((++lj)f[i+1]){ h=f[i+1];F=i+1;} else if(i==0)F=i;} for(i=0,l=f[i];i
printf(“f[%d]=%f”,F,f[F]);break;} else { function2();break;}
} else { for(i=0;i=f[F]&&f[N+1]f[r]){ if(f[N+1]>f[o])//压缩 { D=o;} else { D=N+1;} for(i=0;i
}