Как построить диагональные матрицы с помощью логики? - PullRequest
0 голосов
/ 25 января 2019

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

1 Ответ

0 голосов
/ 25 января 2019

Я думаю, что это дает тот же результат, более компактно и устраняет проблему с размером.

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]*ε;

Проверьте это тщательно и убедитесь, что все правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...