下载此文档

无约束最优化方法可变单纯形算法(simplex)Nelder-Mead.doc


文档分类:通信/电子 | 页数:约16页 举报非法文档有奖
1/16
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/16 下载此文档
文档列表 文档介绍
无约束最优化方法可变单纯形法(simplex)Nelder-Mead可爱的馒头本程序是用C++编写的,从编写的算例来看,应该是没有问题的。所采用的原理和步骤是参考华南理工大学出版社蒋金山等编写的最优化计算方法第8章第三节可变单纯形法。欢迎各位批评指正。#include<>#include<>#include<>inti,j;doubled[3][100]={{0,1,0,0},{0,0,1,0},{0,0,0,1}},f[100];//d[][]为单纯形的顶点,本算例中未知数个数为3,则顶点个数为4doubleg,h,l,q,s=1,t=2,u=,v=,y=0;//s为反射系数,t为扩展系数,u为压缩系数,v为允许误差into,F,r,D,e,lj=0,N=4;//N为顶点的个数,o为最大值点的位置,F为最小值点的位置,r为次大值点的位置voidfunction1(inte)//求解函数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,求其最小值}voidfunction2(){while((++lj)<100)//最大迭代次数{for(i=0,g=f[i];i<N-1;i++)//求最大值点{if(g<f[i+1]){g=f[i+1];o=i+1;}elseif(i==0)o=i;}for(i=0,h=f[i];i<N-1;i++)//求最小值点{if(h>f[i+1]){h=f[i+1];F=i+1;}elseif(i==0)F=i;}for(i=0,l=f[i];i<N-1;i++)//求次大值点{if(i==o&&i==0){l=f[i+1];r=i+1;continue;}if(l<f[i+1]&&(i+1)!=o){l=f[i+1];r=i+1;}elseif(i==0)r=i;}for(i=0;i<N-1;i++)//求除最大值点,其余点的形心{d[i][N]=0;for(j=0;j<N;j++){if(j!=o){d[i][N]=d[i][N]+d[i][j];}}d[i][N]=d[i][N]/(N-1);//平均值}function1(N);for(i=0;i<N-1;i++){d[i][N+1]=d[i][N]+(d[i][N]-d[i][o])*s;//反射}function1(N+1);if(f[N+1]<f[F]){for(i=0;i<N-1;i++){d[i][N+2]=d[i][N]+(d[i][N+1]-d[i][N])*t;//扩展}function1(N+2);if(f[N+2]<f[N+1]){for(i=0;i<N-1;i++){d[i][o]=d[i][N+2];}f[o]=f[N+2];y=0;for(i=0;i<N;i++){y=y+(f[i]-f[N])*(f[i]-f[N]);}y=sqrt(y/(N*));if(y<v){for(i=0;i<N-1;i++){printf("d[%d][%d]=%f",i,F,d[i][F]);printf("\n");}printf("f[%d]=%f",F,f[F]);break;}else{function2();break;}}else{for(i=0;i<N-1;i++){d[i][o]=d[i][N+1];}f[o]=f[N+1];y=0;for(i=0;i<N;i++){y=y+(f[i]-f[N])*(f[i]-f[N]);}y=sqrt(y/(N*));if(y<v){for(i=0;i<N-1;i++){printf("d[%d][%d]=%f",i,F,d[i][F]);printf("\n");printf("f[%d]=%f",F,f[F]);break;}else{function2();break;}}}if(f[N+1]>=f[F]&&f[N+1]<=f[r]){for(i=0;i<N-1;i++){d[i][o]=d[i][N+1];}f[o]=f[N+1];y=0;for(i=0;i<N;i++){y=y+(f[i]-f[N])*(f[i]-f[N]);}y=sqrt(y/(N*));if(y<v){for(i=0;i<N-1;i++){printf("d[%d][%d]=%f",i,F,d[i][F]);printf("\n");}printf("f[%d]=%f",F,f[F]);break;}else{function2();brea

无约束最优化方法可变单纯形算法(simplex)Nelder-Mead 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数16
  • 收藏数0 收藏
  • 顶次数0
  • 上传人iris028
  • 文件大小28 KB
  • 时间2019-11-21