Я подозреваю, что проблема заключается в том, что среднее значение никогда не будет постоянным, а скорее будет колебаться вокруг «истинного среднего».Таким образом, вы, скорее всего, никогда не столкнетесь с ситуацией, когда два последовательных значения совокупного среднего значения идентичны.Что вы должны сделать, это определить некоторое пороговое значение, ниже которого вы считаете, что флуктуации среднего значения примерно равны нулю, и сравнить разницу кумулятивного среднего с этим значением.Например:
epsilon = 0.01;
const_ind = find(abs(diff(prog_mu))<epsilon,1,'first');
где epsilon будет пороговым значением, которое вы выберете.Команда find
возвратит индекс, при котором изменение совокупного среднего значения сначала падает ниже этого порогового значения.
EDIT : как было указано, этот метод может потенциально завершиться неудачей, еслиПервые несколько случайных чисел генерируются таким образом, что разница между ними меньше значения эпсилона, но еще не сходятся.Тогда я хотел бы предложить другой подход.
Мы рассчитываем совокупные средние, как и раньше, примерно так:
prog_mu=cumsum(P_u)./cumsum(ones(size(P_u)));
Мы также вычисляем разницу в этих совокупных средних, как и раньше:
df_prog_mu = diff(prog_mu);
Теперь, чтобы убедиться, что конверсия была достигнута, мы находим первый индекс, где совокупное среднее ниже порогового значения epsilon
и , все последующие средние также нижепороговое значение.Чтобы сформулировать это по-другому, мы хотим найти индекс после позиции last в массиве, где совокупное среднее значение выше порогового значения:
conv_index = find(~df_prog_mu,1,'last')+1;
Inтем самым мы гарантируем, что значение индекса и все последующие значения сошлись ниже заданного вами порогового значения.