Простой способ реализовать Qobj на основе нулей и сигмы в Qutip
Я новичок в том, чтобы суетиться, и я изо всех сил пытаюсь создать квантовые объекты с такой формой намного умнее:
from qutip import *
object1 = Qobj([[1, 0, 0, 0],
[0, -1, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0])
object2 = Qobj([[0, 0, 0, -1j],
[0, 0, 1j, 0],
[0, 0, 0, 0],
[0, 0, 0, 0])
И так далее.
Идея состоит в том, чтобы сделать это для всех sigma-подматриц со свободой в том, как создать более хороший способ использования sigma 2x2 матрицы. Есть ли лучший способ сделать это? С уважением, Пол
1 ответ
Прежде всего, QuTiP имеет sigmax
, sigmay
а также sigmaz
операторы, см. документы. Чтобы достичь того, что вы хотите, вы можете взять тензорное произведение сигма-матрицы с матрицей, которая имеет 1 в позиции, куда вы хотите вставить сигма-матрицу:
import numpy as np
import qutip as qt
def one_at(pos=(0,0), N=2):
arr = np.zeros((N, N))
arr[pos] = 1
return qt.Qobj(arr)
>>> one_at((0,0))
Qobj data =
[[1. 0.]
[0. 0.]]
>>> one_at((0,1))
Qobj data =
[[0. 1.]
[0. 0.]]
>>> qt.sigmay()
Qobj data =
[[0.+0.j 0.-1.j]
[0.+1.j 0.+0.j]]
>>> qt.sigmaz()
Qobj data =
[[ 1. 0.]
[ 0. -1.]]
>>> qt.tensor(one_at((0,0)), qt.sigmaz())
Qobj data =
[[ 1. 0. 0. 0.]
[ 0. -1. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
>>> qt.tensor(one_at((0,1)), qt.sigmay())
Qobj data =
[[0.+0.j 0.+0.j 0.+0.j 0.-1.j]
[0.+0.j 0.+0.j 0.+1.j 0.+0.j]
[0.+0.j 0.+0.j 0.+0.j 0.+0.j]
[0.+0.j 0.+0.j 0.+0.j 0.+0.j]]