2015-06-30 4 views
0

В настоящее время я работаю над уравнением тепловой диффузии в 3D в питоне.Граничное условие Дирихле для свертки функции Грина в области Фурье

Я решаю уравнение тепловой диффузии с сверткой функции Грина этого уравнения с исходным уравнением, которое становится умножением на область Фурье.

G * S ---> TF ---> G х S

Из-за моего использования преобразования Фурье, у меня есть граничные условия, что подразумевает вторичные источники все вокруг моего 3D пространстве моделирования.

enter image description here

Я хотел бы, чтобы свести на нет влияния этих вторичных мнимых источников, чтобы применить граничное условие Дирихля, который будет применяться значением 0 по краям, и остановить распространение тепла обратно в моем круг интересов.

Вы еще это сделали? У вас есть идея, как кодировать и внедрять это? Может быть, есть еще один способ отрицать эти проблемы?

Спасибо!

+0

Это гораздо меньше вопрос программирования, чем математика/прикладная математика (физика). –

+0

Да, окончательно. Но я думаю, что я понял вопрос прикладной математики. Мне действительно трудно понять, как реализовать его в моем скрипте. – Magea

ответ

0

Ваша математическая проблема, как это трудно, но ваша NumPy проблема не так много:

так, если у вас есть трехмерный numpy.ndarray, вы получите три индекса; поэтому вы просто установите все эти границы на 0:

arr[:,0,0] = 0 # all x, y == z == 0 
arr[0,:,0] = 0 # all y, x == z == 0 
arr[0,0,:] = 0 # all z, x == y == 0 

arr[:,-1,0] = 0 # all x, y == last, z = 0 
... 

arr[:,-1,-1] = 0 # all x, y == z == last 
+0

Привет! Благодарим вас за помощь. Что вы предлагаете, я уже пытался это сделать. Да, он работает для границ, но ни в коем случае не останавливает вещь из мнимых источников. Это просто заставляет значение быть 0 на границах. Мне понадобится нечто более сложное, например, анти-источники, чтобы заблокировать тепло. – Magea

+0

@ Magea anti-sources - это потоки: D нет, так как все окружающие области абсолютно идентичны тем, которые вы рассматриваете, и вы применяете 0 на границе этого, вы применяете 0 на всех границах, поэтому не может быть диффузия обратно в вашу камеру. То, что вы делаете, кажется, имеет математические перегибы. Как насчет применения прямоугольного окна (ok, в трех измерениях, кубических) до вашего поля перед преобразованием Фурье? 'F {(G * S) W} = F {W} F {G * S}'. Преобразование Фурье прямоугольного окна является функцией 'sinc'. –

+1

@Magea, конечно, это применимо только к вашим непрерывным математическим соображениям, а не к вашей симуляции ('sinc' с бесконечным носителем и всеми); но это иллюстрирует важный факт: если вам нужно смоделировать поле, и вам нужно, чтобы вещи были непериодическими, вам нужно будет применить окно, и вам нужно будет выбрать как окно, так и «безопасную» область заполнения больших достаточно, чтобы достаточно подавить эффекты боковых лепестков, которые вы по сути получаете, когда прямоугольно оконтируете свои данные (что вы делаете, когда вы устанавливаете вокруг него 0). –