惩罚函数法C语言相关程序(共3页).doc
精选优质文档-倾情为你奉上惩罚函数法C语言相关程序#include<stdio.h>#include<math.h>float d,y,y0,y1,y2,y3,r=1,c=0.1;float x12, x22, x32,s2,a2,b2;int i,n=2; float f(float x,float r)float z; z=x0*x0+x1*x1-r/(x0-1); return z;waitui()float h0=0.03,h=h0; y1=f(x1,r); for(i=0;i<n;i+) si=si*h; for(i=0;i<n;i+) x2i=x1i+si;y2=f(x2,r); if(y2>y1) for(i=0;i<n;i+) si=-si; for(i=0;i<n;i+) x3i=x1i;y3=y1; for(i=0;i<n;i+) x1i=x2i;y1=y2; for(i=0;i<n;i+) x2i=x3i;y2=y3;for(i=0;i<n;i+) x3i=x2i+si;y3=f(x3,r);while(y3<y2)for(i=0;i<n;i+) si=si*2;for(i=0;i<n;i+) x1i=x2i; y1=y2;for(i=0;i<n;i+) x2i=x3i;for(i=0;i<n;i+) x2i=x3i;for(i=0;i<n;i+) x3i=x2i+si;y3=f(x3,r);for(i=0;i<n;i+)ai=x1i;bi=x3i;huangjin()d=0.618;waitui();c=0.2;for(i=0;i<n;i+) x1i=bi-d*(bi-ai); x2i=ai+d*(bi-ai); y1=f(x1,r);y2=f(x2,r);if(y1>=y2)for(i=0;i<n;i+) ai=x1i;for(i=0;i<n;i+) x1i=x2i;y1=y2;for(i=0;i<n;i+) x2i=ai+d*(bi-ai);y2=f(x2,r);elsefor(i=0;i<n;i+) bi=x2i;for(i=0;i<n;i+) x2i=x1i; y2=y1;for(i=0;i<n;i+) x1i=bi-d*(bi-ai);y1=f(x1,r);while(abs(y2-y1)>=c)if(y1>=y2)for(i=0;i<n;i+) ai=x1i;for(i=0;i<n;i+) x1i=x2i;y1=y2;for(i=0;i<n;i+) x2i=ai+d*(bi-ai);y2=f(x2,r);elsefor(i=0;i<n;i+) bi=x2i;for(i=0;i<n;i+) x2i=x1i; y2=y1;for(i=0;i<n;i+) x1i=bi-d*(bi-ai);y2=f(x2,r);for(i=0;i<n;i+) x1i=0.5*(ai+bi);main( )float x02,e=0.03,f=0.01,sum;x00=3;x01=3;s0=0;s1=1;y0=x00*x00+x01*x01 ;doif(s1<1)s0=1;s1=0;elses0=0;s1=1;for(i=0;i<n;i+)x1i=x0i;huangjin();sum=0;for(i=0;i<n;i+)sum+=(x1i-x0i)*(x1i-x0i);if(sqrt(sum)<e&&abs(y1-y0)/y0<f)break;for(i=0;i<n;i+)x0i=x1i;r=r*c;y0=x00*x00+x01*x01-r/(x00-1)*c);while(1);printf("the best result:n");for( i=0;i<n;i+)printf("x(%d)=%f",i+1,x1i);y=x10*x10+x11*x11-r/(x10-1);printf("ny*=%fn",y);getch();专心-专注-专业