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。