Numpy будет достаточно для этой проблемы.Эта формула может быть легко векторизована, поэтому вам не нужно использовать циклы 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.