|
|
|
Excel: Разбить число на N случайных составляющих...
|
|||
|---|---|---|---|
|
#18+
Есть ли в Excel такая функция? Если нет, то нужен алгоритм, который получает на входе 3 числа (скажем 10000, 21, 10%) и разбивает первое число на N (второй аргумент) случайных составляющих так, чтобы каждая из них отличалась от среднего не более чем на Y%(третий аргумент)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2005, 21:09:58 |
|
||
|
Excel: Разбить число на N случайных составляющих...
|
|||
|---|---|---|---|
|
#18+
kanalexЕсть ли в Excel такая функция? Скорее всего, нет. To kanalexнужен алгоритм, который получает на входе 3 числа (скажем 10000, 21, 10%) и разбивает первое число на N (второй аргумент) случайных составляющих так, чтобы каждая из них отличалась от среднего не более чем на Y%(третий аргумент)..."Не перекладывайте с больной головы на здоровые!" Это Вам задали такое задание? Следуйте от постановки задачи: в ней есть 50% ответа. 1. Получите среднее ("...отличалась от среднего..."). 2. Используя ДСЧ, получите N-1 случайное число с Y-отклонением. 3. N-е число= разность исходного и суммы первых N-1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2005, 12:31:36 |
|
||
|
Excel: Разбить число на N случайных составляющих...
|
|||
|---|---|---|---|
|
#18+
Processor "Не перекладывайте с больной головы на здоровые!" Это Вам задали такое задание? Следуйте от постановки задачи: в ней есть 50% ответа. 1. Получите среднее ("...отличалась от среднего..."). 2. Используя ДСЧ, получите N-1 случайное число с Y-отклонением. 3. N-е число= разность исходного и суммы первых N-1. Голова действительно больная:), а задание не задали - я его сам себе придумал... Есть, конечно, и практическое применение. Задача не так проста, как кажется на первый взгляд.:( По предложенному Вами алгоритму мы действительно получаем N-1 случайных чисел удовлетворяющих условиям задачи, но вот последнее число с большой долей вероятности за эти пределы вылетает:( И дело тут в разбросе чисел, которые возвращает стандартный ДСЧ. Представьте себе, что все эти числа получились близкими к 1... В итоге набежит Сумма большая, чем нам нужно получить и замыкающее число будет вовсе отрицательным... Идея понятна? Что с этим делать? Я не знаю:( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2005, 14:57:44 |
|
||
|
Excel: Разбить число на N случайных составляющих...
|
|||
|---|---|---|---|
|
#18+
kanalexИдея понятна? Что с этим делать? Я не знаю:(1. Идея понятна. 2. Изложенные Вами страхи базируются на недостаточном опыте работы со случайными числами и их распределениями. Вы утверждаете "Сумма большая, чем нам нужно...". Я утверждаю:"Сумма меньшая, чем нам нужно...". И мы будем оба правы с вероятностью 0,5. Поскольку "задание не задали - я его сам себе придумал", Вы же должны предложить критерии проверки результата при разных законах распределения случайных чисел. В зависимости от условий задачи следует оценить результат неслучайности генерирования случайных чисел. Подробнее (и гораздо увлекательнее) об этом написал Д.Кнут в "Искусство программирования для ЭВМ", т.2: "Получисленные алгоритмы", гл.3: "Случайные числа" (примерно 180 страниц). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2005, 17:34:15 |
|
||
|
Excel: Разбить число на N случайных составляющих...
|
|||
|---|---|---|---|
|
#18+
Сгенерировать N чисел удовлетворяющих распределению, посчитать сумму и отнормировать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2005, 17:56:20 |
|
||
|
Excel: Разбить число на N случайных составляющих...
|
|||
|---|---|---|---|
|
#18+
f2fСгенерировать N чисел удовлетворяющих распределению, посчитать сумму и отнормироватьПряник, и без Кнута! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2005, 20:08:58 |
|
||
|
Excel: Разбить число на N случайных составляющих...
|
|||
|---|---|---|---|
|
#18+
ProcessorПодробнее (и гораздо увлекательнее) об этом написал Д.Кнут в "Искусство программирования для ЭВМ", т.2: "Получисленные алгоритмы", гл.3: "Случайные числа" (примерно 180 страниц). :) Странное дело! Именно этим и занимался последние несколько часов... Но, увы:( Уже порядком подзабыл математику, а потому изучение теории грозит затянуться на долгие дни и недели.:( Поэтому предлагаю перевести разговор в практическую плоскость. Рекомендации f2f немного более понятны, за исключением термина "отнормировать". Объясните, пожалуйста, что имеется ввиду. А пока набросал такой вот код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. Вообщем он дает достаточно близкие результаты к тому, что хотелось бы видеть...и для конкретной задачи вполне подойдет. Но, все-таки, хотелось бы разобраться до конца с поставленной задачей:) Можно ли подправить представленный код так, чтобы не вылетать (хоть и изредка) за пределы установленного диапазона? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2005, 03:12:29 |
|
||
|
Excel: Разбить число на N случайных составляющих...
|
|||
|---|---|---|---|
|
#18+
Тот же алгоритм реализованный на листе Excel в прикрепленном файле. Так немного нагляднее выглядят результаты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2005, 03:18:39 |
|
||
|
Excel: Разбить число на N случайных составляющих...
|
|||
|---|---|---|---|
|
#18+
kanalexтакой вот код... дает достаточно близкие результаты к тому, что хотелось бы видеть...и для конкретной задачи вполне подойдет.Если задача рАзовая - закройте глаза и примите результат к исполнению. Если надеетесь работать и дальше со случайными числами, придётся всё же уделить несколько часов :) теории, тряхнуть стариной и вспомнить математику :), чтобы остальным не было "мучительно больно" читать вопрос, что такое "отнормировать". Неужели после чтения Кнута :) "в последние несколько часов" у вас не возникло ощущение увлекательности такого чтения? А зря! Тогда бы не было на листе Excel'а формул типа: случ.число=ОКРУГЛ(СЛЧИС();2) kanalexНо, все-таки, хотелось бы разобраться до конца с поставленной задачей:)"Хотелось бы...", "хочется" или "надо"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2005, 12:10:51 |
|
||
|
Excel: Разбить число на N случайных составляющих...
|
|||
|---|---|---|---|
|
#18+
Что ж... Задача решилась следующим образом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. Конечно можно задать условия, при которых решение найдено не будет..., т.ч. будьте внимательны при вводе аргументов - особенно отклонений от среднего. Процедура ведет себя особенно плохо, когда отклонения от среднего сильно отличаются друг от друга. Вообщем-то это и понятно. Лично мне не очень нравится способ, которым задача решилась, но это субъективно. Не люблю я итерации:), т.ч. вопрос о возможном другом - более изящном решении остается открытым. Всем спасибо! Благодарности Professor - за исчерпывающие объяснения, ну и Кнуту, конечно же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2005, 23:53:02 |
|
||
|
Excel: Разбить число на N случайных составляющих...
|
|||
|---|---|---|---|
|
#18+
KanalexБлагодарности Professor - за исчерпывающие объяснения, ну и Кнуту, конечно же.1. Неверная последовательность в перечислении. 2. Ироничное Professor, присвоенное мне моими коллегами, как обычно - в неформальной обстановке, довольно быстро трансформировалось ими же в уважительное Processor более 20 лет назад. Этот ник и использую в конференциях (то-бишь "форумах"). Не обижаюсь :-) 3. Любое число можно рассматривать как случайное только в совокупности с другими. "Степень" случайности (в смысле непохожести) возрастает с увеличением разрядной сетки в представлении числа, если числа выдаёт программный ДСЧ. (и об этом так увлекательно рассказывает Д.Кнут). Из этих позиций я критиковал Вашу строчку "случ.число=ОКРУГЛ(СЛЧИС();2)". Округление до заданной точности надо производить на заключительном этапе, если это диктуется требованиями к результатам. Например, если Вы должны получить рубли с копейками. Но тут без итераций не обойтись - бухгалтерия обязана получить сумму с точностью "до копейки"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2005, 12:59:51 |
|
||
|
Excel: Разбить число на N случайных составляющих...
|
|||
|---|---|---|---|
|
#18+
Processor 2. Ироничное Professor, присвоенное мне моими коллегами, как обычно - в неформальной обстановке, довольно быстро трансформировалось ими же в уважительное Processor более 20 лет назад. Этот ник и использую в конференциях (то-бишь "форумах"). Не обижаюсь :-) Значит попал в 10-ку:) Я присоединюсь к Вашим коллегам - отныне буду обращаться к Вам Processor. Processor 3. Любое число можно рассматривать как случайное только в совокупности с другими. "Степень" случайности (в смысле непохожести) возрастает с увеличением разрядной сетки в представлении числа, если числа выдаёт программный ДСЧ. (и об этом так увлекательно рассказывает Д.Кнут). Из этих позиций я критиковал Вашу строчку "случ.число=ОКРУГЛ(СЛЧИС();2)". Округление до заданной точности надо производить на заключительном этапе, если это диктуется требованиями к результатам. Например, если Вы должны получить рубли с копейками. Но тут без итераций не обойтись - бухгалтерия обязана получить сумму с точностью "до копейки"... Вообщем согласен с критикой. Единственным оправданием мне может служить то, что в том примере я имел ввиду целое число процентов, которое и использовал в дальнейших вычислениях.... Признаюсь - был не прав:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 00:25:19 |
|
||
|
|

start [/forum/topic.php?fid=61&fpage=295&tid=2183456]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 352ms |

| 0 / 0 |
