当前位置:   article > 正文

球面谐波函数 (Spherical harmonic function)分析实际颗粒形状公式推导及数值实现 Part 1_球面谐波域

球面谐波域

一、公式推导

        球面谐波函数是一组定义在单位球上的基函数,是傅里叶展开式的一种;球面谐波函数最早应用于电磁场、核物理学、行星重力场计算,Garboczi (2002)最早基于该方法分析了混凝土集料的颗粒形状特性;展现出其对颗粒形状解析表征的强大能力。

         球面谐波函数对颗粒形状分析主要原理是将颗粒的形状视作一个三维的解析表达式,并能够用球面谐波基函数的线性组合进行展开,如下式表示:

v(θ,ϕ)=n=0m=nncnmYnm(θ,ϕ)

其中,n表示阶数,m表示次数;$Y_n^m$表示球面谐波基函数,表达式如下:

Ynm(θ,ϕ)=((2n+1)(nm)!4π(n+m)!)Pnm(cos(θ))ejmϕ

$P_n^m$表示关联勒让德函数,系数的表达式如下:

cnm=02π0πdϕdθsin(θ)r(θ,ϕ)Ynm

其中星号表示共轭复数。以上是Garboczi在该方法的原始文献中提出的系数求解方法;后续的研究对此求解方法进行了改进(Zhou Bo等, 2015,香港城市大学),$P_n^m$的表达式可以写成:

其中,p_n(x)表达式如下:

        接下来是系数的计算,将要分析的颗粒的表面进行参数化,映射到一个单位球体中(接下来的文章中再介绍),坐标用V表示,如下:

      那么根据第一个式子,我们就能得到一个线性方程组,注意这个方程组中是将Y_n^m转化成一个行向量,依次计算(m,n)为(0,0)、(-1,1)、(0,1) ......时候的值,如下所示:

这样只要选的原始颗粒上的坐标个数i足够多大于(n+1)^2,就能得到确定的系数值。

二、球面谐波基函数Y_n^m的数值实现

            数值实现时,一般采用分段的形式将球面谐波函数写出:

n=0时候,Y_n^m等于:

            在Matlab中编程实现(实数形式的基函数),程序及注释如下:

  1. % 定义参数
  2. l = 3; % 角动量量子数
  3. m = -3; % 磁量子数
  4. % 创建球坐标网格
  5. theta = linspace(0, pi, 100);
  6. phi = linspace(0, 2*pi, 200);
  7. [Theta, Phi] = meshgrid(theta, phi);
  8. if l ~= 0
  9. % 计算Klm
  10. Klm = sqrt((2 * l + 1) * factorial(l - abs(m)) / (4 * pi * factorial(l + abs(m))));
  11. if m > 0
  12. % 计算勒让德多项式
  13. Plm1 = legendre(l,cos(Theta));
  14. Plm = reshape(Plm1(m + 1,:,:), size(Phi));
  15. Ylm = sqrt(2) .* Klm .* cos(m .* Phi) .* Plm;
  16. end
  17. if m < 0
  18. Plm1 = legendre(l,cos(Theta));
  19. Plm = reshape(Plm1(- m + 1,:,:), size(Phi));
  20. Ylm = sqrt(2) .* Klm .* sin(- m .* Phi) .* Plm;
  21. end
  22. if m == 0
  23. Klm = sqrt((2 * l + 1) * factorial(l - abs(m)) / (4 * pi * factorial(l + abs(m))));
  24. Plm1 = legendre(l,cos(Theta));
  25. Plm = reshape(Plm1(m + 1,:,:), size(Phi));
  26. Ylm = Klm .* Plm;
  27. end
  28. % 可视化
  29. R = abs(Ylm); % 球面谐波函数的幅度
  30. X = R .* sin(Theta) .* cos(Phi);
  31. Y = R .* sin(Theta) .* sin(Phi);
  32. Z = R .* cos(Theta);
  33. figure;
  34. surf(X, Y, Z, real(Ylm),'EdgeColor','none'); % 使用实部作为颜色映射
  35. title(['球面谐波函数 Y_', num2str(l), '^', num2str(m)]);
  36. xlabel('X');
  37. ylabel('Y');
  38. zlabel('Z');
  39. colormap('jet')
  40. colorbar;axis equal;
  41. else
  42. Ylm = 0.5 * sqrt(1 / pi);
  43. % 可视化
  44. R = abs(Ylm); % 球面谐波函数的幅度
  45. X = R .* sin(Theta) .* cos(Phi);
  46. Y = R .* sin(Theta) .* sin(Phi);
  47. Z = R .* cos(Theta);
  48. figure;
  49. surf(X, Y, Z,'EdgeColor','none'); % 使用实部作为颜色映射
  50. title(['球面谐波函数 Y_', num2str(l), '^', num2str(m)]);
  51. xlabel('X');
  52. ylabel('Y');
  53. zlabel('Z');
  54. colormap('jet')
  55. colorbar;axis equal;
  56. end

运行结果:

相关的Python程序链接:

https://scipython.com/blog/visualizing-the-real-forms-of-the-spherical-harmonics/

理论链接:

https://mrtrix.readthedocs.io/en/latest/concepts/spherical_harmonics.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/126558
推荐阅读
相关标签
  

闽ICP备14008679号