Если вы выполняете какое-либо вычислительное моделирование чисел в Python, вы должны определенно использовать NumPy.
Наиболее общим алгоритмом для моделирования электромагнитной волны в материалах произвольной формы является метод конечных разностей во временной области (FDTD). Он решает волновое уравнение, шаг за шагом, на трехмерной решетке. Впрочем, это довольно сложно программировать самостоятельно, и вам, вероятно, лучше использовать специальный пакет, такой как Meep .
Существуют книги о том, как написать собственное моделирование FDTD: вот один , здесь документ с некоторым кодом для 1-D FDTD и пояснениями к более чем одному измерению, и Погуглив « написание FDTD », вы найдете то же самое.
Вы также можете подойти к проблеме, предполагая, что все ваши волны являются плоскими волнами, тогда вы можете использовать векторы и уравнения Френеля . Или, если вы хотите смоделировать гауссовы лучи, передаваемые и отражающиеся от плоских или изогнутых поверхностей, вы можете использовать матричный формализм ABCD (также известный как матрицы передачи лучей ). Это учитывает расхождение лучей.