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

📄 分水系统模型.txt

📁 解线性规划
💻 TXT
字号:
#include <stdio.h>
#include <math.h>
#define n 10



FILE *fp1,*fp2;

float min(float a,float b)
      { if(a>b) return b; else return a; }
void eq(float A[],float B[])                                  //A[i]<--B[i]
      { int i; for(i=0;i<n;i++) A[i]=B[i];}
void uni_eq(float C[],float D[])                              //C[i]<--D[i]
      { int i; for(i=0;i<n;i++) C[i]=(-1)*D[i];}
float product(float E[],float L[])                            //return E[]*L[]
      { float j=0;int i;
	for(i=0;i<n;i++) j=j+E[i]*L[i]; return j; }              
void  add(float c1,float M[],float c2,float N[],float R[])    //R[]=c1*M[]+c2*N[]
      { int i; for(i=0;i<n;i++)  R[i]=c1*M[i]+c2*N[i] ;    }
float F(float xc[])                                           //f(x)
      { return pow(xc[0],2)*pow(xc[1],2)+pow(xc[0],2)+pow(xc[1],2)+pow(xc[2],2)+pow(xc[3],2)+pow(xc[4]-10,2); }
void  DF(float G[],float X[])                                  //G[]=gradient(x[])
      { G[0]=2*X[0]*pow(X[1],2)+2*X[0];G[1]=2*X[1];G[2]=2*X[2];G[3]=2*X[3];G[4]=2*pow((X[4]-10),1); }
void  ls(float MX[],float NP[],float RX[])                     //RX[]=ls(MX[],NP[])
      { float p=0.1,B=2,v=0.4,a=0,b=1e+8,t=1,f1,f2,g1=0,g2=0,gg[n];
	int i,k=0;
	f1=F(MX);
	DF(gg,MX);  g1=product(gg,NP);
	for(k=0;k<100;k++)
	   { add(1,MX,t,NP,RX);                               //MX has been changed
	     f2=F(RX); DF(gg,RX);                             //g=DF(x)
	     g2=product(gg,NP);
	     if(g2<v*g1)  { a=t;t=min(0.5*(a+b),2*a);continue;}
	     else  if(f1-f2<(-1)*p*t*g1)
		   {b=t;t=0.5*(a+b);continue; }
	     break;      }
	}
  void Add_line(float Line_a[],float Line_b[][n])
    { int i,j;  
      for(i=0;i<n;i++)    Line_a[i]=0;
	  for(i=0;i<n;i++)  
  	     for(j=0;j<n;j++)
		   Line_a[i]=Line_a[i]+Line_b[i][j];      }  //Line_a[i]为左行X和
  
  void Add_list(float List_a[],float List_b[][n])
  {int i,j;
	  for(j=0;j<n;j++)
   {   List_a[j]=0;
	   for(i=0;i<n;i++)
		   List_a[j]=List_a[j]+List_b[i][j];   }    }  //List_a[i]为列X和
 
  float F_min(float F_C[][n],float F_X[][n],float F_A[],float F_B[],float F_mu)       //F_min()无约束目标函数                                    //f(x)
  {     int i,j,k;
        float f=0,a[n],b[n];
        for(i=0;i<n;i++)
            for(j=0;j<n;j++)  
			{if(F_X[i][j]>=0) k=0;
			 else k=1;
				f=f+k*pow(F_X[i][j],2);             //解决阶跃函数,Xij平方和,解决x为正
			}
        Add_line(a,F_X);                            //行和a[i]
		Add_list(b,F_X);                            //列和b[i]
        for(i=0;i<n;i++) f=f+pow(a[i]-F_A[i],2)+pow(b[i]-F_B[i],2);  //f追加等式约束
		f=f*F_mu;                                                 //引入罚因子F_mu
		for(i=0;i<n;i++)
            for(j=0;j<n;j++)  f=f+F_C[i][j]*F_X[i][j];  //追加原约束问题的目标函数c*x


        return f;        
  }


	main()
	{   
   int i=0,j=0,k,row,colum;
   float C[n][n],A[n],B[n],max;
   char c;
   double t=0,X[n][n];

   float a[n],b[n];
   FILE *fp1,*fp2;

   for(i=0;i<n;i++)
	   for(j=0;j<n;j++)
		   X[i][j]=1;         // X 被初始化 均为1
   fp1=fopen("参数库.txt","w+");
   fprintf(fp1,"4 2 -3 -1 2 1 0 0 0 0 5\n");
   fprintf(fp1,"8 6 -5 -3 6 5 0 1 0 0 12\n");
   fprintf(fp1,"4 2 -2 -1 3 2 -1 0 3 1 3\n");
   fprintf(fp1,"0 -2 1 5 -1 3 -1 1 9 4 2\n");
   fprintf(fp1,"-4 2 6 -1 6 7 -3 3 2 3 3\n");
   fprintf(fp1,"8 6 -8 5 7 17 2 6 -3 5 46\n");
   fprintf(fp1,"0 2 -1 3 -4 2 5 3 0 1 13\n");
   fprintf(fp1,"16 10 -11 -9 17 34 2 -1 2 2 38\n");
   fprintf(fp1,"4 6 2 -7 13 9 2 0 12 4 19\n");
   fprintf(fp1,"0 0 -1 8 -3 -24 -8 6 3 -1 21\n");
   fprintf(fp1,"40 28 26 24 22 20 18 16 14 12\n");//第11行:B[j]
   fclose(fp1);
   fp1=fopen("参数库.txt","r");
   for(i=0;i<n;i++)
   { for(j=0;j<n;j++)     fscanf(fp1,"%f",&C[i][j]);//输入C[i][j]
   fscanf(fp1,"%f",&A[i]); }                      //输入A[i][j]——行和
   for(i=0;i<n;i++)   fscanf(fp1,"%f",&B[i]);       //输入B[i][j]——列和
   fclose(fp1);
   
   fp2=fopen("结果库.txt","w+");//输出文件,格式(规整)化系数矩阵
   fprintf(fp2,"A====================================A\n");
   for(i=0;i<n;i++)
   {   for(j=0;j<n;j++)
      fprintf(fp2,"%5.f\t",C[i][j]);
      fprintf(fp2,"%5.f\t",A[i]);
      fprintf(fp2,"\n"); }
   fprintf(fp2,"\n");
      for(i=0;i<n;i++)   
      fprintf(fp2,"%8.f",B[i]);
   fprintf(fp2,"\nA===========A===========A============A\n");
   fclose(fp2);
   

    
   

   

}

⌨️ 快捷键说明

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