🍍Python数值和符号算法计算及3D视图物理数学波形方程

关键词

Python | 物理 | 方程式 | 数值计算 | 符号计算 | 3D 三维 | 1D 一维 | 算法 | 二分算法 | 牛顿-拉夫森算法 | 最小二乘法 | 拟合 | 傅里叶变换 | 小波分析 | 主成分分析 PCA | 时空相关性 | 分形维数 | 常微分方程 | 龙格-库塔法 | 振荡器 | 谐振子 | 动画 | Verlet积分 | 轨迹 | 波形方程 | 流体力学 | 偏微分方程 | 蛙跳算法 | 摩擦力 | 2D二维 | 振动膜 | Lax-Wendroff 法 | 孤波 | 正弦-戈登方程 | 纳维-斯托克斯方程 | 电磁 | 拉普拉斯方程 | 泊松方程 | 有限差分 | 极坐标图 | 电荷电势电场 | 时域 | 麦克斯韦方程 | 洛伦兹场 | 薛定谔 | 积分方程 | 量子力学 | 龙格-库塔法

🏈page指点迷津 | Brief

要点

  1. Python数值和符号计算及3D可视化以下物理方程:

    1. 物理数学方程分析:二分算法和牛顿-拉夫森算法解方程根。最小二乘法拟合方程和数据。短期傅里叶变换和小波分析非平稳信号。使用主成分分析复杂和大型数据集,提取时空相关性,分形维数测定。

    2. 非线性震动常微分方程:四阶龙格-库塔法求解和绘制受迫振荡器常微分方程。符合计算谐振子解。计算方形台球内的轨迹并生成动画结果。二阶Verlet积分算法求解射弹的轨迹。求解天王星和海王星的轨道及其相互作用。

    3. 波形方程和流体力学偏微分方程:蛙跳算法求解波动方程。解具有摩擦力的悬链线波浪方程。计算二维波的解析解。数值求解振动膜的波动方程。使用 Lax-Wendroff 法解平流方程。解一维孤波 KdV 方程和绘制动画结果。解二维孤波正弦-戈登方程。解三种流体状态下纳维-斯托克斯方程。

    4. 电磁拉普拉斯方程和泊松方程转换为有限差分方程:解三角形导体内的拉普拉斯方程并绘制图形。创建极坐标图并绘图。计算电荷电势并绘制电场图形。3D图形确定导电平面电荷电场。可视化电荷的电子场线及其图像。时域有限差分解不同方向波麦克斯韦方程组并绘制结果图。解电报传输波形方程并绘制动画结果。洛伦兹场计算和绘图。视觉效果观察电荷运动。计算薄膜反射和透射光的强度分布和光谱。

    5. 量子力学薛定谔积分方程:四阶龙格-库塔法解一维谐振子波函数的薛定谔方程。符号计算求解一维谐振子波函数的薛定谔方程。计算求解任意势的薛定谔方程。使用努梅罗夫算法数值求解薛定谔方程的束缚态。解动量空间中 Delta 壳势的束缚态。模拟射线自发衰减并触发盖革计数器声音。解勒让德多项式常微分方程并使用四阶龙格-库塔法绘制结果图形。使用四阶龙格-库塔法求解氢的薛定谔方程并计算径向密度。有限差分算法求解瞬态薛定谔方程。动画可视化和计算谐振子内波包运动。计算和动画绘制谐振子带电粒子的波包。计算散射并评估球面贝塞尔和诺依曼函数。求解方形台球桌上波包运动的瞬态薛定谔方程。计算规则库仑散射波函数。计算谐振子的相干格劳伯态并绘制动画结果。符号计算氢的超精细分裂。数值计算纠缠量子态的哈密顿量、特征值和特征向量。线性代数构数值计算夸克的对称群算子的矩阵。使用大都会算法模拟经典轨迹的变化,使用费曼路径积分确定基态概率。

Python符号和数值计算球谐函数示例

球谐函数是数学和物理学中用来描述各种现象的强大工具。 它们可用于模拟物理现象,例如声波、传热,甚至量子系统,并且每当您在球坐标中处理偏微分方程时,它们就会出现。 在此,我们将探讨什么是球谐函数、它们最重要的属性、它们的工作原理以及它们为何如此有用。 最后,我们将了解如何在 Python 中以数字和符号方式使用它们。 我们将为这些函数创建我们自己的可视化,以便您可以自己使用它们。

球谐函数是根据球体上的角坐标(纬度和经度)定义的,并且具有以下属性:它们是拉普拉斯算子的角部分的本征函数。在球坐标中,拉普拉斯算子应用于函数 𝑓 时为

2f=1r2r2(rf)+1r2sinθθ(sinθfθ)+1r2sin2θ2fφ2L2f \nabla^2 f=\frac{1}{r} \frac{\partial^2}{\partial r^2}(r f)+\underbrace{\frac{1}{r^2 \sin \theta} \frac{\partial}{\partial \theta}\left(\sin \theta \frac{\partial f}{\partial \theta}\right)+\frac{1}{r^2 \sin ^2 \theta} \frac{\partial^2 f}{\partial \varphi^2}}_{L^2 f}

其中θ\theta是极角,φ\varphi是方位角。所以拉普拉斯自然地分裂成径向部分和角度部分(L2)\left(L^2\right)。球谐函数是拉普拉斯算子的角部分的本征函数。 这意味着当拉普拉斯算子的角度部分应用于球谐函数时,结果是原始函数的标量倍数:

L2Ylm(θ,φ)=l(l+1)Ylm(θ,φ) L^2 Y_{l m}(\theta, \varphi)=-l(l+1) Y_{l m}(\theta, \varphi)

其中L2L^2是拉普拉斯算子的角度部分,Ylm(θ,φ)Y_{l m}(\theta, \varphi)是1次、m阶的球谐函数,l(l+1)-l(l+1) 是函数的特征值。

球谐函数的正交性表明,如果两个球谐函数的次数和阶次不相等,则两个球谐函数的乘积在球表面上的积分等于零。 这与正弦和余弦也具有相同的性质。形式上,球谐函数的正交性可以表示为:

θ=0πφ=02πYlmYlmdΩ=δllδmm\int_{\theta=0}^\pi \int_{\varphi=0}^{2 \pi} Y_{l m} Y_{l^{\prime} m^{\prime}}^* d \Omega=\delta_{l l^{\prime}} \delta_{m m^{\prime}}

其中 δmn\delta_{m n} 是克罗内克增量,如果 m=nm=n 则为 1,否则为 0,dΩ=sinθdθdφd \Omega=\sin \theta d \theta d \varphi 是积分的积分度量球体的表面。请注意,许多球谐函数都是复数,这就是公式中存在共轭星形的原因。

符号计算

 from sympy import *
 ​
 θ, φ = symbols(r"\theta, \phi")
 l, m = symbols("l, m", integer=True)

球谐函数可以通过函数 Ynm 访问。在参数列表中,l 排在第一位,m 排在第二位。角度的顺序是(θ,φ) (\theta, \varphi)

 Y = Ynm(l, m, θ, φ)

球谐函数可以用三角函数来表示。我们可以使用 SymPy 轻松列出它们,在本例中,最多 𝑙=3:

 for l_ in range(3):
     for m_ in range(0, l_+1):
         Y = Ynm(l_, m_, θ, φ)
         display(
             Eq(
                 Y, Y.rewrite(cos)
             )
         )

Y00(θ,ϕ)=12πY10(θ,ϕ)=3cos(θ)2πY11(θ,ϕ)=6eiϕsin(θ)4πY20(θ,ϕ)=5(3cos2(θ)1)4πY21(θ,ϕ)=30eiϕsin(2θ)8πY22(θ,ϕ)=30e2iϕsin2(θ)8π \begin{aligned} & Y_0^0(\theta, \phi)=\frac{1}{2 \sqrt{\pi}} \\ & Y_1^0(\theta, \phi)=\frac{\sqrt{3} \cos (\theta)}{2 \sqrt{\pi}} \\ & Y_1^1(\theta, \phi)=-\frac{\sqrt{6} e^{i \phi} \sin (\theta)}{4 \sqrt{\pi}} \\ & Y_2^0(\theta, \phi)=\frac{\sqrt{5} \cdot\left(3 \cos ^2(\theta)-1\right)}{4 \sqrt{\pi}} \\ & Y_2^1(\theta, \phi)=-\frac{\sqrt{30} e^{i \phi} \sin (2 \theta)}{8 \sqrt{\pi}} \\ & Y_2^2(\theta, \phi)=\frac{\sqrt{30} e^{2 i \phi} \sin ^2(\theta)}{8 \sqrt{\pi}} \end{aligned}

请注意,我们没有列出负 𝑚 的球谐函数,因为它们与正 𝑚 的对应函数密切相关。

数值计算

 from scipy.special import sph_harm
 ​
 l_ = 1
 m_ = 1
 theta = np.pi/2
 phi = 0
 sph_harm(m_, l_, phi, theta)

但通常,在数值计算中,您想要给出角度值数组,这可以在 NumPy 中轻松完成:

 import numpy as np
 ​
 theta = np.linspace(0, np.pi, 100)
 phi = np.linspace(0, 2*np.pi, 100)
 Theta, Phi = np.meshgrid(theta, phi, indexing="ij")
 sph_harm(m_, l_, Phi, Theta)

下面是一个小函数,可以使用 Python 包绘制任何所需的球谐函数图:

 import plotly.graph_objects as go
 ​
 def create_figure(l, m):
 ​
     thetas = np.linspace(0, np.pi, 100)
     phis = np.linspace(0, 2*np.pi, 100)
     
     Thetas, Phis = np.meshgrid(thetas, phis)
     fcolors = ylm.real
     fmax, fmin = fcolors.max(), fcolors.min()
     fcolors = (fcolors - fmin)/(fmax - fmin)
 ​
     R = abs(ylm)
     X = R * np.sin(Theta) * np.cos(Phi)
     Y = R * np.sin(Theta) * np.sin(Phi)
     Z = R * np.cos(Theta)
 ​
     fig = go.Figure(
                 data=[
                     go.Surface(
                         x=X, y=Y, z=Z, 
                         surfacecolor=fcolors,
                         colorscale='balance', showscale=False, 
                         opacity=1.0, hoverinfo='none',
                     )
                 ]
     )
 ​
     fig.update_layout(title='$Y_{%d%d}$' % (l, m), autosize=False,
                       width=700, height=700,
                       margin=dict(l=65, r=50, b=65, t=90)
     )
     
     return fig

现在我们可以通过调用该函数在 Jupyter Notebook 中创建图形:

 create_figure(1, 0)

Last updated