}
double gold(double a[],double b[],double eps,int n,double xx[]) {
int i;
double f1,f2,*x[2],ff,q,w; for(i=0;i<2;i++)
x[i]=(double*)malloc (n*sizeof(double));
for(i=0;i {*(x[0]+i)=a[i]+0.618*(b[i]-a[i]); *(x[1]+i)=a[i]+0.382*(b[i]-a[i]); } f1=objf(x[0]); f2=objf(x[1]); do {if(f1>f2) {for(i=0;i *(x[1]+i)=a[i]+0.382*(b[i]-a[i]); } f2=objf(x[1]); } else {for(i=0;i *(x[0]+i)=a[i]+0.618*(b[i]-a[i]); f1=objf(x[0]); } q=0; for(i=0;i q=q+(b[i]-a[i])*(b[i]-a[i]); w=sqrt(q); }while(w>eps); for(i=0;i xx[i]=0.5*(a[i]+b[i]); ff=objf(xx); for(i=0;i<2;i++) free(x[i]); return(ff); double oneoptim(double x0[],double s[],double h0,double epsg,int n,double x[]) {double *a,*b,ff; a=(double *)malloc(n*sizeof(double)); b=(double *)malloc(n*sizeof(double)); jtf(x0,h0,s,n,a,b); ff=gold(a,b,epsg,n,x); free(a); free(b); return(ff); } double powell(double p[],double h0,double eps,double epsg,int n,double x[]) {int i,j,m; double *xx[4],*ss,*s; double f,f0,f1,f2,f3,fx,dlt,df,sdx,q,d; ss=(double *)malloc(n*(n+1)*sizeof(double)); s=(double *)malloc(n*sizeof(double)); for (i=0;i for (i=0;i<4;i++) xx[i]=(double *)malloc(n*sizeof(double)); for (i=0;i *(xx[0]+i)=p[i]; for(;;) {for (i=0;i f0=f1=objf(x); dlt=-1; for (j=0;j f=oneoptim(xx[0],s,h0,epsg,n,x); df=f0-f; if(df>dlt) } sdx=0.; for (i=0;i sdx=sdx+fabs(x[i]-(*(xx[1]+i))); if(sdx { } free(ss); free(s); for (i=0;i<4;i++) free(xx[i]); return(f); for (i=0;i *(xx[2]+i)=x[i]; f2=f; for (i=0;i {*(xx[3]+i)=2.*(*(xx[2]+i)-(*(xx[1]+i))); x[i]=*(xx[3]+i); } fx=objf(x); f3=fx; q=(f1-2*f2+f3)*(f1-f2-dlt)*(f1-f2-dlt); d=0.5*dlt*(f1-f3)*(f1-f3); if((f3 {if(f2<=f3) for (i=0;i for (i=0;i
机械优化设计实验报告 - 图文



