Я подозреваю, что если вас интересуют очень большие или маленькие значения p, лучше всего выполнить некоторую форму алгебраической манипуляции с формулой обобщенного среднего, прежде чем вводить числовые значения.
Например,в пределе малых p можно показать, что обобщенное среднее стремится к n-му корню произведения x_1 * x_2 * ... x_n.Члены более высокого порядка в p включают суммы и произведения log (x_i), которые также должны быть относительно численно устойчивы для вычисления.На самом деле, я считаю, что разложение первого порядка по p имеет простое отношение к дисперсии log (x_i):
Если применить этоФормула для набора из 100 случайных чисел, взятых равномерно из диапазона [0,2, 2], можно получить такую тенденцию:
, которая здесь показываетасимптотическая формула становится довольно точной для p менее чем приблизительно 0,3, а простая формула не работает только тогда, когда p меньше чем приблизительно 1e-10.
В случае больших p преобладает тот x_i, который имеет наибольшеевеличина (давайте назовем этот индекс i_max).Можно преобразовать обобщенную формулу среднего значения в следующую форму, которая имеет меньшее патологическое поведение при больших значениях p:
Если это применяется (с использованием стандартныхподпрограммы numpy, включающие numpy.log1p ) для еще 100 равномерно распределенных выборок в течение [0.2, 2.0], можно обнаружить, что переставленная формула в основном точно соответствует простой формуле, но остается действительной для гораздо больших значений pкоторую простая формула переполняет при вычислении степеней x_i.
(Обратите внимание, что на левом графике синяя кривая для простой формулы сдвинута вверхна 0,1, чтобы можно было увидеть, где он заканчивается из-за переполнения. При p менее 1000, две кривые в противном случае были бы неразличимы.)