SetDirectory[NotebookDirectory[]];

边界态理论求解

ClearAll["`*"]
i=PauliMatrix[0];x=PauliMatrix[1];y=PauliMatrix[2];z=PauliMatrix[3];
g1=KroneckerProduct[z,z,y];
g2=KroneckerProduct[y,y,i];
Style[MatrixForm[#]&/@{g1,g2},Blue,20];

计算矩阵直积部分的本征值与本征矢量

{val,vec}=Eigensystem[g1];
vec=Normalize/@vec;(*本征矢量归一化处理*)
mass[n_,m_]:=ConjugateTranspose[{#}&/@vec[[n]]].g2.vec[[m]](*计算mass term矩阵部分overlap*)
re1=Table[mass[n,m][[1]],{n,1,4},{m,1,4}];(*矩阵部分在基矢上的投影*)
pro=KroneckerProduct[y,y];(*质量项的矩阵部分*)

搜寻直积分解

prolist=Flatten[Table[KroneckerProduct[i1,i2],{i1,{i,x,y,z}},{i2,{i,x,y,z}}],1];(*构建所有可能的直积形式*)
namelist=Style[#,Blue,20,FontFamily->"Times New Roman"]&/@Flatten@Table[StringJoin[i1,"⊗",i2],{i1,{"i","x","y","z"}},{i2,{"i","x","y","z"}}];
pos=FirstPosition[prolist,pro];
namelist[[pos]](*寻找矩阵直积分解的形式*)

搜寻矩阵直积分解

ClearAll["`*"]
i=PauliMatrix[0];x=PauliMatrix[1];y=PauliMatrix[2];z=PauliMatrix[3];
prolist=Flatten[Table[KroneckerProduct[i1,i2],{i1,{i,x,y,z}},{i2,{i,x,y,z}}],1];(*构建所有可能的直积形式*)
namelist=Style[#,Blue,20,FontFamily->"Times New Roman"]&/@Flatten@Table[StringJoin[i1,"⊗",i2],{i1,{"i","x","y","z"}},{i2,{"i","x","y","z"}}];
Style[MatrixForm[#]&/@prolist,Blue,20,FontFamily->"Times New Roman"];
test=KroneckerProduct[x,x];(*要寻找的矩阵*)
pos=FirstPosition[prolist,test];
namelist[[pos]](*寻找矩阵直积分解的形式*)

矢量直积与点积

ClearAll["`*"]
i=PauliMatrix[0];x=PauliMatrix[1];y=PauliMatrix[2];z=PauliMatrix[3];
{valx,vecx}=Eigensystem[x];(*本征值默认排序为从小到大*)
{valy,vecy}=Eigensystem[y];
{valz,vecz}=Eigensystem[z];
g1=KroneckerProduct[z,z,y];
{val,vec}=Eigensystem[g1];
v1=Flatten@KroneckerProduct[vecz[[2]],vecz[[2]],vecy[[1]]]//Normalize(*第1个基矢*)
v2=Flatten@KroneckerProduct[vecz[[2]],vecz[[1]],vecy[[2]]]//Normalize(*第2个基矢*)
v3=Flatten@KroneckerProduct[vecz[[1]],vecz[[2]],vecy[[2]]]//Normalize(*第3个基矢*)
v4=Flatten@KroneckerProduct[vecz[[1]],vecz[[1]],vecy[[1]]]//Normalize(*第4个基矢*)

vec=Normalize/@vec;(*本征矢量归一化处理*)
vec[[1;;4]]

搜寻基矢直积分解

ClearAll["`*"]
i=PauliMatrix[0];x=PauliMatrix[1];y=PauliMatrix[2];z=PauliMatrix[3];
{valx,vecx}=Eigensystem[x];(*本征值默认排序为从小到大*)
{valy,vecy}=Eigensystem[y];
{valz,vecz}=Eigensystem[z];
eigvecList=Normalize/@Flatten[Table[Flatten@KroneckerProduct[vecz[[i1]],vecz[[i2]],vecy[[i3]]],{i1,1,2},{i2,1,2},{i3,1,2}],2];
namelist=Style[#,Blue,20,FontFamily->"Times New Roman"]&/@Flatten@Table[StringJoin[i3,"⊗",i2,"⊗",i1],{i1,{"|(Subscript[τ, z])=-1⟩","|(Subscript[τ, z])=+1⟩"}},{i2,{"|(Subscript[s, z])=↓⟩","|(Subscript[s, z])=↑⟩"}},{i3,{"|(Subscript[σ, y])=-1⟩","|(Subscript[σ, y])=+1⟩"}}];(*所有可能的基矢直积*)
Style[MatrixForm[#]&/@namelist,Blue,20,FontFamily->"Times New Roman"];
b1=Flatten@KroneckerProduct[vecz[[2]],vecz[[2]],vecy[[1]]]//Normalize(*第1个基矢*);
b2=Flatten@KroneckerProduct[vecz[[2]],vecz[[1]],vecy[[2]]]//Normalize(*第2个基矢*);
b3=Flatten@KroneckerProduct[vecz[[1]],vecz[[2]],vecy[[2]]]//Normalize(*第3个基矢*);
b4=Flatten@KroneckerProduct[vecz[[1]],vecz[[1]],vecy[[1]]]//Normalize(*第4个基矢*);
basisList={b1,b2,b3,b4};
pos=Flatten[FirstPosition[eigvecList,#]&/@basisList];
namelist[[pos]](*寻找矩阵直积分解的形式*)