Моделирование волны с Python

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

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

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

4 ответов


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

наиболее общим алгоритмом для моделирования электромагнитной волны в произвольно-образных материалах является конечно-разностный метод домен (методом fdtd). Он решает волновое уравнение, один временной шаг за раз, на трехмерной решетке. Однако запрограммировать себя довольно сложно, и вам, вероятно, лучше использовать специальный пакет, такой как as МИП.

есть книги о том, как написать свои собственные моделирования FDTD:вот, здесь документ с некоторым кодом для 1-D FDTD и объяснения на более чем 1 измерение, и Googling" написание FDTD " найдет вам больше того же.

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


Если вы решаете 3D custom PDEs, я бы рекомендовал хотя бы взглянуть на FiPy. Это избавит вас от необходимости создавать множество ваших матричных кондиционеров и решателей с нуля. Он использует numpy и / или trilinos. Вот некоторые примеры.


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


Не используйте Python. Я пробовал использовать его для вычислительно дорогих вещей, и он просто не был создан для этого.

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