⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 输入五个数据的.txt

📁 最优化设计程序之一.共轭剃度法.给出步长和初值.
💻 TXT
字号:
#include "math.h"
#include "stdio.h"
#define sppor 0.5*(sqrt(6)-1)
#define qouk 0.3
#define ppk 1e-4
#define Wer3 1e-3
#define poy 4
float klop[poy],ggop,vlop;

float fary(float parry[poy])
{
 return(2*parry[0]*parry[0]+parry[1]*parry[1]+parry[2]*parry[2]+parry[3]*parry[3]-2);
}

float garry(float parry[poy])
{ 
 return(4*parry[0]);
}

float garrytwo(float parry[poy])
{ 
 return(2*parry[1]);
}

float garrythree(float parry[poy])
{
 return(2*parry[2]);
}

float garryfour(float parry[poy])
{
 return(2*parry[3]);
}

void popky(float parry[poy],float p[poy],float tppk)
{    
 int i;
    for(i=0;i<poy;i++)
       klop[i]=parry[i]+tppk*p[i];
}

float ploopk(float parry[poy])
{
 return (garry(parry)*garry(parry)+garrytwo(parry)*garrytwo(parry)+garrythree(parry)*garrythree(parry)+garryfour(parry)*garryfour(parry));
}

void whaap(float xi[poy],float h,float p[poy])
{  
   float t0=0,m,n,t1,t2,f0,g1,g2;
   int i;
   t2=t0+h;
   popky(xi,p,t0);
   f0=fary(klop);
   popky(xi,p,t2);
   g2=fary(klop);
   if(g2>=f0)
   { 
    t1=t2;
    g1=g2;
    h=-h;
loop1: t2=t0+h;
    popky(xi,p,t2);
    g2=fary(klop);
       if(g2>f0)    
    {  
     if(t1>t2)
     {  
      vlop=t1;ggop=t2;
     }
        else
     { 
      vlop=t2;
      ggop=t1;
     }
        return;
    }
       else
       {
loop2:     t1=t0;
     g1=f0;
     t0=t2;
        f0=g2;
     h=2*h;
        goto loop1;
       }
   }
   else
   {  
   goto loop2;
   }
}

float whakp(float x[poy],float p[poy])
{ 
 float g1,g2,t1,t2,e=0.1;
    t2=ggop+sppor*(vlop-ggop);
    popky(x,p,t2);
    g2=fary(klop);
    t1=ggop+vlop-t2;
    popky(x,p,t1);
    g1=fary(klop);
    while(fabs(t1-t2)>=e)
    { 
  if(g1<=g2)
  { 
   vlop=t2;
   t2=t1;
   g2=g1;
         t1=ggop+vlop-t2;
         popky(x,p,t1);
         g1=fary(klop);
  }
        else
  { 
   ggop=t1;
   t1=t2;
   g1=g2;
         t2=ggop+sppor*(vlop-ggop);
         popky(x,p,t2);
         g2=fary(klop);
  }
    }
    return (t1+t2)/2;
} /*whakp*/

main()
{ 
  int i,k,iint=0;
  float fot,h=1,fotn,m=0,n=0,aa,ab,qa,qb,qc;
  float x[poy],xi[poy],p[poy],pk[poy],g[poy];
  static float q[poy][poy]={2,1,0,0,1,2,0,0,0,0,2,0,0,0,0,2};
  printf("\n Enter initial point:");
  for(i=0;i<poy;i++)
     scanf("%f",&x[i]);
  p[0]=-garry(x);
  p[1]=-garrytwo(x);
  p[2]=-garrythree(x);
  p[3]=-garryfour(x);
  g[0]=garry(x);
  g[1]=garrytwo(x);
  g[2]=garrythree(x);
  g[3]=garryfour(x);

  do{
      iint++;
      for(i=0;i<poy;i++)
   xi[i]=x[i];
      for(k=0,aa=0;k<poy;k++)
      { 
   aa+=g[k]*g[k];
      pk[k]=0;
      }
      for(i=0;i<poy;i++)
    for(k=0;k<poy;k++)
      pk[i]+=p[k]*q[k][i];
      for(k=0,ab=0;k<poy;k++)
      ab+=pk[k]*p[k];
      fot=aa/ab;
      printf("\n x%d=(",iint);
      for(k=0;k<poy;k++)
   { 
    x[k]=xi[k]+fot*p[k];
       printf(" %f ",x[k]);
       if(k<poy-1)
    {
            printf(",");
    }
   }
      printf(")");
      printf("\n f%d=%f ",iint,fary(x));
      if(sqrt(ploopk(x))<Wer3)
   { 
    printf("\n smallest point :(");
       for(i=0;i<poy;i++)
    {
     printf("%f",x[i]);
              if(i<poy-1)
     {
                printf(",");
     }
          }
          printf(")");
       printf(" \n smallest value :%.2f",fary(x));
       printf("\n  Circulation times: %d",iint);
       return;
   }
      else
   { 
    m=ploopk(x); 
    n=ploopk(xi);
       fotn=m/n;
       g[0]=garry(x);
       g[1]=garrytwo(x);
       g[2]=garrythree(x);
       g[3]=garryfour(x);
       for(i=0;i<poy;i++)
    {
         p[i]=-g[i]+fotn*p[i];
    }
   }
    }while(iint<=poy);


  { do
    {
    iint++;
       for(i=0;i<poy;i++)
         xi[i]=x[i];
       if(iint>1)
       { 
     for(i=0,m=0;i<poy;i++)
           m+=(x[i]-xi[i])*(x[i]-xi[i]);
        for(i=0,n=0;i<poy;i++)
           n+=p[i]*p[i];
        if(m>0.001)
           h=qouk*sqrt(m)/sqrt(n);
       }
       whaap(xi,h,p);
       fot=whakp(xi,p);
       printf("\n x%d=",iint);
       if(iint<10)
          printf(" (");
       else
          printf("(");
       for(i=0;i<poy;i++)
       {
     x[i]=xi[i]+fot*p[i];
           printf(" %f ",x[i]);
           if(i<poy-1)
             printf(",");
       }
       printf(")");
       printf("\n f%d=%f ",iint,fary(x));
       for(i=0,aa=0,ab=0;i<poy;i++)
       { 
     aa+=(x[i]-xi[i])*(x[i]-xi[i]);
        ab+=xi[i]*xi[i];
       }
       qc=sqrt(ploopk(x));
       qb=sqrt(aa)/(sqrt(ab)+1);
       qa=fabs(fary(x)-fary(xi))/(fary(x)+1);
       if((qc<=Wer3)&&(qb<=ppk)&&(qa<=ppk))
       {
     printf("\n 最小极值点:(");
        for(i=0;i<poy;i++)
     {
      printf(" %.2f ",x[i]);
         if(i<poy-1)
           printf(",");
        }
     printf(")\n");
     printf("\n 最小值为:%f",fary(x));
     printf("\n 循环次数:%d",iint);
     return;
       }
       else
       {  
     m=ploopk(x);
        n=ploopk(xi);
        fotn=m/n; 
        g[2]=garrythree(x);
        g[3]=garryfour(x);
           g[0]=garry(x);
        g[1]=garrytwo(x);
        for(i=0;i<poy;i++)
          p[i]=-g[i]+fotn*p[i];
       }
   }while(iint<=50);
 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -