球谐函数数值计算

                     

贡献者: addis

预备知识 球谐函数,Matlab 的函数

   目前 Matlab 并不直接提供球谐函数,而只提供连带勒让德函数(legendre)。以下给出 Matlab 中计算球谐函数的程序。

代码 1:SphHarm.m
% 计算球谐函数 Y_{lm}
% 使用 Condon–Shortley 相位(和 Mathematica 相同)
% l, m 必须是整数标量
% 角度 Th 和 Ph 可以是任意实数
% Th 和 Ph 可以是矩阵, 尺寸必须相同, 输出 Y_lm 的尺寸也相同
function Y_lm = SphHarm(l,m,Th,Ph)
mark = mod(Th,2*pi) > pi;
Ph(mark) = Ph(mark) + pi;
if abs(m) > l, error('m > l'); end
Sign = sign(m);
m = abs(m);
P_lm = legendre(l,cos(Th(:)));
P_lm = P_lm(m+1,:);
if (~all(isfinite(P_lm)))
    error('l too large');
end

% 归一化因子
Y_lm = zeros(size(Th));
fac_d_fac = prod(l-m+1:l+m);
if (isinf(fac_d_fac))
    error('overflow!');
end
N_lm = sqrt((2*l+1)./(4*pi*fac_d_fac));
if Sign >= 0
    Y_lm(:) = N_lm * P_lm' .* exp(1i*m*Ph(:));
else
    Y_lm(:) = (-1)^m * N_lm * P_lm' .* exp(-1i*m*Ph(:));
end
end


致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 20 元,我们一周就能脱离亏损, 并在接下来的一年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

                     

友情链接: 超理论坛 | ©小时科技 保留一切权利