1、鲍威尔法#include #define N 2 float gs(float zN) float f; /f=10*(z0+z1-5)*(z0+z1-5)+(z0-z1)*(z0-z1); f=4+4.5*z0-4*z1+z0*z0+2*z1*z1-2*z0*z1+z0*z0*z0*z0-2*z0*z0*z 1; /f=1.5*z0*z0+0.5*z1*z1-z0*z1-2*z0; return(f); float ywyh(float xN,float t,float sN,float zN) float q=0.618,e,AN,f2,a,b,c=0.1,d=0.1; int i,j=0
2、; a=0;b=t; f0=gs(x); for(i=0;iN;i+) zi=xi+b*si; f1=gs(z); if(f1f0) do t=2*t;b=b+t;f0=f1; for(i=0;if1) a=b-t; else break; while(f0f1); else t=0-t; do a=a+t;f1=f0; for(i=0;if0) b=a-t;t=2*t; else break; while(f1f0) do j=j+1; A0=b-q*(b-a); for(i=0;iN;i+) zi=xi+A0*si; f0=gs(z); A1=a+q*(b-a); for(i=0;if1)
3、 a=A0;A0=A1;f0=f1; A1=a+q*(b-a); for(i=0;i50) break; else b=A1;A1=A0;f1=f0; A0=b-q*(b-a); for(i=0;i50) break; if(f1-f0)/f10) e=(f1-f0)/f1; else e=0-(f1-f0)/f1;while(ec) if(A1-A0)/A00) e=(A1-A0)/A0; else e=0-(A1-A0)/A0; if(e0) e=(A1-A0)/A0; else e=0-(A1-A0)/A0; while(ed) if(f0f1) for(i=0;iN;i+) zi=xi
4、+A0*si; return(f0); else for(i=0;iN;i+) zi=xi+A1*si; return(f1); void main() float xoN,ssNN,zN,c,d,t,fmin,xoooN, xooN,fiN,sN,xN,xeN,fN,fio,dm,dml,df,dx,dxl; int i,j,k,ks,m; for(i=0;iN;i+) printf(请输入初始点 x%d=,i); scanf(%f,&xoi); printf(请输入迭代精度 Ef,Ex=);scanf(%f,%f,&c,&d); printf(请输入步长 T=); scanf(%f,&t)
5、; k=0;ks=0;for(i=0;iN;i+) xoooi=xoi; for(i=0;iN;i+) for(j=0;jN;j+) if(i=j) ssij=1; else ssij=0; do for(i=0;iN;i+) xooi=xoooi; k=k+1; for(i=0;iN;i+) for(j=0;jN;j+) sj=ssij; fmin=ywyh(xooo,t,s,z); for(j=0;jN;j+) xj=zj; fii=fmin; for(j=0;jN;j+) xoooj=xj; for(i=0;iN;i+) si=xi-xooi;xei=2*xi-xooi; f0=gs(x
6、oo);f1=fmin;f2=gs(xe);fio=f0; dm=fio-fi0;m=0; for(i=0;iN-1;i+) dml=fii-fii+1; if(dmdml) dm=dml;m=i+1; else ; if(f0+f2-2*f1)*(f0-f1-dm)*(f0-f1-dm)0.5*dm*(f0-f2)*(f0-f2)&f2f 0) fmin=ywyh(xooo,t,s,z);f1=fmin; for(j=0;jN;j+) xj=zj; for(i=0;iN-1;i+) if(im) for(j=0;jN;j+) ssij=ssij; else for(j=0;jN;j+) ss
7、ij=ssi+1j; for(i=0;if2) for(i=0;iN;i+) xi=xei; f1=f2;fmin=f2; else for(i=0;i0) df=(f0-f1)/f1; else df=0-(f0-f1)/f1; if(xoo0-x00) dx=xoo0-x0; elsedx=x0-xoo0; for(i=1;i0) dxl=xooi-xi; else dxl=xi-xooi; if(dxc|dfd) for(i=0;iN;i+) zi=xi; for(i=0;iN;i+) printf(n 最优点坐标 x%i=%fn,i,zi); printf(n 最优函数值 f(x)=%fn,fmin); printf(n 搜索累计次数 k=%dn,k); printf(n 替换方向累计次数 ks=%dn,ks);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1