bear_csdn 2023-10-31 22:31 采纳率: 50%
浏览 12
已结题

已知平均值,求一组数据

遇到一个问题,有点把我难住了。已知一个固定double值,求一组double数据,这一组double的平均值刚好等于或非常接近于这个固定值。

img

问题:

1、固定值、max、min、禁止区都是根据动态数据每调用一次函数,计算出来的,属于变量。
2、求一个高效的计算出一组平均值数据的方法。
3、由于是double的数据,求出的数据只要非常接近“固定值”(±1%范围)即满足实际需求。

我的思路:

1、先获取一个值,判断是否大于“固定值”,根据大于小于,下一次取值则随机取反方向的。
2、直到最后一个值,计算已有数组平均值,判断与“固定值”大小关系,然后计算。X =(固定值-平均值 )*Count +固定值,这样计算没有什么问题。但最终计算出的X很可能超出了范围限定。
3、目前没有更好的计算方法,只能判断计算出X值超过范围,则从新执行一遍函数,重新产生随机数。但存在一个很严重问题,并且这个问题出现的概率还不小。假如:min或max的范围很小(一般min的下区间范围小,则max的区间要大一些的。max区间也是相反的),比如只有0.65-0.68之间,那么就几乎会无限循环下去。

求哪位 大_佬 给指较为明确的计算方法或思路!!

如果有测算过程最好,代码最好是C#、java、python ,其他的编程语言也可以,只要有计算过程,我自己可以研究!

  • 写回答

2条回答 默认 最新

  • wanghui0380 2023-11-01 11:33
    关注

    按贝叶斯的弄法就行(预测+修正)
    不过我不想每次迭代弄,题目其实可以整体一次弄。一次性生成一组随机值,然后整体修正。
    当然算法不止一种,你用卡尔曼滤波每次修正可以,你用遗传算法迭代修正也OK

    double A = 120.05d;beiy
    
    Random rand = new Random(DateTime.Now.Millisecond);
    
    //假设需要生成100个,NextDouble是随机在0,1分布,不过我加了个50的权
    var temp = Enumerable.Repeat(0, 100).Select(p => 50*rand.NextDouble());
    
    var tempavg = temp.Average();
    
    double adjustment =  A-tempavg;
    
    var adjusted_data = temp.Select(p => p + adjustment);
    
    //验证 
    var adjusted_dataavg = adjusted_data.Average();
    
     double adjustment = tempavg - A;
    
     var adjusted_data = temp.Select(p => p + adjustment);
    
     //验证 
     var adjusted_dataavg = adjusted_data.Average();
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月10日
  • 已采纳回答 11月2日
  • 创建了问题 10月31日

悬赏问题

  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画
  • ¥15 hadoop中启动hive报错如下怎么解决