Python物理数值解析

让我们回忆一下库仑定律:来自位于 r 0 r_0 r0 处的单个点电荷 q 0 q_0 q0 的位于 P P P 点(位置 r r r)的测试电荷 Q Q Q 上的力由下式给出:

F 0 = k q 0 Q ( r − r 0 ) 2 r − r 0 ∣ r − r 0 ∣ , ( 1 ) \mathbf{F}_{0}=k \frac{q_{0} Q}{\left(\mathbf{r}-\mathbf{r}_{0}\right)^{2}} \frac{\mathbf{r}-\mathbf{r}_{0}}{\left|\mathbf{r}-\mathbf{r}_{0}\right|},\qquad(1) F0=k(rr0)2q0Qrr0rr0,(1)

其中库仑常数是 k = 1 / ( 4 π ϵ 0 ) k=1 /\left(4 \pi \epsilon_{0}\right) k=1/(4πϵ0) SI 单位( ϵ 0 \epsilon_{0} ϵ0 是自由空间的介电常数)。 力与两个电荷的乘积成正比,与两个电荷之间的距离的平方成反比,并沿着从电荷 q 0 q_0 q0 到电荷 Q Q Q 的线点。电场就是力 F 0 F_0 F0 与电荷 Q Q Q 的比值。 测试电荷 Q Q Q 在测试电荷的大小变为零的极限。 在实践中,这给了我们:

E 0 ( r ) = k q 0 r − r 0 ∣ r − r 0 ∣ 3 , ( 2 ) \mathbf{E}_{0}(\mathbf{r})=k q_{0} \frac{\mathbf{r}-\mathbf{r}_{0}}{\left|\mathbf{r}-\mathbf{r}_{0}\right|^{3}},\qquad(2) E0(r)=kq0rr03rr0,(2)

在那里我们取消了 Q Q Q,并借此机会合并了两个分母。 这是由 r 0 r_0 r0 处的点电荷 q 0 q_0 q0 引起的 r r r 位置处的电场。

如果我们面临多个点电荷,我们可以应用叠加原理: Q Q Q 上的合力由作用在 Q Q Q 上的各个力的矢量和组成。 因此,如果我们处理 n n n 点电荷 q 0 , q 1 , … , q n − 1 q_{0}, q_{1}, \ldots, q_{n-1} q0,q1,,qn1 分别位于 r 0 , r 1 , … , r n − 1 \mathbf{r}_{0}, \mathbf{r}_{1}, \ldots, \mathbf{r}_{n-1} r0,r1,,rn1 处,则情况如图 1.5 所示。 为了便于查看,我们的图形是二维的,但形式主义同样适用于三个维度。 位置 r r r 处的总电场为:

E ( r ) = ∑ i = 0 n − 1 E i ( r ) = ∑ i = 0 n − 1 k q i r − r i ∣ r − r i ∣ 3 , ( 3 ) \mathbf{E}(\mathbf{r})=\sum_{i=0}^{n-1} \mathbf{E}_{i}(\mathbf{r})=\sum_{i=0}^{n-1} k q_{i} \frac{\mathbf{r}-\mathbf{r}_{i}}{\left|\mathbf{r}-\mathbf{r}_{i}\right|^{3}},\qquad(3) E(r)=i=0n1Ei(r)=i=0n1kqirri3rri,(3)

即,单个电场贡献的总和, E i ( r ) \mathbf{E}_{i}(\mathbf{r}) Ei(r)。 请注意,您可以考虑空间中任何一点的总电场 r r r。 另请注意,电场是一个矢量:在空间中的任何点,该 E E 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):
	...

详情参阅 - 亚图跨际

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值