资源简介

基于GM(1,1)模型的灰色算法改进,带残差修正的灰色算法java实现

资源截图

代码片段和文件信息

import java.lang.Math.* ;
import java.util.*;

public class my_marcof {
static double a=0b=0a_error=0b_error=0;
static protected  void Cal_param(int numdouble arr[]){
   double []arr1=new double[num];//经过一次累加数组
   double sum=0;
   for(int i=0;i    {
    sum+=arr[i];
    arr1[i]=sum;
    //System.out.println(“arr1[“+i+“]=“+arr1[i]+“;“);//同上
   }
   double []arr2=new double [num-1];//arr1的紧邻均值数组
   for(int i=0;i    {
    arr2[i]=(double)(arr1[i]+arr1[i+1])/2;
    //System.out.println(“arr2[“+i+“]=“+arr2[i]+“;“);//同上
   }
   /*
    * 
    下面建立
    向量B和YN求解待估参数向量,
    即求参数ab
    
    */
   /*
    下面建立向量B
    B是5行2列的矩阵,
    相当于一个二维数组。
    */
   double[][]B=new double[num-1][2];
   for(int i=0;i    {
    for(int j=0;j<2;j++)
    {
     if(j==1)
      B[i][j]=1;
     else
      B[i][j]=-arr2[i];
     //System.out.println(“B[“+i+“][“+j+“]=“+B[i][j]+“;“);
    }
    
   }
   /*
    下面建立向量YN*/
   double [][]YN=new double[num-1][1];
   for(int i=0;i    {
    for(int j=0;j<1;j++)
    {
     YN[i][j]=arr[i+1];
     //System.out.println(“YN[“+i+“][“+j+“]=“+YN[i][j]+“;“);
    }
   }
   
   /*
     B的转置矩阵BT2行5列的矩阵
    */
   double[][]BT=new double[2][num-1];
   for(int i=0;i<2;i++)
   {
    for(int j=0;j     {
     BT[i][j]=B[j][i];
     //System.out.println(“BT[“+i+“][“+j+“]=“+BT[i][j]+“;“);
    }
   }
   /*
     将BT和B的乘积所得到的结果记为数组B2T则B2T是一个2*2的矩阵*/
   double [][]B2T=new double [2][2];
   for(int i=0;i<2;i++){//rows of BT

   {
    for(int j=0;j<2;j++)//cloums of B
    {
    for(int k=0;k     {
     B2T[i][j]=B2T[i][j]+BT[i][k]*B[k][j];
    }
     //System.out.println(“B2T[“+i+“][“+j+“]=“+B2T[i][j]+“;“);
    }

   }
           }
   /*下面求B2T的逆矩阵,设为B_2T,怎么适用于一般的矩阵?*/
   double [][]B_2T=new double [2][2];
   B_2T[0][0]=(1/(B2T[0][0]*B2T[1][1]-B2T[0][1]*B2T[1][0]))*B2T[1][1];
   B_2T[0][1]=(1/(B2T[0][0]*B2T[1][1]-B2T[0][1]*B2T[1][0]))*(-B2T[0][1]);
   B_2T[1][0]=(1/(B2T[0][0]*B2T[1][1]-B2T[0][1]*B2T[1][0]))*(-B2T[1][0]);
   B_2T[1][1]=(1/(B2T[0][0]*B2T[1][1]-B2T[0][1]*B2T[1][0]))*B2T[0][0];
   for(int i=0;i<2;i++)
   {
    for(int j=0;j<2;j++)
    {
     //System.out.println(“B_2T[“+i+“][“+j+“]=“+B_2T[i][j]+“;“);
    }
   }
   /*根据以上所求的各已知量下面求待估参数的未知量a和b,待估向量矩阵等于B_2T*BT*YN 
    下面我们分别求这些矩阵的乘积,首先求B_2T*BT,令B_2T*BT的乘积为A矩阵,则A就是一个2*5的矩阵*/
   /*
    * 
    * 
    * 
    * 下面先求A矩阵*/
   double [][]A=new double[2][num-1];
   for(int i=0;i<2;i++){//rows of B_2T
    {
     for(int j=0;j      {
     for(int k=0;k<2;k++)//cloums of B_2T=rows of BT
     {
      A[i][j]=A[i][j]+B_2T[i][k]*BT[k][j];
     }
      //System.out.println(“A[

评论

共有 条评论

相关资源