资源简介
基于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[
- 上一篇:zxing3.3.0 jar包
- 下一篇:android实现摇一摇功能
评论
共有 条评论