繁体   English   中英

使用电位和距离的点的电势

[英]Electric potential of points using scipy and distance

我想在此页面上为公式5.5.1写一个函数:

点电荷的电势

我发现了scipy.spatial.distance

有权重函数的欧几里得距离,我可以使用,但也有一个正方形和一个平方欧。

我是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM