как улучшить производительность этого кода рекурсии в Mathematica - PullRequest
0 голосов
/ 13 ноября 2018
Clear[r, re, p, pmax, delta, imagesize, delta]
ClearSystemCache[]
re[0, r_] := Sqrt[8/Pi]*((1 - r)/r)^(1/4)*1; 
re[1, r_] := Sqrt[8/Pi]*((1 - r)/r)^(1/4)*-1*2*(1 - 2*r); 
re[p_, r_] := re[p, r] = Sqrt[8/Pi]*((1 - r)/r)^(1/4)*(-1)^p*(re[1, r]*re[p - 1, r] - re[p - 2, r]); 
imagesize = 32; 
pmax = 10; 
delta = 2/imagesize; 
Table[r = Sqrt[x^2 + y^2]; re[pmax, r], {x, -1 + delta/2, 1 - delta/2, delta}, {y, 1 - delta/2, -1 + delta/2, -delta}]; 

этот код предназначен для вычисления расстояния r от каждого пикселя до точки (0,0), а затем для оценки радиального полинома, как показано ниже:

для точности, я буду использовать рекурсивную версию:

.

Когда imagesize и pmax увеличатся, время станет неприемлемым. Итак, я бы спросил, можем ли мы использовать другие методы компиляции для ускорения, например, для imagesize равно 256 и pmax равно 120, время будет около 10 секунд. В моем коде я также использую памятку для сохранения значения во время оценки, которое я буду использовать в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...