Генерация диапазона значений случайной функции

Автор badger2, 30 января 2012, 04:09

0 Пользователи и 1 гость просматривают эту тему.

badger2

Если кто знает - подскажите, пожалуйста, как в Calc можно сделать следующее:
есть ячейка, к примеру, A1 со случайной величиной [ =RAND() ]
есть ячейка А2, в кототорой вычисляется некая заданная функция от ячейки А1
в ячейке А3 - функция от А2
и т.д.
в ячейке Аn - от Аn-1
также у нас есть диапазон пустых ячеек - к примеру B1:B100
Вопрос следующий: как заполнить этот диапазон значениями ячейки An, которые получаются при разных значениях ячейки A1?

VlhOwn

#1
Вот так вот прямо именно в  этих столбцах A и B - затруднительно.

1. Растянуть диапазон A1:An до A1:CVn,  CV соответствует 100-му столбцу.
2. Заполнить первую строку различными исходными значениями.
3. В первой ячейке 101-го столбца ввести формулу =TRANSPOSE(An:CVn). (TRANSPOSE  транспонирует строку в столбец)
4. Скрыть столбцы со 2-го по 100-й.

В результате получите видимыми 2 столбца:
- значения функций для первого значения A1
- значения последней функции для разных значений A1

Предполагаю, что Вам не  это нужно, но ответил на заданный вопрос.
Теперь, когда Вы видите, как сделать, продумайте структуру данных и получите желаемый результат.

P.S. Если Вам нужно заполнить диапазон B1:B100 единожды, можете подставлять значения в A1, копировать значение An, и затем вставлять его специальной вставкой (только значения) в соответствующую позицию диапазона B1:B100.

Hasim

Это не те ответы, ИМХО.
Я понял так.
В ячейке А1 формула =RAND()
В ячейках А2:A30 для A(n) формулы вида =A(n-1)*3+ A(n-1)^2 (что-то такое)
В ячейке А1 значение меняется и меняются значения в других ячейках А2:A30
Мы 100 раз поменяли значение в А1.
Нужно все 100 полученных при этом значения например в ячейке А15 записать в В1:В100.
В ячейках В1:В100 нужны 100 значений ячейки А15 для разных значений А1 = RAND()
???

Hasim

Цитата: Hasim от 30 января 2012, 12:34Мы 100 раз поменяли значение в А1.
Неправильно написал. Не мы поменяли, а оно поменялось само из-за RAND(). Нужно считать сколько раз оно поменялось.
Я так понял, что диапазон В1:В100 нужно заполнять автоматически, а не вручную.

VlhOwn

Ничто не мешает в предложенной схеме заполнить всю первую строку вызовами RAND() - это будет соответствовать заданному количеству случайных величин.

Если же перенос значений из An в столбец B необходим при каждом пересчете листа, то это уже несколько иная задача.

badger2

Hasim верно понял задачу. Надо автоматически заполнить В1:В100, и чтоб при каждом вычислении ячейки Вi генерировалась новая случайная величина из А1. Вариант VlhOwn, вообще говоря, решает данную задачу, но
1. это накладно - множить каждый раз ячейку со случайной величиной и все ячейки с функциями
2. решение становится в разы более громоздким, если функция в An зависит от нескольких ячеек со случайными величинами
Так что если кто-нибудь все же знает, есть в ли в Calc'е стандартные средства для таких нудж - прошу поделиться здесь

Hasim

Цитата: badger2 от 30 января 2012, 17:36чтоб при каждом вычислении ячейки Вi
Не понимаю. Как это делается?

badger2

не так сформулировал. надо так: при вычислении каждой ячейки Bi генерировалась новая случайная величина из А1
а как это сделать я и сам пытаюсь выяснить

JohnSUN

Да, в принципе, так же, как фиксируется дата-время внесения значения: два вложенных IF() и включенная опция Итерации в параметрах Calc-Вычисления.
Вообще-то, и это решение довольно накладное. Я бы все-таки заполнил весь столбец результатов макросом: в цикле нужное количество раз повторил бы вычисления, накапливая их в массиве, и одним махом - через .setDataArray() - заполнил бы весь столбец.

У решения во вложении есть несколько недостатков. И главный из них - во время пересчета листа генерируется и заполняется по два значения за один раз. Чтобы этого избежать, повторяющиеся результаты не заносятся в колонку B. Но это приводит к другой ошибке: если вычисления дадут серию одинаковых значений, мы получим только первое из них.

[вложение удалено Администратором]
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Hasim

Не понял как сделано и работает в ячейке Е1 список "сбросить" и "расчитать".
Можно подробно объяснить?

JohnSUN

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

badger2

Вот написал макрос для автозаполнения диапазона значениями. Берется первая ячейка выделенного диапазона (в нашем случае надо выделять диапазон В1:В100) и ее значение (в нашем случае в этой первой ячейке - В1 - следует указать ссылку на Аn: '=An') копируется во все остальные ячейки этого диапазона, причем после каждого копирования все случайные величины документа пересчитываются

Hasim


JohnSUN

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне