0

我正在为拟合例程编写程序,目前正在优化代码以加快计算速度。弱点是一部分,我必须计算大量的贝塞尔函数,大约需要 0.7 秒。在我的例子中,q 有 177 个条目,th 100 和 R 400。

  Js = zeros(numel(th),numel(q)); tR=sin(th')*R;
  for k = 1:numel(q)
  Js(:,k) = sum(tn.*besselj(0,q(k)*tR),2);
  end

我也尝试制作一个 3D-Matrix,但计算时间稍长。

[Q,T,RR]=meshgrid(q,sin(th),R);
Js1 = besselj(0,Q.*T.*RR);

所以,我想知道,有没有办法更快地计算这些贝塞尔函数?提前谢谢,库伊

4

1 回答 1

0

Wolfram显示了 Bessel 函数的一个特例,其中函数的第一个参数是0. 所以我们可以预先计算一些变量,比如sgn_cumkm2来简化计算:

n = 10;
k = 0 : n;
sgn_cum = ((-1 * 0.25) .^ k ./ cumprod([1 1:n]).^2).';
km2 = 2*k;

给定一个列向量z,我们可以得到 Bessel 函数:

bsxfun(@power,z,km2 ) * sgn_cum

例子:

z= (1:5).';
result = bsxfun(@power,z,km2 ) * sgn_cum;

我们可以减少n以加快计算速度,但代价是降低精度。

于 2016-08-04T05:21:19.210 回答