Попробуйте
max=24;
Timing[N[
Sum[1/(E^((i^2+j^2+k^2-3)/500)-1),{i,2,max},{j,1,max},{k,1,max}]+
Sum[1/(E^((i^2+j^2+k^2-3)/500)-1),{i,1,1},{j,2,max},{k,1,max}]+
Sum[1/(E^((i^2+j^2+k^2-3)/500)-1),{i,1,1},{j,1,1},{k,2,max}]]]
, который быстро возвращает
{0.143978,14330.9}
и
max=25;
Timing[N[
Sum[1/(E^((i^2+j^2+k^2-3)/500)-1),{i,2,max},{j,1,max},{k,1,max}]+
Sum[1/(E^((i^2+j^2+k^2-3)/500)-1),{i,1,1},{j,2,max},{k,1,max}]+
Sum[1/(E^((i^2+j^2+k^2-3)/500)-1),{i,1,1},{j,1,1},{k,2,max}]]]
, который быстро возвращает
{0.156976,14636.6}
и даже
max=50;
Timing[N[
Sum[1/(E^((i^2+j^2+k^2-3)/500)-1),{i,2,max},{j,1,max},{k,1,max}]+
Sum[1/(E^((i^2+j^2+k^2-3)/500)-1),{i,1,1},{j,2,max},{k,1,max}]+
Sum[1/(E^((i^2+j^2+k^2-3)/500)-1),{i,1,1},{j,1,1},{k,2,max}]]]
, который быстро возвращает
{1.36679,16932.5}
Изменение вашего кода таким образом позволяет избежать сотен или тысяч If
тестов, которые почти всегда приводят к True
. И он потенциально использует алгоритмы Symboli c для поиска этих результатов вместо необходимости суммировать каждое из отдельных значений.
Сравните эти результаты и время, если вы замените Sum
на NSum
и если вы замените /500
на *.002
Чтобы попытаться угадать, почему времена, которые вы видите, внезапно меняются при увеличении границы, другие люди замечали в прошлом, что кажется, что есть некоторые жестко закодированные границы внутри некоторых из численные алгоритмы и когда диапазон достаточно мал, Mathematica будет использовать один алгоритм, но когда диапазон достаточно велик, чтобы превысить эту границу, он переключится на другой и потенциально более медленный алгоритм. Трудно или невозможно точно знать, почему вы видите это изменение, не имея возможности проверить решения, принимаемые внутри алгоритмов, и никто за пределами Wolfram не увидит эту информацию.
Чтобы получить более точное числовое значение, вы можете измените N[...]
на N[...,64]
или N[...,256]
или полностью исключите N
и получите большой сложный точный результат c.
Будьте осторожны с этим, тщательно проверяйте результаты, чтобы убедиться, что Я не сделал никаких ошибок. И отчасти это только догадки с моей стороны.