[英]Electric potential of points using scipy and distance
我想在此页面上为公式5.5.1写一个函数:
有权重函数的欧几里得距离,我可以使用,但也有一个正方形和一个平方欧。
我是scipy的新手,所以我要么必须测试一下,要么要依靠有经验的人。
这三个版本对于我的用例来说基本上是相等的,还是我应该选择其中一个呢? 从长远来看,我想计算大量的点(数百万个范围内),因此此处的性能和内存使用情况至关重要。
脾气暴躁就足以解决这个问题。 该公式可以很容易地矢量化,因此您不需要使用Python循环来计算它,例如
import numpy as np
def get_electric_potential(x, qi, ri):
"""
x = (x1, x2, x3) -- numpy array of shape 3x1
qi = (q1, ..., qN) -- numpy array of shape (N,)
ri = (...).shape = 3 x N
"""
eps0 = 0.00001 # Put your value here!!!
C = 1 / 4 / np.pi / eps0
C = 1 # Comment this line
return C * ((qi / np.diag((x - ri).T @ (x - ri))) * (x - ri)).sum(axis=1)
因此, x
是一个向量,您要在其中计算电位值; ri
是一个3xN形状的矩阵,它的每一列代表电荷的位置。 qi
电荷的相应向量。
例:
x = np.array([1,2,3])[:, np.newaxis]
ri = np.arange(30).reshape(3, 10)
qi = np.arange(10)
get_electric_potential(x, qi, ri)
数组([-0.28622007,-0.83010791,-1.37399575])
注意:要使用此公式,您需要定义常数C,定义eps0。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.