2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Оптимизация программы в Mathematica
Сообщение15.03.2013, 13:20 


01/03/09
48
Здравствуйте.

Есть программа, написанная на Mathematica, и мне хотелось бы узнать, есть ли способы существенно увеличить скорость её работы.

Программа на самом деле устроена очень просто: я (можно сказать руками) ввёл ряд функций $f_1,f_2,...$, которые "иерархически" выражаются друг через друга - т.е. вторая как-то выражается через первую, например $f_2=f_1^2$, третья - через первую и вторую и т.д. По-существу всё, что требуется от программы - явно вычислять "старшие" функции по младшим посредством уравнений, которые я задал. При этом зависимость "старших" функций от младших всегда устроена довольно просто - это какая-то их алгебраическая комбинация, возможно с производными, например $f_3=f''_2+f'_1f_1^2$ и т.д. "Стартовая" функция $f_1$, тоже, в общем-то, не сложная. Но где-то, скажем, на пятидесятом шаге для $f_{50}$ получается уже весьма и весьма громоздкое выражение. Далее, всё устроено так, что в самом конце есть скажем $f_{100}$ про которую известно, что она должна выглядеть относительно просто. Поэтому после того как мы её вычислили по предыдущим, надо её ещё привести к познаваемому виду, что я делаю с помощью операции Simplify. Думаю что не менее половины всех трудов машины приходится именно на упрощение.

Итак, резюмируя. Я ввожу функцию $f_1$ (которую на самом деле не требуется менять, она всё время одна и та же) и хочу от программы получить $Simplify[f_{100}]$. Экспериментальное наблюдение, сделанное мной, подсказывает что в целях ускорения работы надо команду Simplify применять на каждом шаге, т.е. вместо $f_3=f''_2+f'_1f_1^2$ писать $f_3=Simplify[f''_2+f'_1f_1^2]$. Наверное это не общая ситуация, но в случае моего кода помогает. Да, и ещё одно замечание - на самом деле хочется не увеличить скорость подсчёта этой самой $f_{100}$, а вычислить этой программкой, скажем, $f_{200}$ за разумное время, но думаю что эти задачи более или менее эквивалентны.

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group