Я пытаюсь нелинейное соответствие уравнений Френеля с данными отражения от угла падения. Найдено на этом сайте http://en.wikipedia.org/wiki/Fresnel_equations - это два графика, которые имеют красную и синюю линию. Мне нужно в основном установить синюю линию, когда n1 = 1
к моим данным.Установка уравнений Френеля с использованием Scipy
Здесь я использую следующий код, где th
is theta, угол падения.
def Rperp(th, n, norm, constant):
numerator = np.cos(th) - np.sqrt(n**2.0 - np.sin(th)**2.0)
denominator = 1.0 * np.cos(th) + np.sqrt(n**2.0 - np.sin(th)**2.0)
return ((numerator/denominator)**2.0) * norm + constant
Параметров Я ищу являются:
- показателя преломления п
- некоторой Нормализация умножить на и
- константа сдвига базового графика.
Моя попытка следующее:
xdata = angle[1:] * 1.0 # angle of incidence
ydata = greenDD[1:] # reflectance
params = curve_fit(Rperp, xdata, ydata)
Что я получаю это деление нуля по-видимому, и дает мне [1, 1, 1] для параметров. Уравнение Френеля - это бит без нормализатора и константа в Rperp. Тета в уравнении также является углом падения. В целом я просто не уверен, что я вообще делаю это правильно, чтобы получить параметры.
Идея, кажется, первый параметр в функции - это независимая переменная, а остальные - зависимые переменные, которые будут найдены. Затем вы просто подключаетесь к scipy's curve_fit, и это даст вам соответствие вашим данным для параметров. Если это просто происходит вокруг деления нуля, которое у меня было, хотя могло бы быть целым делением, то кажется, что я должен быть установлен. Любая помощь приветствуется и дайте мне знать, нужно ли разъяснять вещи (например, np является numpy).
То, как вы это делаете, является правильным. Ошибка, возникающая из других источников. Действительно ли python дает вам ошибку трассировки? Что он? Возможно ли, что 'xdata' вы переходите к' curve_fit' в градусах, а не в радианах? –
Это в градусах. Это может вызвать такую проблему? – Tristan
Это может быть. Numpy (и почти любая численная библиотека) ожидает, что аргументы, переданные тригонометрическим функциям, например синусоидальному, будут в радианах. Невыполнение этого может привести к необычно большим вариациям (в зависимости от ваших входных данных), и, следовательно, кривая_fit может не найти хорошей подгонки. –