Я слежу за уроком на YouTube по оптике Фурье на Python, чтобы имитировать дифракцию света через щель.
Это видео
Исходный код видео
Теперь я пытаюсь реализовать функцию get_U(z, k), а затем отобразить соответствующий график под ней, как показано на видео (у меня есть скудные знания по этой теме), однако я просто не могу заставить сюжет работать (белый сюжет виден все время). При проверке я обнаружил, что переменная U состоит всего лишь из набора значений (nan+nanj), чего, по моему мнению, быть не должно. Я перепроверил формулу, и она выглядит идеально. Я также понимаю, что иногда np.sqrt() имеет дело с отрицательными значениями, но не добавляет ни np.abs(), ни np.where()(для преобразования отрицательные значения равны нулю) дает мне желаемый результат.
Мой код:
import numpy as np
import scipy as sp
from scipy.fft import fft2, ifft2, fftfreq, fftshift
import matplotlib.pyplot as plt
import pint
plt.style.use(['grayscale'])
u = pint.UnitRegistry()
D = 0.1 * u.mm
lam = 660 * u.mm
x = np.linspace(-2, 2, 1600) * u.mm
xv, yv = np.meshgrid(x, x)
U0 = (np.abs(xv) < D/2) * (np.abs(yv) < 0.5 * u.mm)
U0 = U0.astype(float)
A = fft2(U0)
kx = fftfreq(len(x), np.diff(x)[0]) * 2 * np.pi
kxv, kyv = np.meshgrid(kx, kx)
def get_U(z, k):
return ifft2(A*np.exp(1j*z.magnitude*np.sqrt(k.magnitude**2 - kxv.magnitude**2 - kyv.magnitude**2)))
k = 2*np.pi/(lam)
d = 3 * u.cm
U = get_U(d, k)
plt.figure(figsize=(5, 5))
plt.pcolormesh(xv, yv, np.abs(U), cmap='inferno')
plt.xlabel('$x$ [mm]')
plt.ylabel('$y$ [mm]')
plt.title('Single slit diffraction')
plt.show()
Подробнее здесь: https://stackoverflow.com/questions/793 ... ier-optics
Обратное быстрое преобразование Фурье (ifft2) scipy не работает для оптики Фурье ⇐ Python
Программы на Python
1736431033
Anonymous
Я слежу за уроком на YouTube по оптике Фурье на Python, чтобы имитировать дифракцию света через щель.
Это видео
Исходный код видео
Теперь я пытаюсь реализовать функцию get_U(z, k), а затем отобразить соответствующий график под ней, как показано на видео (у меня есть скудные знания по этой теме), однако я просто не могу заставить сюжет работать (белый сюжет виден все время). При проверке я обнаружил, что переменная U состоит всего лишь из набора значений (nan+nanj), чего, по моему мнению, быть не должно. Я перепроверил формулу, и она выглядит идеально. Я также понимаю, что иногда np.sqrt() имеет дело с отрицательными значениями, но не добавляет ни np.abs(), ни np.where()(для преобразования отрицательные значения равны нулю) дает мне желаемый результат.
Мой код:
import numpy as np
import scipy as sp
from scipy.fft import fft2, ifft2, fftfreq, fftshift
import matplotlib.pyplot as plt
import pint
plt.style.use(['grayscale'])
u = pint.UnitRegistry()
D = 0.1 * u.mm
lam = 660 * u.mm
x = np.linspace(-2, 2, 1600) * u.mm
xv, yv = np.meshgrid(x, x)
U0 = (np.abs(xv) < D/2) * (np.abs(yv) < 0.5 * u.mm)
U0 = U0.astype(float)
A = fft2(U0)
kx = fftfreq(len(x), np.diff(x)[0]) * 2 * np.pi
kxv, kyv = np.meshgrid(kx, kx)
def get_U(z, k):
return ifft2(A*np.exp(1j*z.magnitude*np.sqrt(k.magnitude**2 - kxv.magnitude**2 - kyv.magnitude**2)))
k = 2*np.pi/(lam)
d = 3 * u.cm
U = get_U(d, k)
plt.figure(figsize=(5, 5))
plt.pcolormesh(xv, yv, np.abs(U), cmap='inferno')
plt.xlabel('$x$ [mm]')
plt.ylabel('$y$ [mm]')
plt.title('Single slit diffraction')
plt.show()
Подробнее здесь: [url]https://stackoverflow.com/questions/79342508/inverse-fast-fourier-transform-ifft2-of-scipy-not-working-for-fourier-optics[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия