Я хотел бы построить эти матрицы для представления системы с атомами. Как я и сделал, я не могу правильно получить линейный случай (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