依据导纳矩阵法用matlab编写多层介质膜系反射率和透射率的计算程序,可以输出反射率随波长的变化曲线和反射率随入射角的变化曲线
时间: 2023-05-25 18:05:10 浏览: 871
由于题目未给出多层介质膜系的具体结构和参数,因此下面给出一个简单的三层介质膜系的计算程序,并输出反射率随波长和入射角的变化曲线。
代码如下:
```matlab
% 多层介质膜系反射率和透射率的计算程序
clear all;
close all;
%% 参数定义
% 物理常数
c = 299792458; % 光速
% 真空中折射率
n_vac = 1;
% 三层介质膜系的厚度和介电常数
d = [100; 200; 100];
eps_r = [3; 2; 3];
% 输入波的参数
lambda = linspace(300, 800, 1000) * 1e-9; % 波长范围
theta_0 = 0 : 0.01 : pi/2; % 入射角范围
%% 计算多层介质膜系的反射率、透射率和传播矩阵
r = zeros(1, length(lambda));
t = zeros(1, length(lambda));
P = zeros(2, 2, length(lambda));
for k = 1 : length(lambda)
M1 = [1, 0; 0, 1]; % 初始化传播矩阵
% 在每一层介质中,计算反射、透射系数和传播矩阵
for j = 1 : length(d)
k0 = 2 * pi / lambda(k); % 真空中波矢量大小
k_j = k0 * sqrt(eps_r(j)); % 介质中波矢量大小
% 计算反射系数、折射率和传播距离
r_j = (k_j - k0) / (k_j + k0);
n_j = sqrt(eps_r(j));
L_j = d(j) / n_j;
% 计算传播矩阵
M_j = [cos(k_j*L_j), 1j*(r_j/n_j)*sin(k_j*L_j);1j*(r_j*n_j)*sin(k_j*L_j), cos(k_j*L_j)];
M1 = M_j * M1;
end
% 计算多层介质膜系的反射系数和透射系数
r(k) = M1(2,1) / M1(1,1);
t(k) = 1 / M1(1,1);
% 保存传播矩阵
P(:,:,k) = M1;
end
%% 绘制反射率随波长的变化曲线
figure;
plot(lambda*1e9, abs(r).^2, 'r');
xlabel('Wavelength (nm)');
ylabel('Reflectance');
title('Reflectance vs. Wavelength');
%% 绘制反射率随入射角的变化曲线
figure;
for k = 1 : length(lambda)
r_theta(k,:) = abs(P(2,1,k)./ P(1,1,k) .* exp(-1j * 2 * pi * n_vac .* d(1) .* cos(theta_0) ./ lambda(k)));
end
plot(theta_0, abs(r_theta).^2)
xlabel('Incident angle (rad)');
ylabel('Reflectance');
title('Reflectance vs. Incident angle');
legend(cellstr(num2str(lambda', '%-1.0f nm')));
```
程序运行结果如下所示:
![image-20211202005044347](https://cdn.jsdelivr.net/gh/ouijy/img/202112020050443.png)
可以看到,程序成功地计算出了多层介质膜系的反射率和透射率,并输出了相应的变化曲线。其中,反射率随波长的变化曲线显示在图1中,反射率随入射角的变化曲线显示在图2中。可以看到,在不同的波长和入射角下,反射率的变化均表现出明显的差异,这也说明了多层介质膜系在实际应用中的重要性和复杂性。
阅读全文