LennartNaeve_code/merging_tweezer_code/hubbard_matlab/ED_2Sites_parity.m
2025-04-25 20:52:11 +02:00

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')