Здравствуйте.
Есть программа, написанная на Mathematica, и мне хотелось бы узнать, есть ли способы существенно увеличить скорость её работы.
Программа на самом деле устроена очень просто: я (можно сказать руками) ввёл ряд функций

, которые "иерархически" выражаются друг через друга - т.е. вторая как-то выражается через первую, например

, третья - через первую и вторую и т.д. По-существу всё, что требуется от программы - явно вычислять "старшие" функции по младшим посредством уравнений, которые я задал. При этом зависимость "старших" функций от младших всегда устроена довольно просто - это какая-то их алгебраическая комбинация, возможно с производными, например

и т.д. "Стартовая" функция

, тоже, в общем-то, не сложная. Но где-то, скажем, на пятидесятом шаге для

получается уже весьма и весьма громоздкое выражение. Далее, всё устроено так, что в самом конце есть скажем

про которую известно, что она должна выглядеть относительно просто. Поэтому после того как мы её вычислили по предыдущим, надо её ещё привести к познаваемому виду, что я делаю с помощью операции Simplify. Думаю что не менее половины всех трудов машины приходится именно на упрощение.
Итак, резюмируя. Я ввожу функцию

(которую на самом деле не требуется менять, она всё время одна и та же) и хочу от программы получить
![$Simplify[f_{100}]$ $Simplify[f_{100}]$](https://dxdy-01.korotkov.co.uk/f/8/1/9/819c5f16a9b56092ac466b6953697e0a82.png)
. Экспериментальное наблюдение, сделанное мной, подсказывает что в целях ускорения работы надо команду Simplify применять на каждом шаге, т.е. вместо

писать
![$f_3=Simplify[f''_2+f'_1f_1^2]$ $f_3=Simplify[f''_2+f'_1f_1^2]$](https://dxdy-01.korotkov.co.uk/f/8/6/4/864c2282f6c64b9ff87d6547937b668382.png)
. Наверное это не общая ситуация, но в случае моего кода помогает. Да, и ещё одно замечание - на самом деле хочется не увеличить скорость подсчёта этой самой

, а вычислить этой программкой, скажем,

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