java 实现离散数学的期望值

 

为什么要用离散数据求均值?很多时候使用平均数,把大量数据累加起来再除以数据的个数并不能真实的反应数据的情况,比如一组稳定80左右的数据,因为其中有几个20的数据,导致求到的平均值就会和真实的情况相差一些。而离散数据的均值是求出的数据的平均状况,数据值得平均水平。这个均值也称为数学期望。

废话不多说,直接上代码

private static BigDecimal GetDataEx() {
        List<BigDecimal> list=new ArrayList<>();
        list.add(new BigDecimal(25));
        list.add(new BigDecimal(25));
        list.add(new BigDecimal(25));
        list.add(new BigDecimal(25));
        list.add(new BigDecimal(25));
        list.add(new BigDecimal(25));
        list.add(new BigDecimal(25));
        list.add(new BigDecimal(25));
        list.add(new BigDecimal(25));
        list.add(new BigDecimal(25));
        list.add(new BigDecimal(25));
        list.add(new BigDecimal(25));
        list.add(new BigDecimal(25));
        list.add(new BigDecimal(25));
        list.add(new BigDecimal(25));
        list.add(new BigDecimal(25));
        list.add(new BigDecimal(25));
        list.add(new BigDecimal(25));
        list.add(new BigDecimal(10));
        list.add(new BigDecimal(100));

        // 计算每个性能数据出现的次数
        Map<BigDecimal, Integer> map = new HashMap<BigDecimal, Integer>();
        if (list != null && list.size() > 0) {

            for (BigDecimal temp : list) {
                Integer count = map.get(temp);
                map.put(temp, (count == null) ? 1 : count + 1);
            }
            System.out.println(map);
        }
        // 根据离散数学去计算数学期望值,即均值
        BigDecimal ex=BigDecimal.ZERO;
        for (Map.Entry<BigDecimal, Integer> entry : map.entrySet()) {
            //      (测试)数学期望均值  25x0.9+10x0.05+100x0.05=28
            // 性能数据的值
            BigDecimal keyVal=entry.getKey();
            // 这个数据出现的次数
            Integer valueVal=entry.getValue();
           // 计算改数据的权重
            Integer total=list.size();
            NumberFormat numberFormat = NumberFormat.getInstance();
            numberFormat.setMaximumFractionDigits(4);
            String val=numberFormat.format((float) valueVal/(float) total);
            BigDecimal exMap= keyVal.multiply(new BigDecimal(val));
            // 加权求期望
            ex=ex.add(exMap);
        }
        return  ex;

    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值