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

一、公式推导

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

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

\begin{equation} v(\theta, \phi)=\sum_{n=0}^{\infty} \sum_{m=-n}^n c_n^m Y_n^m(\theta, \phi) \end{equation}

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

\begin{equation} Y_n^m(\theta, \phi)=\sqrt{\left(\frac{(2 n+1)(n-m) !}{4 \pi(n+m) !}\right)} P_n^m(\cos (\theta)) e^{j m \phi} \end{equation}

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

\begin{equation} c_n^m=\int_0^{2 \pi} \int_0^\pi \mathrm{d} \phi \mathrm{d} \theta \sin (\theta) r(\theta, \phi) Y_n^{m *} \end{equation}

其中星号表示共轭复数。以上是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中编程实现(实数形式的基函数),程序及注释如下:

 % 定义参数
    l = 3; % 角动量量子数
    m = -3; % 磁量子数

    % 创建球坐标网格
    theta = linspace(0, pi, 100);
    phi = linspace(0, 2*pi, 200);
    [Theta, Phi] = meshgrid(theta, phi);
    if l ~= 0
        % 计算Klm
        Klm = sqrt((2 * l + 1) * factorial(l - abs(m)) / (4 * pi * factorial(l + abs(m))));

        if m > 0
            % 计算勒让德多项式
            Plm1 = legendre(l,cos(Theta));
            Plm = reshape(Plm1(m + 1,:,:), size(Phi));
            Ylm = sqrt(2) .* Klm .* cos(m .* Phi) .* Plm;
        end

        if m < 0
            Plm1 = legendre(l,cos(Theta));
            Plm = reshape(Plm1(- m + 1,:,:), size(Phi));
            Ylm = sqrt(2) .* Klm .* sin(- m .* Phi) .* Plm;
        end

        if m == 0
            Klm = sqrt((2 * l + 1) * factorial(l - abs(m)) / (4 * pi * factorial(l + abs(m))));
            Plm1 = legendre(l,cos(Theta));
            Plm = reshape(Plm1(m + 1,:,:), size(Phi));
            Ylm = Klm .* Plm;
        end
        
        % 可视化
        R = abs(Ylm); % 球面谐波函数的幅度
        X = R .* sin(Theta) .* cos(Phi);
        Y = R .* sin(Theta) .* sin(Phi);
        Z = R .* cos(Theta);
        
        figure;
        surf(X, Y, Z, real(Ylm),'EdgeColor','none'); % 使用实部作为颜色映射
        title(['球面谐波函数 Y_', num2str(l), '^', num2str(m)]);
        xlabel('X');
        ylabel('Y');
        zlabel('Z');
        colormap('jet')
        colorbar;axis equal;
    else
        Ylm = 0.5 * sqrt(1 / pi);
        % 可视化
        R = abs(Ylm); % 球面谐波函数的幅度
        X = R .* sin(Theta) .* cos(Phi);
        Y = R .* sin(Theta) .* sin(Phi);
        Z = R .* cos(Theta);
        
        figure;
        surf(X, Y, Z,'EdgeColor','none'); % 使用实部作为颜色映射
        title(['球面谐波函数 Y_', num2str(l), '^', num2str(m)]);
        xlabel('X');
        ylabel('Y');
        zlabel('Z');
        colormap('jet')
        colorbar;axis equal;
    end

运行结果:

相关的Python程序链接:

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

理论链接:

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

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值