Быстрые вычисления
Мне необходимо много раз вычислять значение одной и той же функции. Функция задается как функция ячейки от значений соседних ячеек той же строки.
Вариант 1. Все возможные комбинации параметров функции занести в таблицу по строкам, а саму функцию скопировать по столбцу.
Вариант 2. Возможные комбинации параметров занести в двумерный массив, извлекать из него по одной строку, копировать ее на место ячеек содержащих параметры, из ячейки с функцией извлекать результат и заносить его в массив. Перейти к след. строке массива и т.д.
Вопрос - какой из двух вариантов более выигрышный в скорости?
В догонку - как отключить обновление значений ячеек на листе (чтобы изменения не отображались)?
И еще - будет ли изменятся при этом диаграмма, исходнные данные которой такие ячейки (их значение меняется, но на листе это не отображается)?
Спасибо.
Как ускорить вычисления в Excel?
Мне необходимо много раз вычислять значение одной и той же функции. Функция задается как функция ячейки от значений соседних ячеек той же строки.
Вариант 1. Все возможные комбинации параметров функции занести в таблицу по строкам, а саму функцию скопировать по столбцу.
Вариант 2. Возможные комбинации параметров занести в двумерный массив, извлекать из него по одной строку, копировать ее на место ячеек содержащих параметры, из ячейки с функцией извлекать результат и заносить его в массив. Перейти к след. строке массива и т.д.
Вопрос - какой из двух вариантов более выигрышный в скорости?
В догонку - как отключить обновление значений ячеек на листе (чтобы изменения не отображались)?
И еще - будет ли изменятся при этом диаграмма, исходнные данные которой такие ячейки (их значение меняется, но на листе это не отображается)?
Спасибо.
Если честно, то ни фига не понятно.
Каждая формула считается по-разному.
Зазипуй свой файл и закинь сюда, я погляжу и, возможно, смогу дать тебе какие-нибудь рекомендации (абстрактно трудно что-то посоветовать).
А автоматический пересчет включается/выключается так:
В меню Сервис/Параметры..., закладка "Вычисления"
(Tools/Options..., "Calculations").
Если честно, то ни фига не понятно.
Каждая формула считается по-разному.
Зазипуй свой файл и закинь сюда, я погляжу и, возможно, смогу дать тебе какие-нибудь рекомендации (абстрактно трудно что-то посоветовать).
А автоматический пересчет включается/выключается так:
В меню Сервис/Параметры..., закладка "Вычисления"
(Tools/Options..., "Calculations").
Разархивируй, запусти сначала макрос Refresh2, потом GA
(здесь значение вычисляется на листе популяция в ячейках С2:C97) а параметры в ячейках А2:B97. Вот я и думаю, может параметры загнать в массив двумерный (1 to 97, 1 to 3), по одной из него извлекать строку, подставлять в А2 (i,1) и B2 (i,2) а из C2 копировать значение назад в массив (i,3). Потом дальше с ним работать.
P.S. Прога реализует простейший генетический алгоритм - оптимизация двухпараметрической функции.
Разархивируй, запусти сначала макрос Refresh2, потом GA
(здесь значение вычисляется на листе популяция в ячейках С2:C97) а параметры в ячейках А2:B97. Вот я и думаю, может параметры загнать в массив двумерный (1 to 97, 1 to 3), по одной из него извлекать строку, подставлять в А2 (i,1) и B2 (i,2) а из C2 копировать значение назад в массив (i,3). Потом дальше с ним работать.
P.S. Прога реализует простейший генетический алгоритм - оптимизация двухпараметрической функции.
Запустил. И тот, и другой работают очень быстро (1400МГц, Эксель 97 (а не какой-нибудь тормозной 2000)).
Проглядел вскользь твой файл. Каких-то смертельных формул не нашел. Давай копаться дальше.
Такой возник вопрос: ты сознательно не используешь .ScreenUpdating ?
Запустил. И тот, и другой работают очень быстро (1400МГц, Эксель 97 (а не какой-нибудь тормозной 2000)).
Проглядел вскользь твой файл. Каких-то смертельных формул не нашел. Давай копаться дальше.
Такой возник вопрос: ты сознательно не используешь .ScreenUpdating ?
Для функции двух переменных все более-менее приемлимо. Вообще-то эти алгоритмы применяются для обучения нейронных сетей (см. вложение). А параметров там может быть несколько десятков (до 50). Во вложении пример расчета небольшой нейросети (три перцептрона). Вот тогда тормоза и начинаются.
По поводу .ScreenUpdating - предложение хорошее, вот только мне необходимо, чтобы обновлялись связанные диаграммы. Может это можно сделать отдельным оператором?
Вообще есть коммерческие продукты - Evolver, GeneHunter от Ward Systems Group. Они тоже выполнены как надстройки над Excel. Там все летает (правда там используются подключаемые библиотеки фукнций, но не может же быть такой значительной разницы)
Спасибо за помощь. Ты из Москвы?
Для функции двух переменных все более-менее приемлимо. Вообще-то эти алгоритмы применяются для обучения нейронных сетей (см. вложение). А параметров там может быть несколько десятков (до 50). Во вложении пример расчета небольшой нейросети (три перцептрона). Вот тогда тормоза и начинаются.
По поводу .ScreenUpdating - предложение хорошее, вот только мне необходимо, чтобы обновлялись связанные диаграммы. Может это можно сделать отдельным оператором?
Вообще есть коммерческие продукты - Evolver, GeneHunter от Ward Systems Group. Они тоже выполнены как надстройки над Excel. Там все летает (правда там используются подключаемые библиотеки фукнций, но не может же быть такой значительной разницы)
Спасибо за помощь. Ты из Москвы?
"обновлялись связанные диаграммы" - ты имеешь в виду, чтобы "мультик" видно было - как они меняются в процессе работы макроса? После окончания работы они, конечно, в любом случае перерисуются.
Из Москвы.
Вложение гляну чуток попозже, когда время будет.
"обновлялись связанные диаграммы" - ты имеешь в виду, чтобы "мультик" видно было - как они меняются в процессе работы макроса? После окончания работы они, конечно, в любом случае перерисуются.
Из Москвы.
Вложение гляну чуток попозже, когда время будет.
Глянул. Все три макроса работают в улет. Все же делай ScreenUpdating иногда - когда диаграммка меняется плавно - это все-таки мультик, а когда куча цифр мелькает - выглядит неважно. :)