Этот вопрос основан на вопросе об утечках памяти в Mathematica из-за внутреннего кэширования результатов промежуточных вычислений . Все это недокументировано, но важно для всех, кто выполняет вычисления с интенсивным использованием памяти.
Пытаясь понять логику внутреннего механизма кэширования, я обнаружил кое-что интересное. Учтите следующее:
$HistoryLength = 0;
(*dummy command for loading of the Root package*)
Root[# &, 1];
d = 13;
f[z_, i_] := Sum[(2 Mod[Floor[(i - 1)/2^k], 2] - 1) z^(d - k), {k, 0, d}];
(memLog = Flatten[
Table[Root[f[z, i], j]; {SessionTime[], MemoryInUse[]/1024.^2}, {j, 1,
d}, {i, 1, 2^d}], 1];) // Timing
pl1 = ListLinePlot[memLog,
FrameLabel -> {"SessionTime, sec", "MemoryInUse, Mb"}, PlotRange -> All,
Frame -> True, Axes -> False]
pl2 = ListLinePlot[memLog[[All, 2]],
FrameLabel -> {"Point", "MemoryInUse, Mb"}, PlotRange -> All, Frame -> True,
Axes -> False]
В fresh сессии ядра вывод на моей машине ( Mathematica 7.0.1 для Windows) всегда выглядит следующим образом:
Может ли кто-нибудь объяснить, почему происходит разрыв кривой вблизи точки с номером 8400?