Логарифмическое распределение

Во-первых, математика не моя область.

Представьте себе такую ​​проблему:

У меня есть определенное количество денег, которые я могу потратить, скажем, 500, и мне нужно потратить их в течение фиксированного количества дней, скажем, 20. У меня есть фиксированный максимум денег, который я могу потратить в день, например, 50. Мне не нужно тратить деньги в день.

Теперь мне нужно знать, как рассчитать общее количество денег, которое я должен тратить каждый день, чтобы получить кривую расходов, подобную следующей:

Кривая

Моя цель — функция, которая принимает количество денег и количество дней и возвращает кортеж с номером дня и суммой денег за этот день.

Я знаю, что мне нужно использовать логарифмы какого-то типа, и я перепробовал почти все, что может обработать мой мозг. Я просматривал wolfram mathworld и эту формулу:

y = a + b ln x

Но мне это особо не помогает.

Подсказка или пример на PHP, Python или C# были бы хороши, но подойдет любой язык.

ПОЖАЛУЙСТА, дайте мне знать, если вам нужна дополнительная информация или если вопрос расплывчатый, я действительно хочу решить эту проблему. Благодарю вас!


person alexn    schedule 02.12.2010    source источник
comment
Алгоритм, к которому вы стремитесь, расплывчатый... если у вас есть максимум, который вы можете потратить, то линия будет линейной - начиная с 500 и уменьшаясь на 50 каждый день. (y = 500 - 50x) Если у вас нет минимума, то формула просто y = 500, так как вы вообще не обязаны тратить до последнего дня. Фактическая кривая будет находиться где-то между ними, но без точной суммы, которую вы должны тратить каждый день, на самом деле это невозможно построить.   -  person cdhowie    schedule 02.12.2010
comment
вам лучше задать этот вопрос на math.stackexchange.com   -  person    schedule 02.12.2010
comment
@cdhowie Да, я знаю, если это звучит расплывчато, это совсем не моя область. Будет ли проще, если мы скажем, что мне нужно тратить хотя бы 1 деньги в день? @Andreas Niedermair, вы, вероятно, правы, я подумал об этом, когда разместил свой вопрос, но, поскольку он относится к контексту программирования, я решил использовать SO.   -  person alexn    schedule 02.12.2010
comment
Если вам нужно потратить хотя бы 1, то граничными линиями будут y = 500 - 50x и y = 500 - x. У вас останется область между линиями, где могут быть фактические расходы.   -  person cdhowie    schedule 02.12.2010


Ответы (2)


Я не понимаю, зачем вам дистрибутив журналов. Параболический подойдет для получения нужной формы кривой:

 spend[day] = a day^2 + c 

куда:

a -> (6 * (TD - TA)) / (TD *(-1 - 3 * TD + 4 * TD^2))  


c -> -((1 + 3 * TD - 6*TA*TD + 2 * TD^2)/ (-1 - 3 * TD + 4 * TD^2))  

TA = Total Amount
TD = Total Days

При этом сумма, которую вы тратите в последний день, равна 1.

Для вашего примера значения: (500 ам, дней 20)

альтернативный текст

person Dr. belisarius    schedule 02.12.2010
comment
Спасибо, я определенно думаю, что это то, чего я хочу достичь. Позвольте мне попробовать это и вернуться. - person alexn; 02.12.2010
comment
Какую библиотеку для построения графиков вы используете? Выглядит аккуратно. - person alexn; 02.12.2010
comment
@alexn Это Mathematica от Wolfram. Красиво, но дорого :( wolfram.com - person Dr. belisarius; 02.12.2010
comment
@alexn: я думаю, что Maxima + Gnuplot могли бы достичь аналогичных результатов. - person cdhowie; 02.12.2010

Вы уверены, что то, что вы просите, не является линейным уравнением? Например, y=f(x)=-50x+500, а общее количество дней будет равно x, где y=0.

person Community    schedule 02.12.2010