Электрический потенциал точек с использованием scipy и расстояния - PullRequest
1 голос
/ 01 мая 2019

Я хотел бы написать функцию для формулы 5.5.1 на этой странице:

Электрический потенциал точечных зарядов

Я нашел scipy.atial.distance

Существует евклидово расстояние с весовой функцией, которое я мог бы использовать, но есть также квадратная форма и квейклидово.

Я новичок в scipy, поэтому яЛибо нужно проверить это, либо использовать кого-то со стажем.

Эти три версии в основном эквивалентны для моего варианта использования, или я должен выбрать одну из других.В долгосрочной перспективе я хочу рассчитать большое количество баллов (в диапазоне миллионов), поэтому производительность и использование памяти здесь будут иметь значение.

1 Ответ

0 голосов
/ 01 мая 2019

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...