matlab - 均值恒定时的索引
问题描述
我对matlab比较陌生。我找到了一组具有均值和标准差的 1E6 个随机数的连续均值。最初计算的平均值会波动,然后收敛到某个值。我想知道平均值收敛的索引(即第 100 个位置)。我不知道该怎么做。
我尝试使用逻辑运算符,但我必须通过 1e6 个数据点。即使这样,我仍然找不到索引。
Y_c= sigma_c * randn(n_r, 1) + mu_c; %Random number creation
Y_f=sigma_f * randn(n_r, 1) + mu_f;%Random number creation
P_u=gamma*(B*B)/2.*N_gamma+q*B.*N_q + Y_c*B.*N_c; %Calculation of Ultimate load
prog_mu=cumsum(P_u)./cumsum(ones(size(P_u))); %Progressive Cumulative Mean of system response
logical(diff(prog_mu==0)); %Find index
解决方案
我怀疑问题在于平均值永远不会真正保持不变,而是会围绕“真实平均值”波动。因此,您很可能永远不会遇到累积平均值的两个连续值相同的情况。您应该做的是确定某个阈值,低于该阈值您认为平均值的波动大约等于零,并将累积平均值的差异与该值进行比较。例如:
epsilon = 0.01;
const_ind = find(abs(diff(prog_mu))<epsilon,1,'first');
其中 epsilon 将是您选择的阈值。该find
命令将返回累积平均值的变化首先下降到此阈值以下的索引。
编辑:正如所指出的,如果生成的前几个随机数使得它们之间的差异小于 epsilon 值,但尚未收敛,则此方法可能会失败。那么,我想提出一种不同的方法。
我们像以前一样计算累积均值,如下所示:
prog_mu=cumsum(P_u)./cumsum(ones(size(P_u)));
我们还计算这些累积平均值的差异,如前所述:
df_prog_mu = diff(prog_mu);
现在,为了确保已实现转换,我们找到累积均值低于阈值epsilon
且所有后续均值也低于阈值的第一个索引。换一种说法,我们希望找到数组中累积平均值高于阈值的最后一个位置之后的索引:
conv_index = find(~df_prog_mu,1,'last')+1;
在此过程中,我们保证索引处的值以及所有后续值都收敛于您的预定阈值以下。
推荐阅读
- php - 我的 CodeIgniter 3 脚本中出现 XSS 错误
- javascript - 如何在搜索字段位于对象侧数组中的mongodb db数据库中搜索字符串数组?
- flutter - FCM 推送通知负载
- devops - ClearML 如何获得可配置的超参数?
- spring-boot - SpringBoot 2.6 + Jubilee:磁盘空间指标到 Grafana
- apache - 如何在 xampp 中设置具有相同父服务器别名或名称的虚拟主机
- ruby-on-rails - rails: form_for(@object) 暗示路径
- android - 实施 Firebase 崩溃分析的问题
- javascript - 如何使用 babel 修改带有 AST 的 javascript 代码?
- android - Android 和 iOS 中的 google meet 和 Microsoft 团队的包名称是什么?