я пытаюсь построить программу для решения уравнения в частных производных в 2D для разных конденсаторов возможная геометрия может выглядеть как . Поэтому я написал функцию, которая добавляет плоские конденсаторы.
def add_flat_capacitor(self, center_x, center_y, length, width, rotation, charge):
x_shifted = self.X - center_x
y_shifted = self.Y - center_y
x_rot = np.cos(rotation) * x_shifted + np.sin(rotation) * y_shifted
y_rot = -np.sin(rotation) * x_shifted + np.cos(rotation) * y_shifted
mask_flat = (x_rot <= length / 2) & (x_rot >= -length / 2)
mask_flat &= (y_rot <= width / 2) & (y_rot >= -width / 2)
self.rho[mask_flat] += charge / mask_flat.sum()
и функция, которая решает уравнение с формализмом Якоби
def jacobi_solve_potential(self, max_iterations=int(1e5), eps=1e-9):
V = np.zeros_like(self.rho, dtype=np.float64)
V_old = np.zeros_like(self.rho, dtype=np.float64)
error = np.inf
iterations = 0
while iterations < max_iterations and error > eps:
V_old[:, :] = V
V[1:-1, 1:-1] = V_old[2:, 1:-1]
V[1:-1, 1:-1] += V_old[:-2, 1:-1]
V[1:-1, 1:-1] += V_old[1:-1, :-2]
V[1:-1, 1:-1] += V_old[1:-1, 2:]
V += self.rho * self.ds**2
V *= 0.25
iterations += 1
error = np.sum(np.abs(V - V_old)) / self.N
V0 = V[self.n][self.n]
return V, V0, iterations
Итак, что функция делает, это решает уравнение Пуассона (значения зарядов на конденсаторах будут меняться при решении уравнений Пуассона, я хочу, чтобы они не изменялись => Уравнение Лапласа),
мой вопрос:
Как решить уравнение Лапласа?
Идея довольно проста, но я не могу поместить ее в код:
например, одно решение может быть таким:
добавьте функцию «mask_flat» из «add_flat_capacitor» в решатель и запустите решатель только для области, где нет конденсаторов.
Для области, где установлены конденсаторы V0 = заряд.
Моя проблема: 1) Можно ли просто добавить return mask_flat в конце функции add_flat_capacito и передать ее решателю в качестве аргумента?
и 2) если 1) сработает, как я могу зациклить массив с маской, чтобы поместить заряды = маску, а в другом случае сделать уже написанное тело в решателе якоби?
Извините за длинный вопрос, я очень признателен за вашу поддержку
edit: до сих пор не удалось решить эту проблему, с чем связано -1 голосование, и нужна ли какая-либо дополнительная информация, чтобы помочь мне?