Симуляция волн с помощью Python - PullRequest
9 голосов
/ 10 февраля 2011

Я хочу смоделировать распространяющуюся волну с поглощением и отражением на некоторых телах в трехмерном пространстве.Я хочу сделать это с Python.Должен ли я использовать NumPy?Есть ли специальные библиотеки, которые я должен использовать?

Как мне смоделировать волну?Могу ли я использовать волновое уравнение?Но что, если у меня есть отражение?Есть ли лучший метод?Должен ли я сделать это с векторами?Но когда луч расходится, интенсивность становится ниже.Сложно.

Заранее спасибо.

Ответы [ 4 ]

12 голосов
/ 10 февраля 2011

Если вы выполняете какое-либо вычислительное моделирование чисел в Python, вы должны определенно использовать NumPy.

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

Существуют книги о том, как написать собственное моделирование FDTD: вот один , здесь документ с некоторым кодом для 1-D FDTD и пояснениями к более чем одному измерению, и Погуглив « написание FDTD », вы найдете то же самое.

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

3 голосов
/ 10 февраля 2011

Если вы решаете трехмерные пользовательские PDE, я бы рекомендовал взглянуть на FiPy . Это избавит вас от необходимости создавать множество ваших матричных кондиционеров и решателей с нуля. Он использует NumPy и / или Trilinos. Вот несколько примеров .

0 голосов
/ 10 февраля 2011

Я рекомендую вам использовать мой проект GarlicSim в качестве основы для построения симуляции.Вам все еще нужно будет написать свой алгоритм самостоятельно, возможно, на Numpy, но GarlicSim может сэкономить вам кучу шаблонов и позволит вам гибко исследовать результаты моделирования, подобно системам контроля версий.

0 голосов
/ 10 февраля 2011

Не используйте Python.Я пытался использовать его для вычислительно дорогих вещей, и он просто не был для этого./ C ++ и экспортируйте его в Python.
Вот ссылка на C API: http://docs.python.org/c-api/
Имейте в виду, это не самый простой API в мире:)

...