本程序为二维光子晶体Matlab仿真程序,该结果与文献【1】Molding the flow of light,p68 figure 2相互吻合

主程序

%This is a simple demo for Photonic Crystals simulation
%10 points is considered.
%---------------------------------------M
%| / |
%| / |
%| / |
%| --------------------|X
%| T |
%| |
%| |
%---------------------------------------
%by Gao Haikuo
%date:20170411
clear; clc; epssys=1.0e-6; %设定一个最小量,避免系统截断误差或除0错误
global NG G f Nkpoints
%this is the lattice vector and the reciprocal lattice vector
a=1; a1=a*[1 0]; a2=a*[0 1];
b1=2*pi/a*[1 0];b2=2*pi/a*[0 1];
Nkpoints=10; %每个方向上取的点数,
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%定义晶格的参数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
epsa = 8.9; %inner
epsb = 1; %outer
Pf = 0.1257; %Pf = Ac/Au 填充率,可根据需要自行设定
Au =a^2; %二维格子原胞面积
Rc = (Pf *Au/pi)^(1/2); %介质柱截面半径
Ac = pi*(Rc)^2; %介质柱横截面积

%construct the G list
NrSquare = 10;
NG =(2*NrSquare+1)^2; % NG is the number of the G value
G = zeros(NG,2);
i = 1;
for l = -NrSquare:NrSquare
for m = -NrSquare:NrSquare
G(i,:)=l*b1+m*b2;
i = i+1;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%生成k空间中的f(Gi-Gj)的值,i,j 从1到NG。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
f=zeros(NG,NG);
for i=1:NG
for j=1:NG
Gij=norm(G(i,:)-G(j,:));
if (Gij < epssys)
f(i,j)=(1/epsa)*Pf+(1/epsb)*(1-Pf);
else
f(i,j)=(1/epsa-1/epsb)*Pf*2*besselj(1,Gij*Rc)/(Gij*Rc);
end;
end;
end;
T=(2*pi/a)*[epssys 0];
M=(2*pi/a)*[1/2 1/2];
X=(2*pi/a)*[1/2 0];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[MT_TE_eig]=getEigValue(M,T,0);
[TX_TE_eig]=getEigValue(T,X,0);
[XM_TE_eig]=getEigValue(X,M,0);
[MT_TM_eig]=getEigValue(M,T,1);
[TX_TM_eig]=getEigValue(T,X,1);
[XM_TM_eig]=getEigValue(X,M,1);
%draw
kaxis = 0;
TXaxis = kaxis:norm(T-X)/(Nkpoints-1):(kaxis+norm(T-X));
kaxis = kaxis + norm(T-X);
XMaxis = kaxis:norm(X-M)/(Nkpoints-1):(kaxis+norm(X-M));
kaxis = kaxis + norm(X-M);
MTaxis = kaxis:norm(M-T)/(Nkpoints-1):(kaxis+norm(M-T));
kaxis = kaxis + norm(M-T);

Ntraject = 3;
figure (1)
hold on;
Nk=Nkpoints;
for k=1:NG
for i=1:Nkpoints
EigFreq_TE(i+0*Nk) = TX_TE_eig(i,k)/(2*pi/a);
EigFreq_TE(i+1*Nk) = XM_TE_eig(i,k)/(2*pi/a);
EigFreq_TE(i+2*Nk) = MT_TE_eig(i,k)/(2*pi/a);
EigFreq_TM(i+0*Nk) = TX_TM_eig(i,k)/(2*pi/a);
EigFreq_TM(i+1*Nk) = XM_TM_eig(i,k)/(2*pi/a);
EigFreq_TM(i+2*Nk) = MT_TM_eig(i,k)/(2*pi/a);
end
linehandle=plot(TXaxis(1:Nk),EigFreq_TE(1+0*Nk:1*Nk),'r',...
XMaxis(1:Nk),EigFreq_TE(1+1*Nk:2*Nk),'r',...
MTaxis(1:Nk),EigFreq_TE(1+2*Nk:3*Nk),'r',...
TXaxis(1:Nk),EigFreq_TM(1+0*Nk:1*Nk),'b',...
XMaxis(1:Nk),EigFreq_TM(1+1*Nk:2*Nk),'b',...
MTaxis(1:Nk),EigFreq_TM(1+2*Nk:3*Nk),'b',...
'LineWidth',1 );
set (linehandle, 'linesmoothing', 'on');
end
grid on;
xlabel('K-Space');
yLabel('Frequency(\omegaa/2\piC)');
axis([0 MTaxis(Nkpoints) 0 0.8]);
set(gca,'XTick',[TXaxis(1), TXaxis(Nkpoints),...
XMaxis(Nkpoints),MTaxis(Nkpoints)]);
xtixlabel = strvcat('T','X','M','T');
set(gca,'XTickLabel',xtixlabel);

核心获取本征值的函数

function [eigValue]=getEigValue(k_begin,k_end,mode)
%mode :0 for TE 1 for TH
global NG G f Nkpoints
THETA=zeros(NG,NG); %待解的TE波矩阵
stepsize=0:1/(Nkpoints-1):1; %每个方向上的步长
TX_TE_eig = zeros(Nkpoints,NG);
for n=1:Nkpoints %scan the 10 points along the directionfprintf(['\n k-point:',int2str(n),'of',int2str(Nkpoints),'.\n']);step = stepsize(n)*(k_end-k_begin)+k_begin;  % get the kfor i=1:(NG-1)   % Gfor j=(i+1):NG % G'
            kGi = step+G(i,:); %k+GkGj = step+G(j,:); %K+G'
            switch modecase 0  %TE modeTHETA(i,j)=f(i,j)*dot(kGi,kGj); %(K+G)(K+G')f(G-G')case 1 %TH modeTHETA(i,j)=f(i,j)*norm(kGi)*norm(kGj);endTHETA(j,i)=conj(THETA(i,j)); endend    for i=1:NGkGi = step+G(i,:);THETA(i,i)=f(i,i)*norm(kGi)*norm(kGi); endeigValue(n,:)=sort(sqrt(eig(THETA))).';
end

转载于:https://www.cnblogs.com/Iknowyou/p/6705250.html

二维光子晶体带隙仿真Matlab完全程序_平面波展开法相关推荐

  1. 空时二维自适应处理-相控阵雷达二维杂波谱分布仿真Matlab

    空时二维自适应处理-相控阵雷达二维杂波谱分布仿真 非均匀性杂波回波 相控阵雷达二维杂波谱分布 相控阵雷达二维杂波谱分布仿真 非均匀性杂波回波   在机载雷达杂波仿真时,需要综合考虑杂波单元的反射率模型 ...

  2. 二维光子晶体带隙绘制程序_平面波展开法(最终版)

    1.主程序 %This is a simple demo for Photonic Crystals simulation %10 points is considered. %by Gao Haik ...

  3. matlab晶体能带,matlab平面波展开法的二维光子晶体能带研究+程序

    摘  要 :二维光子晶体可以作为对光子传输控制的新型材料.本文主要通过平面波展开法对二维光子晶体进行数值计算及其性质分析.首先我们介绍了二维光子晶体的基础概念.结构.介电性能等特性.然后基于麦克斯韦方 ...

  4. 同轴全息matlab仿真,HoloSpec2D 二维全息谱的matlab程序,含有频谱校正 276万源代码下载- www.pudn.com...

    文件名称: HoloSpec2D下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 61 KB 上传时间: 2014-05-24 下载次数: 24 详细说明:二 ...

  5. 【光学】基于Matlab实现二维光子晶体的能带图和场

    1 内容介绍 为了了解电磁波在光子晶体中的传输特性,用MATLAB与时域有限差分法把电磁波在真空与光子晶体中的传播实时可视化,并给出了场的空间静态分布.数值模拟的结果表明,禁带中的波被光子晶体控制,其 ...

  6. matlab 三维数组运算,MATLAB二维三维画图仿真数组运算

    MATLAB二维三维画图仿真数组运算 1. 数学 (1) 数组运算: x=[1 2 3 4]; y=[3 4 5 6]; z=x+y %数组x与数组y相加得到数组z z = 4 6 8 10 z=x- ...

  7. matlab油气田渗流,二维渗流场的MATLAB仿真

    文章编号:100926825(2007) 220362202二维渗流场的 MATLAB 仿真 收稿日期:20070423 作者简介:陶 承(1978) ,女 ,助理工程师 ,临安市水利水电局 ,浙江 ...

  8. 二维光子晶体禁带的遗传优化算法实现

    二维光子晶体禁带的遗传优化算法MATLAB源代码 光子晶体中因周期性结构而存在的频率禁带称为光子禁带,光子禁带的存在是光子晶体具有广泛应用前景的重要原因. 禁带越大,可控光的频带也越宽,因此如何设计合 ...

  9. 绘制恒定频率下的二维光子晶体光子带图谱

    绘制恒定频率下的二维光子晶体光子带图谱 在光子晶体研究领域中,光子带图谱是非常重要的工具.它可以展示出不同频率下光的传播状态,并且为设计光子晶体的光子学性质提供依据.本篇文章将介绍如何使用Matlab ...

  10. 二维有限元方程matlab,有限元法求解二维Poisson方程的MATLAB实现

    有限元法求解二维 Poisson 方程的 MATLAB 实现 陈 莲a ,郭元辉b ,邹叶童a ( 西华师范大学 a. 数学与信息学院; b. 教育信息技术中心,四川南充 6437009) 摘 要: ...

最新文章

  1. RDA5807 FM收音机模块
  2. MSM USB插入流程代码分析
  3. c语言int类型乘法溢出_【原创】C语言指针自我总结
  4. 箱线图怎么判断异常值_异常数值识别(检测)
  5. modbus发送接收_自己编写MODBUS协议代码所踩过的坑
  6. makefile初步制作,arm-linux- (gcc/ld/objcopy/objdump)详解
  7. 【MPI0】学习资料搜集
  8. 【Java就业培训教程】——单态设计模式
  9. JAVA前后端分离maven项目打包上线部署具体步骤教程
  10. 计算机地图制图的优点,计算机地图制图实习报告.doc
  11. 帝国cms 首页php,帝国CMS新增加专题页面
  12. tf卡可以自己裁剪成nm卡_手头这多卡—到底哪款TF卡才值得购买?
  13. 数学符号Span的含义
  14. 交大家简单又好吃的蛋黄酥的做法
  15. 利用蒙特卡洛(Monte Carlo)方法计算π值
  16. 这套监控系统让打工人颤抖:离职倾向、摸鱼通通都能被监测!
  17. 4 数据可视化大屏 - 布局: BootStrap 之网格Grid
  18. 阿里云短信服务使用介绍
  19. Linux 文件的属性
  20. 思岚科技定位导航技术凸显 成为服务机器人企业首选品牌

热门文章

  1. linux光盘挂载加载过程,如何在Linux系统下挂载光盘
  2. Python爬虫实践(三) -- 用户全量数据爬取、多媒体信息爬取
  3. 输入文字加下划线_Word下划线你知道多少?
  4. python折线图实线虚线_python – matplotlib中的虚线而不是缺失值
  5. CS224N刷题——Assignment1.3_word2vec
  6. URL跳转与webview安全浅谈
  7. Redis进阶不得不了解的内存优化细节
  8. Unity调用Android类方法
  9. AWS ec2 安装手记
  10. MQ通道搭建以及连通性检查