球谐函数数值计算

                     

贡献者: 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

                     

© 小时科技 保留一切权利