想请教一个matlab绘图有关的问题
有人可以帮忙绘制一个图么,这个是石墨烯的能带结构图,正负号都要画出来,
我个人不太熟悉matlab,因此想要得到帮助
公式如图所示:
图的效果如下所示:
希望可以得到帮助
有用记得采纳谢谢
下面是使用MATLAB绘制石墨烯的能带结构图的代码,正负号使用箭头表示:
% 设置绘图参数
a = 1;
b = sqrt(3) * a;
kmax = 4 * pi / (3 * a);
k1 = linspace(-kmax, kmax, 100);
k2 = linspace(-kmax, kmax, 100);
[K1, K2] = meshgrid(k1, k2);
E = sqrt(3 + 2 * cos(sqrt(3) * K1 * a / 2) .* cos(K2 * b / 2) + 2 * cos(K2 * b));
% 绘制能带结构图
figure;
hold on;
surf(K1, K2, E);
surf(K1, K2, -E);
colormap(jet);
shading interp;
view(0, 90);
axis equal;
axis([-kmax kmax -kmax kmax]);
set(gca, 'XTick', [-2*pi/3/a 0 2*pi/3/a], 'XTickLabel', {'-K', '\Gamma', 'K'}, 'YTick', [-2*pi/3/b 0 2*pi/3/b], 'YTickLabel', {'-K', '\Gamma', 'K'});
xlabel('k_x');
ylabel('k_y');
zlabel('E');
title('Graphene Band Structure');
% 绘制正负号箭头
posx = [-2*pi/3/a, -pi/a];
posy = [0, sqrt(3)/3*b];
dx = [1, -1];
dy = [1, -1];
quiver(posx, posy, dx, dy, 'Color', 'w', 'LineWidth', 2, 'MaxHeadSize', 0.5);
posx = [-pi/a, 2*pi/3/a];
posy = [sqrt(3)/3*b, 0];
dx = [-1, 1];
dy = [1, -1];
quiver(posx, posy, dx, dy, 'Color', 'w', 'LineWidth', 2, 'MaxHeadSize', 0.5);
posx = [2*pi/3/a, -2*pi/3/a];
posy = [0, -sqrt(3)/3*b];
dx = [-1, 1];
dy = [-1, 1];
quiver(posx, posy, dx, dy, 'Color', 'w', 'LineWidth', 2, 'MaxHeadSize', 0.5);
hold off;
a1 = find(T == min(T((T - cut1 / 1e3) > 0)));
b1 = find(T == min(T((T - (cut1 + 250) / 1e3) > 0)));
data1 = StrainTemp(a1:b1);
a = find(T == min(T((T - cut2 / 1e3) > 0)));
b = find(T == min(T((T - (cut2 + 250) / 1e3) > 0)));
data2 = StrainTemp(a:b);
plot(T, 1e9*squeeze(Strain(n, 1, :)), 'linewidth', 1.5);
hold on; plot([T(a1), T(a1)], [top, dow], 'k-.')
hold on; plot([T(b1), T(b1)], [top, dow], 'k-.')
hold on; plot([T(a), T(a)], [top, dow], 'r-.')
hold on; plot([T(b), T(b)], [top, dow], 'r-.')
xlabel('Time (s)', 'FontName', 'Times New Roman', 'FontSize', 14);
ylabel('Strain (n\epsilon)', 'FontName', 'Times New Roman', 'FontSize', 14);
set(gca, 'FontName', 'Times New Roman', 'FontSize', 14);
您好,我可以为您提供一些绘制石墨烯能带结构图的方法,不过在具体绘图之前,需要先对公式进行解析:
此处给出的公式是石墨烯的能带结构公式,其中 $E$ 表示能量,$\hbar$ 为约化普朗克常数,$a$ 为石墨烯晶格常数,$t_1 = -2.8\ \text{eV}$,$t_2 = 0.18\ \text{eV}$ 分别表示 $C-C$ 键和 $C-C$ 键之间的跃迁强度,$\tau_1 = 1$,$\tau_2 = 3\ \text{nm}$ 分别为 $t_1$ 和 $t_2$ 的空间尺度。
为了绘制出该能带结构,您需要进行以下步骤:
首先,您需要确定绘图区域和坐标轴的范围和大小。石墨烯的布里渊区特殊,需要采用特殊的坐标系。具体来说,石墨烯的第一布里渊区是一个六边形,其中有两个点相隔一个 $\rm K$ 点(也就是 $\Gamma\text{-K-M}$ 方向)。因此,我们通常会将 $\Gamma\text{-K-M}$ 方向沿竖直方向绘制。同时,为了更好地显示能带结构,我们需要将纵轴的能量范围设置为 $-3\ \text{eV}$ 到 $3\ \text{eV}$ 左右。
根据所给公式,您可以计算出每个点的能量值 $E$。其中,变量 $k_x$ 和 $k_y$ 分别代表布里渊区中的 $x$ 和 $y$ 方向波矢。您可以采用网格点的方式来计算能量,具体来说,您可以设置 $k_x$ 和 $k_y$ 的范围和步长,然后利用公式计算每个点的能量。在计算过程中,需要注意一些细节问题,例如 $\hbar$、$a$、$t_1$、$t_2$ 等参数的单位和数值,计算时需要进行换算和取正负号等操作。
计算出各个点的能量之后,您就可以用 MATLAB 的 plot
函数来绘制能带结构图了。不同的能带需要用不同的颜色来表示,同时,需要根据能量的正负号来选择绘制实线或虚线。
下面是一份基本的 MATLAB 代码,供您参考:
% 参数设置
a = 2.46e-10; % 石墨烯晶格常数
t1 = -2.8; % C-C 键跃迁强度
t2 = 0.18; % C-C 键跃迁强度
tau1 = 1; % t1 的空间尺度
tau2 = 3e-9; % t2 的空间尺度
hbar = 1.0545718e-34/(2*pi); % 约化普朗克常数
% 布里渊区的 kx 和 ky 范围和步长
kmin = -pi/tau2;
kmax = pi/tau2;
dk = 0.1*pi/tau2;
% 计算能量
[kx, ky] = meshgrid(kmin:dk:kmax);
E = zeros(size(kx));
for i = 1:size(kx,1)
for j = 1:size(kx,2)
k = [kx(i,j), ky(i,j)];
h = zeros(2,2);
h(1,2) = t1*exp(-norm(k)*tau1*hbar/a);
h(2,1) = h(1,2);
h(2,2) = 2*t2*cos(norm(k)*tau2*a/2);
eigval = eig(h);
E(i,j) = min(eigval);
end
end
% 绘制能带结构图
figure;
hold on;
plot(ky(:,1), E(:,1), 'k', 'LineWidth', 2);
plot(ky(:,1), E(:,1), '--k', 'LineWidth', 2);
plot(ky(:,1), E(:,2), 'r', 'LineWidth', 2);
plot(ky(:,1), E(:,2), '--r', 'LineWidth', 2);
xlim([kmin, kmax]);
ylim([-3, 3]);
xlabel('k_y');
ylabel('Energy (eV)');
title('Graphene band structure');
这里的代码仅给出了能带结构图的基本绘制方法,您可以根据需要进行修改和优化。另外,这份代码中的参数和单位等也需谨慎核对,尤其是计算过程中可能存在的精度问题。有用记得采纳谢谢