用平面波展开法计算弹簧质量局域共振超材料板带隙结构MATLAB程序
时间: 2023-09-14 13:15:45 浏览: 95
以下是一个用平面波展开法计算弹簧质量局域共振超材料板带隙结构的MATLAB程序示例:
```matlab
% 设置常数
c = 3e8; % 光速
a = 1e-6; % 超材料单元尺寸
d = 0.6*a; % 弹簧质量尺寸
h = a; % 超材料板厚度
e0 = 8.854e-12; % 真空中的电容率
mu0 = 1.257e-6; % 真空中的磁导率
% 设置频率范围
fmin = c/(2*a); % 最低频率
fmax = c/a; % 最高频率
f = linspace(fmin,fmax,100); % 频率数组
% 计算波矢量
kx = linspace(-pi/a,pi/a,101);
ky = kx;
[kx,ky] = meshgrid(kx,ky);
k = sqrt(kx.^2 + ky.^2);
% 计算介电常数和磁导率
epsilon = ones(size(k));
mu = ones(size(k));
omega = 2*pi*f;
for i=1:numel(omega)
omega2 = omega(i)^2;
epsilon(:,:,i) = 1 - (omega2*d^2)/(4*e0*(k.^2 - omega2*mu0*e0));
mu(:,:,i) = 1 - (omega2*d^2)/(4*mu0*(k.^2 - omega2*mu0*e0));
end
% 计算色散关系
kz = sqrt((omega/c).^2.*epsilon.*mu - kx.^2 - ky.^2);
% 计算频率-波矢量图
figure;
for i=1:numel(f)
surf(kx(:,:,i),ky(:,:,i),kz(:,:,i),'LineStyle','none');
hold on;
end
xlabel('k_x');
ylabel('k_y');
zlabel('k_z');
title('Dispersion Relation');
% 计算带隙结构
gap = zeros(size(f));
for i=1:numel(f)
band = kz(:,:,i);
band(isnan(band)) = 0;
band = sort(band(:));
gap(i) = band(ceil(numel(band)/2)+1) - band(floor(numel(band)/2)+1);
end
% 绘制带隙结构图
figure;
plot(f,gap);
xlabel('Frequency (Hz)');
ylabel('Band Gap (Hz)');
title('Band Structure');
```
这个程序计算出了一个弹簧质量局域共振超材料板的色散关系和带隙结构,可以帮助你理解和设计这种结构的性质。注意,这个程序只是一个示例,你需要根据你的具体情况进行修改和调整。
阅读全文