Matlab一维光子晶体能带求解:PWE FDTD及传输矩阵法

Matlab一维光子晶体能带求解,PWE FDTD 传输矩阵等。

一维光子晶体能带计算这事儿听起来高大上,实际用Matlab搞起来其实挺接地气的。今天咱们直接开撸三种常用方法------平面波展开法(PWE)、传输矩阵和FDTD,手把手教你用代码把能带结构抠出来。

平面波展开法:傅里叶暴力美学

PWE的核心就是把介电常数和电磁场用平面波展开,最后整出个本征方程。举个栗子,假设咱们有个周期性排列的介质(比如ε1=4和ε2=9交替),晶格常数a=1。先算介电常数ε的傅里叶系数:

matlab 复制代码
N = 21; % 平面波数量,必须奇数
G = (-(N-1)/2:(N-1)/2)*(2*pi/a);
epsilon = zeros(N,N);
for m = 1:N
    for n = 1:N
        g = G(m) - G(n);
        if g == 0
            epsilon(m,n) = 0.5*(1/4 + 1/9); % 平均介电常数倒数
        else
            epsilon(m,n) = (1/4 - 1/9)*1i/(g*a)*(exp(-1i*g*a/2)-1);
        end
    end
end

这段代码在构造介电常数的傅里叶分量矩阵。注意这里用了介电常数倒数的展开,所以最后出来的矩阵其实是关于1/ε的。接下来构造哈密顿矩阵求本征频率:

matlab 复制代码
k = linspace(0, pi/a, 50); % 第一布里渊区
bands = zeros(length(k), N);
for i = 1:length(k)
    H = (diag(k(i)+G).^2) * inv(epsilon); % 哈密顿矩阵
    bands(i,:) = sqrt(eig(H)); % 频率=sqrt(本征值)
end
plot(k, real(bands), 'b.');

这里有个坑:平面波数量N太小会导致结果不准确,但N太大计算量爆炸。一般先试N=21,如果带隙形状不稳就加量。

传输矩阵:层层套娃的艺术

传输矩阵法特别适合处理多层膜结构。每层用一个2x2矩阵描述电磁波的传递,整个结构就是这些矩阵的连乘。假设咱们有AB两种介质层,厚度d1=0.2a,d2=0.8a:

matlab 复制代码
function T = layer_matrix(epsilon, d, omega)
    k = omega*sqrt(epsilon);
    T = [exp(1i*k*d), 0; 0, exp(-1i*k*d)]; % 传播矩阵
    interface = 0.5*[1+sqrt(epsilon), 1-sqrt(epsilon); 
                    1-sqrt(epsilon), 1+sqrt(epsilon)]; % 界面矩阵
    T = interface \ T * interface; % 组合
end

omega = linspace(0, 5, 300);
trans = zeros(size(omega));
for i = 1:length(omega)
    T_total = eye(2);
    for j = 1:10 % 10个周期
        T_total = T_total * layer_matrix(4, 0.2, omega(i));
        T_total = T_total * layer_matrix(9, 0.8, omega(i));
    end
    trans(i) = 1 / abs(T_total(1,1))^2; % 透射率
end
plot(omega, trans);

这个代码在计算透射谱------带隙对应透射率暴跌的区域。注意当频率ω使矩阵连乘后T(1,1)接近零时,就出现带隙。传输矩阵法的优势是处理缺陷层特别方便,随便插几层进去计算量变化不大。

FDTD:时域硬核模拟

虽然FDTD计算量大,但看着电磁波在晶体里蹦跶实在解压。设置空间网格和时间步长:

matlab 复制代码
Nz = 200; % 空间点数
epsilon = 4*ones(Nz,1);
epsilon(50:50:end) = 9; % 每50格插入高介电层
Ez = zeros(Nz,1); Hy = zeros(Nz,1);
omega_list = []; % 记录激发频率

for t = 1:1e4
    Hy(1:end-1) = Hy(1:end-1) + (Ez(2:end) - Ez(1:end-1))/1; % 空间导数
    Ez(2:end) = Ez(2:end) + (Hy(2:end) - Hy(1:end-1))./epsilon(2:end);
    Ez(Nz/2) = Ez(Nz/2) + sin(0.1*t)*exp(-(t-100)^2/200); % 高斯脉冲激励
    
    if t > 500 % 等稳态后记录
        omega_list = [omega_list; abs(fft(Ez))];
    end
end
spectrum = mean(omega_list,1);
plot(linspace(0,1,length(spectrum)), spectrum);

这里用了软激励源,通过傅里叶变换得到频域响应。带隙对应的频率会在频谱上出现凹陷。FDTD的妙处在于能直接看到电磁场的空间分布,比如带隙频率的场会被强烈局域在缺陷层附近。

三种方法各有骚操作:PWE适合快速扫参数,传输矩阵处理多层结构得心应手,FDTD则是肉眼可见的物理过程。下次老板催你算光子晶体,别犹豫,Matlab三连直接糊他脸上。

相关推荐
数模竞赛Paid answer30 分钟前
2024年亚太杯APMCM数学建模大赛A题复杂场景下水下图像增强研究解题全过程文档及程序
数学建模·数据分析·亚太杯
数模竞赛Paid answer19 小时前
2025年MathorCup数学建模A题汽车风阻预测解题文档与程序
算法·数学建模·mathorcup
AI科技星1 天前
人类首张【全域数学公理体系】黑洞内部结构图—基于「0-1-∞」三元本源的全维深度解析
人工智能·算法·机器学习·数学建模·数据挖掘·量子计算
数模竞赛Paid answer2 天前
2024年华数杯数学建模A题机器臂关节角路径的优化设计解题全过程文档及程序
数学建模·数据分析·华数杯
酿情师2 天前
数学建模入门:从零开始了解数学建模(保姆级入门指南)
数学建模
做cv的小昊2 天前
【TJU】应用统计学——第一周作业(1.1 数理统计的基本内容、1.2 数理统计的基本概念)
人工智能·笔记·考研·机器学习·数学建模·概率论
smppbzyc2 天前
2026华中杯数学建模A题【城市绿色物流配送调度】原创论文分享
数学建模·华中杯·2026华中杯·2026华中杯a题·华中杯数学建模竞赛·2026华中杯数学建模竞赛
热心网友俣先生2 天前
2026年东北三省数学建模联赛赛题浅析-助攻快速选题
数学建模
做cv的小昊3 天前
【TJU】研究生应用统计学课程笔记(5)——第二章 参数估计(2.3 C-R不等式)
c语言·笔记·线性代数·机器学习·数学建模·r语言·概率论
fie88893 天前
免疫优化算法在物流配送中心选址中的应用
算法·数学建模