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

📄 min_polynomial_way.java

📁 Genetic Programming。GP算法在方程逼近求解上的应用。
💻 JAVA
字号:



public class Min_Polynomial_Way
{
	public double[][]G;
	public double[][]D;
	public double [][]temp;
	public double[]x;
	public double[]y;

	public int length;
	public int dim;
	public RealPoint [] result;
	public double []syntax;
	public String Expression;
	
	public Min_Polynomial_Way(RealPoint[] data,int dim)
	{
	 this.length=data.length;
	 this.dim=dim;
	 
	 x=new double[length];
	 y=new double[length];
	 result=new RealPoint[length];
	 D=new double[dim][1];
	 G=new double[dim][dim];
	 temp=new double[dim][1];
	 syntax=new double[dim];
	 
	 for(int i=0;i<length;i++)
	 {
	  x[i]=data[i].x;
      y[i]=data[i].y;
      result[i] =new RealPoint(x[i],0);
      
      System.out.println("x[i]  is"+x[i]+"y[i] is"+y[i]);
      
     }
	 for(int i=0;i<dim;i++)	
	 	{
	 	    	
	 		for(int j=0;j<dim;j++)
	 		{
	 		
	 		for(int k=0;k<length;k++)
	 			
	 		G[i][j]+=Math.pow(x[k],i)*Math.pow(x[k],j);
	  
	 		System.out.println("G[i][j] is"+G[i][j]);
	 			
	 		}
	 		
	 	}
	 for(int i=0;i<dim;i++)
	 		{
	 		
	 		for(int k=0;k<length;k++)
	 			
	 		D[i][0]+=Math.pow(x[k],i)*y[k];
	  
	 		
	 			
	 		}
	 	
	 	
	 	
	}
	
	
	public RealPoint[] Processing()
	{
		
		
		Inverse_Cal(G,dim);
		
		//for(int i=0;i<dim;i++)
		//for(int j=0;j<dim;j++)
		//System.out.println(
		
		Multi_Cal(G,D,temp,dim,dim,1);
		for(int i=0;i<dim;i++)
		{
			System.out.println("temp is"+temp[i][0]);
			syntax[i]=temp[i][0];
			
			}
			
	for(int i=0;i<length;i++)
	{		
	 for(int j=0;j<dim;j++)
	 {
	 	
	   result[i].y+=Math.pow(result[i].x,j)*syntax[j];
	 	
	 	
	 }
	 }
	 
	 Expression=this.Get_Expression(syntax);
	 return result; 
		
	}

	//get 误差
	public double Get_Differ()
	{
		
		return 0.0;
		
		
		}
	private String Get_Expression(double syn[])
	{
		String s="算术表达式为:";
		for(int i=0;i<syn.length;i++)
		{
			
			s=s+"+"+syn[i]+"*x^"+i;
			
			}
		
		return s;
		
		
		
		}	
		
		public static void main(String[]args)
		{   
		RealPoint[] p=new RealPoint[4];
		    for(int i=0;i<4;i++)
		    {
		   p[i]=new RealPoint((double)i/3,(double)i/3);
		    	 
		    System.out.println(p[i].x+""+p[i].y);	
		    	}
		    
			Min_Polynomial_Way a=new Min_Polynomial_Way(p,2);
			
			a.Processing();
			
			System.out.println("The Expression is"+a.Expression);
			
			}
		
public static void  Inverse_Cal(double[][] a,int n)
{
   int i,j,row,col,k;
   double max,temp;
   int[] p=new int[n];
   double[][] b=new double[n][n];
   for(i=0;i<n;i++){p[i]=i;b[i][i]=1;}
   for(k=0;k<n;k++)
   {//找主元
    max=0;row=col=i;
    for(i=k;i<n;i++)
     for(j=k;j<n;j++)
     {temp=Math.abs(b[i][j]);
      if(max<temp){max=temp;row=i;col=j;}
	  }
	//交换行列,将主元调整到k行k列上
	if(row!=k)
	{for(j=0;j<n;j++)
	 {temp=a[row][j];a[row][j]=a[k][j];a[k][j]=temp;
	  temp=b[row][j];b[row][j]=b[k][j];b[k][j]=temp;}
	 }
	 if(col!=k)
	 {for(i=0;i<n;i++)
	   {temp=a[i][col];a[i][col]=a[i][k];a[i][k]=temp;}
	  j=p[col];p[col]=p[k];p[k]=j;
	 }
	 //处理
	 for(j=k+1;j<n;j++)a[k][j]/=a[k][k];
	 for(j=0;j<n;j++)b[k][j]/=a[k][k];
	 a[k][k]=1;
	 for(j=k+1;j<n;j++)
	 {for(i=0;i<k;i++)a[i][j]-=a[i][k]*a[k][j];
	  for(i=k+1;i<n;i++)a[i][j]-=a[i][k]*a[k][j];}
	 for(j=0;j<n;j++)
	 {for(i=0;i<k;i++)b[i][j]-=a[i][k]*b[k][j];
	  for(i=k+1;i<n;i++)b[i][j]-=a[i][k]*b[k][j];}
	  for(i=0;i<k;i++)a[i][k]=0;
	  a[k][k]=1;
  }
 //恢复行列次序;
 for(j=0;j<n;j++)
  {for(i=0;i<n;i++)a[p[i]][j]=b[i][j];}

}

public void Multi_Cal(double[][] a,double[][] b,double[][]c,int m,int n,int l)
  {double[][] d=new double[m][l];
   int i,j,k;
   for(i=0;i<m;i++)
     for(j=0;j<l;j++)
      {d[i][j]=0;
       for(k=0;k<n;k++)d[i][j]+=a[i][k]*b[k][j];}
  for(i=0;i<m;i++)
   for(j=0;j<l;j++)
    c[i][j]=d[i][j];
   }
   
   
   
}

⌨️ 快捷键说明

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