如何在Python的QuTiP中对量子对象进行指数运算

2 投票
2 回答
1546 浏览
提问于 2025-04-21 00:47

我想把一个量子对象 rho1 的所有元素(其实就是一个矩阵或数组)拿出来,计算这些元素的指数,得到一个新的矩阵或数组 rho2。我该怎么做呢?

显然,numpyexp 函数不管用(我遇到了一个错误 AttributeError: exp)。而 qutip 的函数也不能完成我想要的计算,它返回的数组维度还不一样。

import numpy as np
import qutip as qt

N = 2
M = 2

# angular momentum
Jp = qt.tensor(qt.qeye(M), qt.jmat(N/2.0, '+'))
Jm = qt.tensor(qt.qeye(M), qt.jmat(N/2.0, '-'))

# make initial state
rho1 = qt.tensor(qt.basis(M,0), qt.basis(N+1,N))
print rho1

# make another state
Jx = (Jp + Jm) / 2.0  # angular momentum
# x = np.exp(1j*np.pi*Jx) * rho1
x = (1j*np.pi*Jx).expm() * rho1
rho2 = qt.tensor(qt.basis(M,0), x)
print rho2

2 个回答

0

如果你想对一个叫做qobj的对象进行逐个元素的指数运算,可以直接对它里面的稀疏数据进行操作。

比如,你可以这样做:首先把rho1的值赋给rho2,然后对rho1里面的数据进行指数运算,最后把结果放回rho2里。

具体代码是这样的:

rho2 = rho1
rho2.data.data = np.exp(rho1.data.data)

1

这个可以用:

import numpy as np
import qutip as qt

N = 2
M = 2

Jp = qt.tensor(qt.qeye(M), qt.jmat(J, '+'))   # J+
Jm = qt.tensor(qt.qeye(M), qt.jmat(J, '-'))   # J-

# angular momentum
Jx = (Jp + Jm) / 2.0

# initial state
rho0 = qt.tensor(qt.basis(M,0), qt.basis(N+1,N))

R = (1j*0.5*np.pi*Jx).expm()  # rotation transform
rho = R * rho0

撰写回答