如何用逻辑构造对角矩阵?
How to construct diagonal matrices with logical?
我想构建这些矩阵来表示具有原子的系统。按照我的方式,我无法以正确的方式得到线性情况 (n=1),我只是让这些块增长了两个元素。如果我让它们线性增长就好了,比如 n=1 是一个向量,n=2 是一个 2x2 矩阵,然后继续...
Energy = DiagonalMatrix[Flatten[{1, Table[{1, 1}, {i, 1, n}]}],
0]*(w + \[Eta]*I);
UAB = UBA =
DiagonalMatrix[Flatten[{t, Table[{t, t}, {i, 1, n}]}], 0];
HA = DiagonalMatrix[
Flatten[{\[Epsilon], Table[{\[Epsilon], \[Epsilon]}, {i, 1, n}]}],
0] + DiagonalMatrix[Flatten[{Table[{0, t}, {i, 1, n}]}], 1] +
DiagonalMatrix[Flatten[{Table[{0, t}, {i, 1, n}]}], -1];
HB = DiagonalMatrix[
Flatten[{\[Epsilon], Table[{\[Epsilon], \[Epsilon]}, {i, 1, n}]}],
0] + DiagonalMatrix[Flatten[{Table[{t, 0}, {i, 1, n}]}], 1] +
DiagonalMatrix[Flatten[{Table[{t, 0}, {i, 1, n}]}], -1]
我做了这样的东西,有没有紧凑的方法?
Energy = IdentityMatrix[n]*(w + I*\[Eta]) // MatrixForm
UAB = UBA = Table[If[i == j, t, 0], {i, 1, n}, {j, 1, n}] // MatrixForm
HA = Table[
If[i == j - 1, If[Abs[i - If[OddQ[j], j, i]] == 1, t, 0], 0], {i,
1, n}, {j, 1, n}] +
Table[If[i == j + 1, If[Abs[i - If[OddQ[j], j, i]] == 1, 0, t],
0], {i, 1, n}, {j, 1, n}] +
Table[If[i == j, \[Epsilon], 0], {i, 1, n}, {j, 1, n}] // MatrixForm
HB = Table[
If[i == j - 1, If[Abs[i - If[OddQ[j], j, i]] == 1, 0, t], 0], {i,
1, n}, {j, 1, n}] +
Table[If[i == j + 1, If[Abs[i - If[OddQ[j], j, i]] == 1, t, 0],
0], {i, 1, n}, {j, 1, n}] +
Table[If[i == j, \[Epsilon], 0], {i, 1, n}, {j, 1, n}] //
MatrixForm
我认为这会产生相同的结果,更加紧凑并解决了您的尺寸问题。
n=8;
va=Mod[Range[n]+1,2]*t;(*List of alternating 0 and t*)
vb=Mod[Range[n],2]*t; (*List of alternating t and 0*)
Energy = IdentityMatrix[n]*(w + I*η);
UAB = UBA = IdentityMatrix[n]*t;
HA=DiagonalMatrix[va,1,n]+DiagonalMatrix[va,-1,n]+IdentityMatrix[n]*ε;
HB=DiagonalMatrix[vb,1,n]+DiagonalMatrix[vb,-1,n]+IdentityMatrix[n]*ε;
仔细测试并确保一切正确。
我想构建这些矩阵来表示具有原子的系统。按照我的方式,我无法以正确的方式得到线性情况 (n=1),我只是让这些块增长了两个元素。如果我让它们线性增长就好了,比如 n=1 是一个向量,n=2 是一个 2x2 矩阵,然后继续...
Energy = DiagonalMatrix[Flatten[{1, Table[{1, 1}, {i, 1, n}]}],
0]*(w + \[Eta]*I);
UAB = UBA =
DiagonalMatrix[Flatten[{t, Table[{t, t}, {i, 1, n}]}], 0];
HA = DiagonalMatrix[
Flatten[{\[Epsilon], Table[{\[Epsilon], \[Epsilon]}, {i, 1, n}]}],
0] + DiagonalMatrix[Flatten[{Table[{0, t}, {i, 1, n}]}], 1] +
DiagonalMatrix[Flatten[{Table[{0, t}, {i, 1, n}]}], -1];
HB = DiagonalMatrix[
Flatten[{\[Epsilon], Table[{\[Epsilon], \[Epsilon]}, {i, 1, n}]}],
0] + DiagonalMatrix[Flatten[{Table[{t, 0}, {i, 1, n}]}], 1] +
DiagonalMatrix[Flatten[{Table[{t, 0}, {i, 1, n}]}], -1]
我做了这样的东西,有没有紧凑的方法?
Energy = IdentityMatrix[n]*(w + I*\[Eta]) // MatrixForm
UAB = UBA = Table[If[i == j, t, 0], {i, 1, n}, {j, 1, n}] // MatrixForm
HA = Table[
If[i == j - 1, If[Abs[i - If[OddQ[j], j, i]] == 1, t, 0], 0], {i,
1, n}, {j, 1, n}] +
Table[If[i == j + 1, If[Abs[i - If[OddQ[j], j, i]] == 1, 0, t],
0], {i, 1, n}, {j, 1, n}] +
Table[If[i == j, \[Epsilon], 0], {i, 1, n}, {j, 1, n}] // MatrixForm
HB = Table[
If[i == j - 1, If[Abs[i - If[OddQ[j], j, i]] == 1, 0, t], 0], {i,
1, n}, {j, 1, n}] +
Table[If[i == j + 1, If[Abs[i - If[OddQ[j], j, i]] == 1, t, 0],
0], {i, 1, n}, {j, 1, n}] +
Table[If[i == j, \[Epsilon], 0], {i, 1, n}, {j, 1, n}] //
MatrixForm
我认为这会产生相同的结果,更加紧凑并解决了您的尺寸问题。
n=8;
va=Mod[Range[n]+1,2]*t;(*List of alternating 0 and t*)
vb=Mod[Range[n],2]*t; (*List of alternating t and 0*)
Energy = IdentityMatrix[n]*(w + I*η);
UAB = UBA = IdentityMatrix[n]*t;
HA=DiagonalMatrix[va,1,n]+DiagonalMatrix[va,-1,n]+IdentityMatrix[n]*ε;
HB=DiagonalMatrix[vb,1,n]+DiagonalMatrix[vb,-1,n]+IdentityMatrix[n]*ε;
仔细测试并确保一切正确。