关于石墨烯载流子密度图matlab仿真问题

请教一下各位专家,关于石墨烯载流子密度图matlab仿真问题。本人想复现文献中的图,但总是不对。
文献:

img

仿真的目标是文献support imformation中的公式S7,

img


仿真的目标图

img

根据文献所提供的引用中的公式推导:

img

img

img

本人推导,不知道对不对,请各位指教:

img

这是本人写的代码,对与τ的理解不够,所以随便设了个,所得到的函数图是一条直线与文献不符,我应该怎样修改代码

img

img

有没有相关的代码,提供一下,模拟试试。
有代码的话,模拟和实际相差很大吗。

你t_values的值首尾取的太小了,应该是不用乘以10的-15次方的,中间的步长可以乘以10的-15次方,所以画出来的图只是在10^-15这个数量级的一个范围内的一个图

你把代码发出来,不要截图,调试起来更方便

N_values改成for循环的形式计算,方便加断点调试查看参数值是否传递更新正确,

clc, clear, close all;

t_values = -350*10^-15:0.2*10^-15:700*10^-15; % 指定 t 的取值范围
N_values = zeros(size(t_values)); % 初始化 N_values 数组

hbar = 1.05457e-34;
V_F = 10e6; 
hbar_w = 0.6; 
D = hbar_w / (pi * hbar^2 * V_F^2); 
pi_alphaf = 0.0023;
tau = 8.2e-17; 
tau1 = 7e-15; 
I = 1;

for i = 1:length(t_values)
    t_temp = t_values(i); % 临时保存 t 的值

    % 定义函数
    f = @(x) exp(-x.^2/tau.^2 + (x-t_temp)/tau1 + ...
        (pi_alphaf*I)/(D*hbar_w)*sqrt(pi)*tau*(erf((x-t_temp)/tau)-erf(0)));

    % 计算函数值
    N_values(i) = D - 2*pi_alphaf*I/(pi*hbar^2*V_F^2)*integral(f, -inf, t_temp);
end

plot(t_values, N_values)
xlabel('t')
ylabel('N')
title('关于 t 的函数曲线')
grid on

这样绘制出来的N_values还是定值,
随便篡改一下各参数的量纲(e-34这种数值太小了,对于integral函数来说计算精度可能精度没有那么高), N_values开始有变化:

img

说明程序语法和逻辑应该没错,需要对照paper检查一下参数的量纲是否有误。

这个文献有地址吗?

文献网盘
链接:https://pan.baidu.com/s/1E1K2BgHtyCxRF_QJFoxbJQ?pwd=edle
提取码:edle

文献地址发一下

matlab化石墨烯,锯齿石墨烯磁性hubbard matlab计算程序

主程序

Nx=3;

Ny=50;

n=Nx*Ny;

[x,y]=zigzagP(Ny,Nx);

t1=-2.7;

H=Hamiltonian_NN_graphene(x,y,t1);

HD=H(n/3+1:2/3*n,n/3+1:2/3*n);

HDL=H(n/3+1:2/3*n,1:n/3);

HDR=H(n/3+1:2/3*n,2*n/3+1:n);

x=x(n/3+1:2/3*n,1);

y=y(n/3+1:2/3*n,1);

m=length(HD); % 体系总的原子个数

Nupavg=0.5*eye(m,m); %将所有的取为1作初始值,自旋向上

Ndownavg=0.5*eye(m,m); %将所有的取为1作初始值,自旋向下

u=0; %费米能级

Ncc=20; %迭代次数

dk=0.01; %布里渊区步长

T=0.038; %温度

U=2; %Hubbard系数

k=0:dk:2*pi; %布里渊区路径

nk=length(k); % 布里渊区离散点个数

band_up=zeros(m,nk); % 记录最后自旋向上的能带

band_down=zeros(m,nk); % 记录最后自旋向下的能带

updensity=zeros(Ncc,m); %储存每一步迭代上自旋电子密度,观察是否收敛

downdensity=zeros(Ncc,m); % 储存每一步迭代下自旋电子密度,观察是否收敛

Nupavg(1:Ny:m,1:Ny:m)=0.65; %上边界上自旋电子密度

Ndownavg(1:Ny:m,1:Ny:m)=0.35; %上边界下自旋电子密度

Nupavg(Ny:Ny:m,Ny:Ny:m)=0.35; %下边界上自旋电子密度

Ndownavg(Ny:Ny:m,Ny:Ny:m)=0.65; %下边界下自旋电子密度

%%%%%%%%%%% 参数设置完成%%%%%%%%%%%

for nc=1:Ncc

Nupavg0=zeros(m,m); %初始化Nupavg的临时变量用于k空间的积分

Ndownavg0=zeros(m,m); %初始化Ndownavg的临时变量用于k空间的积分

for i=1:nk

Hk=HD+HDL*exp(-1i*k(i))+HDR*exp(1i*k(i));

[Adown,Edown]=eig(Hk+U*Nupavg-0.5*U*eye(m,m)); %通过Nupavg求解出Adown,Adown为down波函数系数向量

[Aup,Eup]=eig(Hk+U*Ndownavg-0.5*U*eye(m,m)); %通过Ndownavg求解出Aup,Aup为up波函数系数向量

% 求电子密度的向量化写法

f_up=Fermi_funtion(diag(Eup),u,T)';

f_down=Fermi_funtion(diag(Edown),u,T)';

fermi_up = f_up(ones(m,1),:);

fermi_down = f_down(ones(m,1),:);

Nup = sum(Aup.*conj(Aup).*fermi_up,2);

Ndown = sum(Adown.*conj(Adown).*fermi_down,2);

Nupavg0=Nupavg0+diag(Nup)*dk;

Ndownavg0=Ndownavg0+diag(Ndown)*dk;

end

Nupavg=Nupavg0/(2*pi); %更新Nupavg

Ndownavg=Ndownavg0/(2*pi); %更新Ndownavg

updensity(nc,:)=diag(Nupavg);

downdensity(nc,:)=diag(Ndownavg);

if mod(nc,5)==0

fprintf('已完成第%d次迭代\n',nc)

end

end

%%%%%%%%%%%%%%%%迭代完成,开始计算能带%%%%%%%%%%%%%%

for i=1:nk

Hk=HD+HDL*exp(-1i*k(i))+HDR*exp(1i*k(i));

[Adown,Edown]=eig(Hk+U*Nupavg-0.5*U*eye(m,m)); %通过Nupavg求解出Adown,Adown为down波函数系数向量

[Aup,Eup]=eig(Hk+U*Ndownavg-0.5*U*eye(m,m)); %通过Ndownavg求解出Aup,Aup为up波函数系数向量

band_up(:,i) = diag(Eup);

band_down(:,i) = diag(Edown);

end

plot(k,band_down,'b.')

hold on

plot(k,band_up,'r.')

set(gca,'YLim',[-2.7 2.7]);

set(gca,'XLim',[0 2*pi]);

生成体系座标程序

function [x,y]=zigzagP(N,number);

x=zeros(N*number,1);

y=zeros(N*number,1);

x(1)=sqrt(3)/2;

y(1)=0;

x(2)=0;

y(2)=-0.5;

for j=1:N-2

y(j+2)=y(j)-1.5;

if mod(j+2,4)==1||mod(j+2,4)==0

x(j+2)=sqrt(3)/2;

else

x(j+2)=0;

end

end

for j=1:number-1

for l=1:N

x(j*N+l)=x(l)+j*sqrt(3);

y(j*N+l)=y(l);

end

end

最近邻哈密顿量与前面程序相同

费米函数

function f=Fermi_funtion(E,u,T)

f=(exp((E-u)/T)+ones(length(E),1)).^-1;

具体是哪篇文章啊,要从头看文章理解的基础上才好做。如果你还没解决,可以尝试联系论文作者。

matlab绘制石墨烯_鱼弦的博客-CSDN博客 其中,chi1和chi2分别表示两个不同的能带,公式中的cos函数和sqrt函数用于计算能带的形状。你需要根据自己的数据和需求,相应地修改公式中的参数和计算方式,确保能够正确绘制出石墨烯的能带结构图。用matlab绘制石墨烯的能带结构图,再网络上找的代码,但是因为我自己的数据与代码中的不符,我就想着改一下数据,结果改完之后就不能运行。针对以上问题,建议你先仔细检查代码和公式的正确性,确保变量名、符号和公式都正确。公式中符号错误:在公式中出现了“2^s”这个符号,但应该是“2*sin(√3kxa/2)”。 https://blog.csdn.net/feng1790291543/article/details/130952698?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%85%B3%E4%BA%8E%E7%9F%B3%E5%A2%A8%E7%83%AF%E8%BD%BD%E6%B5%81%E5%AD%90%E5%AF%86%E5%BA%A6%E5%9B%BEmatlab%E4%BB%BF%E7%9C%9F%E9%97%AE%E9%A2%98&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-130952698.142^v93^chatsearchT3_2&spm=1018.2226.3001.4187