Почему график уравнения Френеля, зависящего от показателя преломления от длины волны, не отображается так, как ожидалосьPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему график уравнения Френеля, зависящего от показателя преломления от длины волны, не отображается так, как ожидалось

Сообщение Anonymous »

Я хочу воспроизвести спектр отражения тонкой пленки, комплексный показатель преломления которой зависит от длины волны (данные комплексного показателя преломления, обозначенные в коде N2, можно получить отсюда). p>
Использование уравнений Френеля для среды 1: воздух, среды 2: тонкая пленка и среды 3: воздух:
Изображение
;
Изображение

Коэффициент отражения
Изображение

где \delta определяется как
Изображение

И, наконец, уравнение отражения
Изображение

Поскольку показатели преломления имеют зависимость от длины волны, то угол преломления
Изображение
имеют такую ​​же зависимость, используя уравнение Снелла:
[img]https://i .sstatic.net/mLt3VjWD.png[/img]

Я написал следующий код:

Код: Выделить всё

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

## Function definition
def Ang_Refrac(na,nb,angle_a):
ang_refrac = np.arcsin( (na/nb).real * np.sin(angle_a) )
return ang_refrac

# Data
Thin_film = pd.read_csv("Si_refractive index.txt", delimiter='\t')

## Variable definition

# thin film thickness, [d]: nm
d = 200

# Wave-length
lamb = Thin_film[Thin_film.columns[0]]

# Complex refractive index
N1 = np.ones(len(lamb))
N2 = Thin_film[Thin_film.columns[1]] + Thin_film[Thin_film.columns[1]]*1j
N3 = np.ones(len(lamb))

# Angle:
ang_1_s = 0  #sexagesimal

ang_1 = ang_1_s*np.pi/180  #radians
ang_2 = [] #radians
ang_3 = [] #radians
for i in range(len(N2)):
ang_refrac_12 = Ang_Refrac(N1[i],N2[i],ang_1)
ang_refrac_23 = Ang_Refrac(N2[i],N3[i],ang_refrac_12)
ang_2.append(ang_refrac_12)
ang_3.append(ang_refrac_23)

## Reflectance
R_s = np.zeros(len(lamb))
R_p = np.zeros(len(lamb))

for i in range(len(lamb)):
# S-type polarization
r12_s = (N1[i]*np.cos(ang_1) - N2[i]*np.cos(ang_2[i]))/(N1[i]*np.cos(ang_1) + N2[i]*np.cos(ang_2[i]))
r23_s = (N2[i]*np.cos(ang_2[i]) - N3[i]*np.cos(ang_3[i]))/(N2[i]*np.cos(ang_2[i]) + N3[i]*np.cos(ang_3[i]))

# P-type polarization
r12_p = (N2[i]*np.cos(ang_1) - N1[i]*np.cos(ang_2[i])) / (N2[i]*np.cos(ang_1) + N1[i]*np.cos(ang_2[i]))
r23_p = (N3[i]*np.cos(ang_2[i]) - N2[i]*np.cos(ang_3[i])) / (N3[i]*np.cos(ang_2[i]) + N2[i]*np.cos(ang_3[i]))

# Phase shift
delta = 2 * np.pi * (1/lamb[i]) * d * np.sqrt(abs(N2[i])**2 - (np.sin(ang_1)**2))

# Reflection coefficient
r123_s = (r12_s + r23_s*np.exp(2j*delta)) / (1 - r12_s*r23_s*np.exp(2j*delta))
r123_p = (r12_p + r23_p*np.exp(2j*delta)) / (1 - r12_p*r23_p*np.exp(2j*delta))

# Reflectance
R_s[i] = abs(r123_s)**2
R_p[i] = abs(r123_p)**2

# Reflectance normalization
R_s_normalized = (R_s - min(R_s)) / (max(R_s) - min(R_s))
R_p_normalized = (R_p - min(R_p)) / (max(R_p) - min(R_p))

# Plotting
plt.title("Refletância $\phi=" + str(ang_1_s) + "$°")
plt.xlim(300, 1000)  # Definindo os limites do eixo x
plt.plot(lamb, R_s_normalized, 'go', label="Polarização S", markersize=4)
plt.plot(lamb, R_p_normalized, 'b-', label="Polarização P")
plt.legend()
plt.show()
Результирующий график:
Изображение

Ожидаемый график: получен отсюда
[img]https://i.sstatic.net /xFFk55li.png[/img]

Почему результаты разные?

Подробнее здесь: https://stackoverflow.com/questions/792 ... s-equation
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»