🥥Python物理数值解析
Python | 数学 | 物理 | 有限差分近似 | 自动差分 | 线性方程组 | 特征值 | 非线性方程 | 多项式 | 非线性方程组 | 各项式插值 | 三次样条插值 | 三角插值 | 最小二乘拟合 | 牛顿-柯特斯方法 | 自适应积分| 龙贝格积分 | 高斯积分 | 微分方程 | Matplotlib | Numpy | 电磁学中的名板展开 | 量子力学中的局部动能 | 薛定谔特征值问题 | 极端化经典力学中的作用 | 测试斯特凡-玻尔茲曼定律 | 变分量子蒙特卡洛 | 二维泊松方程
让我们回忆一下库仑定律:来自位于 $r_0$ 处的单个点电荷 q0 的位于 P 点(位置 r)的测试电荷 Q 上的力由下式给出:
F0=k(r−r0)2q0Q∣r−r0∣r−r0,(1)
其中库仑常数是 k=1/(4πϵ0) SI 单位(ϵ0 是自由空间的介电常数)。 力与两个电荷的乘积成正比,与两个电荷之间的距离的平方成反比,并沿着从电荷 q0 到电荷 Q 的线点。电场就是力 F0 与电荷 Q 的比值。 测试电荷 Q 在测试电荷的大小变为零的极限。 在实践中,这给了我们:
E0(r)=kq0∣r−r0∣3r−r0,(2)
在那里我们取消了 Q,并借此机会合并了两个分母。 这是由 r0 处的点电荷 q0 引起的 r 位置处的电场。
如果我们面临多个点电荷,我们可以应用叠加原理:Q 上的合力由作用在 Q 上的各个力的矢量和组成。 因此,如果我们处理 n 点电荷 q0,q1,…,qn−1 分别位于 r0,r1,…,rn−1 处,则情况如图 1.5 所示。 为了便于查看,我们的图形是二维的,但形式主义同样适用于三个维度。 位置 r 处的总电场为:
E(r)=∑i=0n−1Ei(r)=∑i=0n−1kqi∣r−ri∣3r−ri,(3)
即,单个电场贡献的总和,Ei(r)。 请注意,您可以考虑空间中任何一点的总电场 r。 另请注意,电场是一个矢量:在空间中的任何点,该 E 都有大小和方向。 可视化矢量场的一种方法包括绘制场线,即帮助我们跟踪场方向的假想曲线。 更具体地说,给定点的场线的切线为我们提供了该点的电场方向。 场线不交叉; 它们以正电荷(“源”)开始,以负电荷(“汇”)结束。
绘制场线
我们将在 Python 中绘制电场线; 虽然存在更复杂的向量场可视化方法(例如,线积分卷积),但我们在下面描述的内容应该足以让您对事物有定性的感觉。 虽然绘图函数(甚至库)的变化往往比编程基础设施的其他方面快得多,但无论具体实现是什么样子,所讨论的原则都适用。
我们面临两个任务:首先,我们需要根据方程式(3)在电荷附近的几个点产生电场(矢量),其次,我们需要以这样一种方式绘制场线,以便我们可以从物理上解释正在发生的事情。 和前面的代码一样,我们为每个任务创建一个 Python 函数。 为简单起见,我们从一个只有两个点电荷(大小相等,符号相反)的问题开始。 此外,我们将自己限制在两个维度上(笛卡尔坐标 x 和 y)。
代码 1.3 是一个 Python 实现,其中为了简单起见,库仑常数被分开。 我们首先导入 numpy 和 matplotlib,因为繁重的工作将由函数 streamplot() 完成,该函数需要 NumPy 数组作为输入。 我们还导入了平方根和 deepcopy() 函数,它们可以创建一个不同的列表列表。
import numpy as np
import matplotlib.pyplot as plt
from math import sqrt
from copy import deepcopy
def makefield(xs, ys):
qtopos = {1: (-1,0), -1: (1,0)}
n = len(xs)
Exs = [[0. for k in range(n)] for j in range(n)]
Eys = deepcopy(Exs)
for j,x in enumerate(xs):
for k,y in enumerate(ys):
for q,pos in qtopos.items():
posx, posy = pos
R = sqrt((x - posx)**2 + (y - posy)**2)
Exs[k][j] += q*(x - posx)/R**3
Eys[k][j] += q*(y - posy)/R**3
return Exs, Eys
def plotfield(boxl,n):
...
函数 makefield() 接受两个列表 xs 和 ys,对应于我们希望评估电场的坐标(x 和 y 一起构成 r)。我们还需要某种方式来存储点电荷所在的 ri。我们选择将这些存储在字典中,该字典从电荷 qi 映射到位置 ri。对于每个位置 r,我们需要评估 E(r):在二维中,它由 Ex(r) 和 Ey(r) 组成,即总电场的两个笛卡尔分量。目前只关注其中一个,比如 Ex(r),我们意识到我们需要为任何可能的 r 存储它的值,即对于任何可能的 x 和 y 值。我们决定使用由嵌套列表推导式生成的列表列表。然后我们为 Ey(r) 创建另一个列表列表。我们需要绘制(即存储)总电场的 x 和 y 分量的值,在所有所需的值向量 r,即在由 xs 和 ys 组成的二维网格上。这需要计算给定 x 的所有可能 y 处的电场(来自给定点电荷 qi 的贡献),然后迭代所有可能的 x。我们还需要迭代我们的点电荷 qi 和它们的位置 ri(即等式(3)的总和中的不同项);我们通过在 qtopos.items() 中 for q, pos in qtopos.items() 来做到这一点:此时我们将 pos 解包为 posx 和 posy。
数值
项目:电磁学中的多极展开
导数
项目:量子力学中的局部动能
矩阵
项目:薛定谔特征值问题
求根
项目:极端化经典力学中的作用
逼近
项目:测试斯特凡-玻尔兹曼定律
积分
项目:变分量子蒙特卡洛
微分方程
项目:二维泊松方程
Last updated