灰色预测GM(1,1)模型的java实现代码

@TOC

灰色预测模型

本文以灰色预测GM(1,1)模型为主体,利用java代码实现灰色预测。

实现代码

public class GreyModel {
//原始数组的个数
    private int size;
//灰色预测的系数a
    private double a;
//灰色预测系数b
    private double b;
//累加序列预测值 
   private double m;
//累加序列预测值
    private double n;
//原始序列预测值,灰色预测模型的输出值
    private double result;

    public double build(double[] x0) {
//原始数组的长度
        this.size = x0.length;
//创建累加数组
        double[] x1 = new double[this.size];
//累加数组的第一个值等于原始数组的第一个值
        x1[0] = x0[0];
//对原始数组进行累加
        for(int i = 1; i < this.size; ++i) {
            x1[i] = x0[i] + x1[i - 1];
        }
//创建矩阵B
        double[][] B = new double[this.size - 1][2];
//对矩阵B进行赋值
        for(int i = 0; i < this.size - 1; ++i) {
            B[i][0] = -(x1[i] + x1[i + 1]) / 2.0;
            B[i][1] = 1.0;
        }
//创建转置矩阵Bt
        double[][] Bt = new double[2][this.size - 1];
//转置矩阵Bt赋值
        for(int i = 0; i < this.size - 1; ++i) {
            Bt[0][i] = B[i][0];
            Bt[1][i] = 1.0;
        }
//创建矩阵t,作为Bt*B的结果
        double[][] t = new double[2][2];
        t = this.multiply(Bt, B);
//创建矩阵t1,作为t的逆矩阵
        double[][] t1 = new double[2][2];
        t1 = this.inverse(t);
//创建矩阵t2,作为t1*Bt的结果
        double[][] t2 = new double[2][this.size - 1];
        t2 = this.multiply(t1, Bt);
//创建矩阵Y
        double[][] Y = new double[this.size - 1][1];
        for(int i = 0; i < this.size - 1; ++i) {
            Y[i][0] = x0[i + 1];
        }
//创建矩阵t3,作为t2*Y的结果
        double[][] t3 = new double[2][1];
        t3 = this.multiply(t2, Y);
        this.a = t3[0][0];
        System.out.println(this.a);
        this.b = t3[1][0];
        System.out.println(this.b);
        this.m = (x0[0] - this.b / this.a) * Math.exp(-this.a * (double)(this.size - 1)) + this.b / this.a;
        this.n = (x0[0] - this.b / this.a) * Math.exp(-this.a * (double)this.size) + this.b / this.a;
        this.result = this.n - this.m;
        return this.result;
    }
//矩阵相乘的函数,left为左矩阵,right为右矩阵,返回值为t
    private double[][] multiply(double[][] left, double[][] right) {
        double[][] t = new double[left.length][right[0].length];

        for(int i = 0; i < left.length; ++i) {
            for(int j = 0; j < right[0].length; ++j) {
                for(int k = 0; k < left[0].length; ++k) {
                    t[i][j] += left[i][k] * right[k][j];
                }
            }
        }

        return t;
    }
//矩阵的求逆,t作为待求逆的矩阵,返回值为a
    private double[][] inverse(double[][] t) {
        double[][] a = new double[2][2];
        double det = t[0][0] * t[1][1] - t[0][1] * t[1][0];
        if (det > 0.0) {
            a[0][0] = t[1][1] / det;
            a[0][1] = -t[1][0] / det;
            a[1][0] = -t[0][1] / det;
            a[1][1] = t[0][0] / det;
        } else {
            System.out.println("矩阵不可逆");
        }

        return a;
    }
}

Main函数

public class Main {
    public static void main(String[] args) {
    //创建一个实例gm
        GreyModel gm = new GreyModel();
    //原始序列a
        double[] a = new double[]{1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
   //p为灰色预测值
        double p = gm.build(a);
        System.out.println(p);
    }

运行结果

在这里插入图片描述原始序列为{1,2,3,4,5,6},得到的下一个灰色预测值为7.8647156…,预测结果尚佳。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、下载并安装mysql,将脚本执行至数据库中; 2、配置java环境,使用jdk8,配置环境变量,下载IntelliJ IDEA 2019.2.4,该工具为java代码编译器 3、下载Maven,配置至环境变量(百度搜索很多),将构建器为Maven,类库配置成阿里库(方法:百度搜索很多很多) 4、将工程导入后,在application-local.yml文件中配置数据库 5、在logback-prod.xml文件中配置log日志 6、配置完毕后,即可启动 访问地址:http://localhost:8082/anime/login.html 用户名:admin 密码:admin V:china1866 1、 登录 2、 首页 3、 权限管理-用户管理 4、 权限管理-添加用户数据 5、 交通数据管理-查看交通数据 6、 交通数据管理-添加交通数据 7、 交通预测-交通数据预测 脚本: CREATE TABLE `traffic_data_t` ( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '序列', `trafficId` VARCHAR(50) NULL DEFAULT NULL COMMENT '交通数据编号', `trafficContent` VARCHAR(50) NULL DEFAULT NULL COMMENT '交通状况', `trafficSection` VARCHAR(200) NULL DEFAULT NULL COMMENT '交通路段', `trafficMan` VARCHAR(200) NULL DEFAULT NULL COMMENT '上报人', `trafficDate` VARCHAR(200) NULL DEFAULT NULL COMMENT '上报时间', `status` VARCHAR(200) NULL DEFAULT NULL COMMENT '交通状态', PRIMARY KEY (`id`) ) COMMENT='交通数据表' COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=44 ; CREATE TABLE `sys_user_t` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `role_id` INT(11) NULL DEFAULT NULL COMMENT '角色ID', `user_id` VARCHAR(50) NOT NULL COMMENT '用户ID', `user_name` VARCHAR(100) NOT NULL COMMENT '用户名', `status` INT(11) NOT NULL COMMENT '是否有效0:false\\\\1:true', `create_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `create_by` VARCHAR(100) NULL DEFAULT NULL, `last_update_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `last_update_by` VARCHAR(100) NULL DEFAULT NULL, `password` VARCHAR(128) NOT NULL, `tenantcode` VARCHAR(50) NOT NULL, `diskId` VARCHAR(500) NULL DEFAULT NULL, `remarks` VARCHAR(500) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) COMMENT='系统用户表' COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=51 ; CREATE TABLE `sys_role_t` ( `role_id` INT(11) NOT NULL COMMENT '角色ID', `role_name` VARCHAR(200) NOT NULL COMMENT '权限名称', `status` INT(11) NOT NULL COMMENT '是否有效0:true\\\\1:false', `create_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `create_by` VARCHAR(100) NULL DEFAULT NULL, `last_update_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `last_update_by` VARCHAR(100) NULL DEFAULT NULL ) COMMENT='系统角色表' COLLATE='utf8_general_ci' ENGINE=InnoDB ; CREATE TABLE `sys_menu_t` ( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '序列', `parent_id` VARCHAR(50) NOT NULL COMMENT '父节点ID', `menu_id` VARCHAR(50) NOT NULL COMMENT '菜单ID', `menu_name` VARCHAR(200) NOT NULL COMMENT '菜单名称', `menu_url` VARCHAR(200) NULL DEFAULT NULL COMMENT '菜单URL', `status` INT(11) NOT NULL COMMENT '有效(0有效,1失效)', `create_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `create_by` VARCHAR(200) NULL DEFAULT NULL, `last_update_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `last_update_by` VARCHAR(200) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) COMMENT='菜单表' COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=33 ; CREATE TABLE `sys_menu_role_relation_t` ( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '序列', `menu_id` VARCHAR(50) NOT NULL COMMENT '菜单ID', `role_id` VARCHAR(50) NOT NULL COMMENT '角色ID', `status` INT(11) NOT NULL COMMENT '有效(0有效,1失效)', `create_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `create_by` VARCHAR(200) NULL DEFAULT NULL, `last_update_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `last_update_by` VARCHAR(200) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) COMMENT='角色与菜单关系表' COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=51 ;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值