Как найти 10 значений, экспоненциально распределенных, которые суммируют со значением, х - PullRequest
1 голос
/ 29 августа 2011

у меня есть значение, например 2.8.Я хочу найти 10 чисел, которые находятся на экспоненциальной кривой, которые суммируются с этим значением.

То есть я хочу получить 10 чисел, которые в сумме составляют 2,8 и которые при построении выглядят каккривая ниже (экспоненциальный спад).Эти 10 чисел должны быть равномерно распределены вдоль кривой, то есть «шаг x» между значениями должен быть постоянным.

Exponential Decrease

Это значение 2,8 будет введено с помощьюпользователь и, следовательно, способ, которым я вычисляю это, должен быть своего рода алгоритмом, который я могу программировать (следовательно, спрашиваю это на SO, а не на Math.SE).- есть идеи?

Ответы [ 3 ]

3 голосов
/ 29 августа 2011

Вы хотите, чтобы 10 значений были равномерно распределены, то есть x_k = a + k * b. Они должны выполнить сумму (exp (-x_k)) = v, где v является вашим целевым значением (2.8). Это означает, что exp (-a) * sum (exp (-b) ^ k) = v.

Очевидно, что существует решение для каждого выбора b, если v положительно. Установите b в произвольное значение и вычислите a из него.

например. для v = 2,8 и b = 0,1 вы получаете a = -log (v / sum (exp (-b) ^ k)) = -log (2.8 / sum (0.90484 ^ k)) = -log (2.8 / 6.6425) = -log (0,421526) = 0,86387.

Таким образом, для этого примера значения х будут 0,86387, 0,96387, ..., 1,76387, а значения у 0,421526, 0,381412, 0,345116, 0,312274, 0,282557, 0,255668, 0,231338, 0,2032324, 0,189404, 0,171380.

Обновление:

Поскольку было выяснено, что кривая может быть масштабирована произвольно, а для x предпочтительнее быть 1, 2, 3 ... 9, это намного проще.

Предполагая, что функция кривой равна r * exp (-x), 10 значений будут r * exp (-1) ... r * exp (-9). Их сумма равна r * sum (exp (-x)) = r * 0,58190489. Таким образом, чтобы достичь определенного значения (2.8), вам просто нужно отрегулировать r соответственно:

r = 2,8 / сумма (exp (-x)) = 4,81178294

И вы получите 10 значений: 1.770156, 0.651204, 0.239565, 0.088131, 0.032422, 0.011927, 0.004388, 0.001614, 0.000594.

1 голос
/ 29 августа 2011

Я собираюсь обобщить и предположить, что вы хотите, чтобы N чисел суммировалось с V.

Поскольку ваши числа равномерно распределены по экспоненте, вы можете записать свою сумму как

a + a*x + a*x^2 + ... + a*x^(N-1) = V

Гдепервая точка имеет значение a, а вторая a*x и т. д.

. Вы можете взять коэффициент a и получить:

a ( 1 + x + x^2 + ... + x^(N-1) ) = V

Если мы свободнычтобы выбрать x, тогда мы можем легко найти

a = V / ( 1 + x + x^2 + .. x^(N-1) ) 
  = V*(x+1)/(x^N-1)

Подстановка этого обратно в

a, a*x, a*x^2, ..., a*x^(N-1) 

дает требуемую последовательность

1 голос
/ 29 августа 2011

Если я правильно понимаю ваш вопрос, то вы хотите найти x, которое решает уравнение

Это может быть решено как

(просто сумма чисел как геометрическая прогрессия)

У уравнения в RootOf всегда будет 1 вещественный квадрат, отличный от 1 для 2,8 или любого другого положительного числа.Вы можете решить ее, используя алгоритм root-finding (1 всегда является корнем, но он не решает исходную задачу).Для константы a вы можете выбрать любое число.

После вычисления x вы можете легко вычислить 10 чисел как .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...