如何在Mathematica中提高此递归代码的性能

时间:2018-11-13 19:55:53

标签: recursion wolfram-mathematica

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}]; 

此代码用于计算每个像素到点(0,0)的距离r,然后按如下方式估算径向多项式:

出于准确性,我将使用递归版本:

imagesizepmax增加时,时间将变得无法接受。因此,我想问一下是否可以使用其他方法的编译来加快速度,例如imagesize为256,而pmax为120,则时间约为10秒。 在我的代码中,我还使用备忘录来存储评估期间的值,该值将在以后使用。

0 个答案:

没有答案