250 lines
5.9 KiB
Matlab
250 lines
5.9 KiB
Matlab
% Created on 20210203
|
|
% By Guoxian Su
|
|
|
|
clear
|
|
close all
|
|
% clc
|
|
|
|
figure('Position',[2000 100 600 150])
|
|
%% Basis Generation
|
|
initialstate=[1 1];
|
|
|
|
title_ini=num2str(initialstate);
|
|
% initialstate=sparse(initialstate);
|
|
|
|
periotic=0;
|
|
NParticle=sum(initialstate);
|
|
NSite=length(initialstate);
|
|
|
|
|
|
|
|
% Basis Generation
|
|
Partition=intpartitions(NParticle,NSite);
|
|
|
|
basis=[];
|
|
for ii=1:length(Partition)
|
|
tmp=cell2mat(Partition(ii));
|
|
if max(tmp)<=6
|
|
if max(tmp)>1
|
|
C=nchoosek(1:NSite,length(tmp));
|
|
tmp=perms(tmp);
|
|
tmp=unique(tmp,'rows');
|
|
basisTmp=[];
|
|
for jj=1:size(C,1)
|
|
basisTmp1=zeros(size(tmp,1),NSite);
|
|
for kk=1:size(basisTmp1,1)
|
|
basisTmp1(kk,C(jj,:))=tmp(kk,:);
|
|
end
|
|
basisTmp=cat(1,basisTmp,basisTmp1);
|
|
end
|
|
basisTmp=unique(basisTmp,'rows');
|
|
else
|
|
C=nchoosek(1:NSite,NSite-length(tmp));
|
|
basisTmp=ones(size(C,1),NSite);
|
|
for jj=1:size(C,1)
|
|
basisTmp(jj,C(jj,:))=0;
|
|
end
|
|
end
|
|
|
|
|
|
% tmp=padarray(tmp,(NSite-length(tmp)),'post')';
|
|
% basisTmp=perms(tmp);
|
|
% basisTmp=unique(basisTmp,'rows');
|
|
|
|
basis=cat(1,basis,basisTmp);
|
|
|
|
|
|
end
|
|
end
|
|
basis=unique(basis,'rows');
|
|
HSpaceSize=size(basis,1);
|
|
|
|
disp(['Hspace=',num2str(HSpaceSize)])
|
|
disp(' ')
|
|
|
|
inindex=find(sum(abs(basis-initialstate),2)==0);
|
|
initialstate=zeros(HSpaceSize,1);
|
|
initialstate(inindex)=1;
|
|
|
|
%% H constraction
|
|
tic
|
|
% Hopping
|
|
T=zeros(HSpaceSize);
|
|
% T=sparse(T);
|
|
for ii=1:HSpaceSize
|
|
for jj=1:HSpaceSize
|
|
tmp=basis(ii,:)-basis(jj,:);
|
|
if length(find(tmp))==2
|
|
% if periotic==1
|
|
% hopping=[tmp(2:end),tmp(1)].*tmp;
|
|
% else
|
|
hopping=[tmp(2:end),0].*tmp;
|
|
% end
|
|
if length(find(hopping))==1
|
|
if sum(hopping)==-1
|
|
sit1=find(tmp==1);
|
|
sit2=find(tmp==-1);
|
|
% if (sit1+sit2==5)||(sit1+sit2==9)
|
|
T(ii,jj)=-sqrt(max(basis(ii,sit1),basis(jj,sit1)))*...
|
|
sqrt(max(basis(ii,sit2),basis(jj,sit2)));
|
|
% disp([ii,jj,T(ii,jj)])
|
|
% else
|
|
% T(ii,jj)=-sqrt(max(basis(ii,sit1),basis(jj,sit1)))*...
|
|
% sqrt(max(basis(ii,sit2),basis(jj,sit2)))*t2;
|
|
% end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
% Interection
|
|
U=zeros(HSpaceSize);
|
|
% U=sparse(U);
|
|
for ii=1:HSpaceSize
|
|
tmp=basis(ii,:);
|
|
U(ii,ii)=sum(tmp.*(tmp-1))*0.5;
|
|
end
|
|
|
|
disp('H Constracted')
|
|
toc
|
|
disp(' ')
|
|
%% Evolution
|
|
t1_l=[12];%between
|
|
t2_l=t1_l;%inside
|
|
u_l=20;
|
|
Delta=0;
|
|
delta_insideDW_l=0;
|
|
|
|
|
|
% gauge (2,0) or (1,3)
|
|
up=(mod(1:NSite,4)==2).*(basis==0)+(mod(1:NSite,4)==0).*(basis==2);
|
|
down=(mod(1:NSite,4)==2).*(basis==2)+(mod(1:NSite,4)==0).*(basis==0);
|
|
|
|
phi_total=[];
|
|
for qq=1:length(t1_l)
|
|
t1=t1_l(qq);
|
|
t2=t1;
|
|
u=u_l(qq);
|
|
delta_insideDW=delta_insideDW_l(qq);
|
|
|
|
T1=T*t1;
|
|
U1=U*u;
|
|
|
|
% Stagger
|
|
D=zeros(HSpaceSize);
|
|
D=sparse(D);
|
|
for ii=1:HSpaceSize
|
|
tmp=basis(ii,:);
|
|
D(ii,ii)=...
|
|
+sum((NSite-1:-1:0).*tmp)*Delta...
|
|
+sum(-(~mod(1:NSite,2)).*tmp+mod(1:NSite,2).*tmp)*delta_insideDW*0.5;
|
|
|
|
% sum([1 1 0 0 0 0 0 0].*tmp.*2+[0 0 1 1].*tmp)*delta+...
|
|
end
|
|
|
|
H=T1+U1+D;
|
|
[V,E]=eig(H);
|
|
E=diag(E);
|
|
|
|
tspan=0.5;
|
|
Nt=200;
|
|
time=linspace(0,tspan,Nt);
|
|
|
|
tic
|
|
Evolution=expm(-1i*2*pi*H*time(2));
|
|
disp('Transfer Matrix Caculated')
|
|
toc
|
|
disp(' ')
|
|
%%
|
|
phi=zeros(HSpaceSize,length(time));
|
|
odd=zeros(1,length(time));
|
|
even=zeros(1,length(time));
|
|
eps=zeros(1,length(time));
|
|
g=zeros(1,length(time));
|
|
oddSingle=zeros(1,length(time));
|
|
singleOccu=(mod(basis,2));
|
|
tic
|
|
tmpState=initialstate;
|
|
|
|
|
|
for tt=1:length(time)
|
|
|
|
|
|
tmp=abs(tmpState).^2;
|
|
g(tt)=sum(tmpState.*initialstate);
|
|
% tmp=abs(expm(-1i*2*pi*H*time(tt))*initialstate).^2;
|
|
phi(:,tt)=tmp;
|
|
odd(tt)=sum(sum(singleOccu.*mod(1:NSite,2),2).*tmp);
|
|
even(tt)=sum(sum(singleOccu.*(~mod(1:NSite,2)),2).*tmp);
|
|
|
|
% disp(sum((up-down).*tmp,1))
|
|
eps(tt)=sum(sum((-up+down).*tmp,1))*0.5;
|
|
|
|
oddSingle(tt)=sum(sum(singleOccu.*mod(1:NSite,2).*tmp,1));
|
|
% Num(tt,:)=sum(tmp.*basis,1);
|
|
|
|
|
|
plot(time,phi(1,:),'--','LineWidth',1.2)
|
|
hold on
|
|
plot(time,phi(2,:),'-','LineWidth',1.2)
|
|
hold on
|
|
plot(time,phi(3,:),'--','LineWidth',1.2)
|
|
|
|
% Add labels
|
|
xlabel('time') % Label for x-axis
|
|
ylabel('probability') % Label for y-axis
|
|
title(sprintf('J: %.1f , U: %.1f , Delta: %.1f', t1_l(1),u_l(1),Delta))
|
|
|
|
% Add legend
|
|
legend('20', '11', '02')
|
|
|
|
grid on
|
|
hold off
|
|
ylim([0 1])
|
|
drawnow
|
|
|
|
tmpState=Evolution*tmpState;
|
|
end
|
|
disp('Evolution Finished')
|
|
toc
|
|
|
|
%%
|
|
L=abs(g).^2;
|
|
lambda=-log(L)/(2*NSite);
|
|
|
|
phi_total=cat(3,phi_total,phi);
|
|
|
|
end
|
|
|
|
%%
|
|
yticks([0:0.5:1])
|
|
xticks([0:0.125:0.5])
|
|
xticklabels({})
|
|
% legend('left','right')
|
|
|
|
set(findall(gcf,'-property','FontSize'),'FontSize',18)
|
|
set(findall(gcf,'-property','FontName'),'FontName','Times New Roman')
|
|
|
|
savingdir='C:\Users\naeve\Ferdy-Repo\merging_tweezer_code\hubbard_matlab';
|
|
set(gcf,'Renderer','painters')
|
|
print(gcf,[savingdir,'\','HOM',title_ini,'.svg'],'-dsvg')
|
|
|
|
%
|
|
% figure('Position',[0 0 500 500])
|
|
% imagesc(T)
|
|
% axis equal
|
|
% axis off
|
|
% colormap jet
|
|
|
|
% figure(2)
|
|
% hold on
|
|
% errorbar(expdata65(:,1),expdata65(:,2)/2,expdata65(:,3)/2,'o')
|
|
%
|
|
% figure(1)
|
|
% hold on
|
|
% % plot(linspace(0,120,199),RBData(:,2)*1.5,'-')
|
|
% plot(zhoudata(:,1),zhoudata(:,2),'-')
|
|
%
|
|
% xlim([0,20])
|
|
% errorbar(expdata109(:,1),expdata109(:,2),expdata109(:,3),'o') |