首页 > 解决方案 > 均值恒定时的索引

问题描述

我对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

标签: matlabstatisticsmean

解决方案


我怀疑问题在于平均值永远不会真正保持不变,而是会围绕“真实平均值”波动。因此,您很可能永远不会遇到累积平均值的两个连续值相同的情况。您应该做的是确定某个阈值,低于该阈值您认为平均值的波动大约等于零,并将累积平均值的差异与该值进行比较。例如:

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;

在此过程中,我们保证索引处的值以及所有后续值都收敛于您的预定阈值以下。


推荐阅读