本文整理汇总了Python中qutip.qobj.Qobj.dag方法的典型用法代码示例。如果您正苦于以下问题:Python Qobj.dag方法的具体用法?Python Qobj.dag怎么用?Python Qobj.dag使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类qutip.qobj.Qobj
的用法示例。
在下文中一共展示了Qobj.dag方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_QobjMulNonsquareDims
# 需要导入模块: from qutip.qobj import Qobj [as 别名]
# 或者: from qutip.qobj.Qobj import dag [as 别名]
def test_QobjMulNonsquareDims():
"""
Qobj: multiplication w/ non-square qobj.dims
Checks for regression of #331.
"""
data = np.array([[0, 1], [1, 0]])
q1 = Qobj(data)
q1.dims[0].append(1)
q2 = Qobj(data)
assert_equal((q1 * q2).dims, [[2, 1], [2]])
assert_equal((q2 * q1.dag()).dims, [[2], [2, 1]])
# Note that this is [[2], [2]] instead of [[2, 1], [2, 1]],
# as matching dimensions of 1 are implicitly partial traced out.
# (See #331.)
assert_equal((q1 * q2 * q1.dag()).dims, [[2], [2]])
# Because of the above, we also need to check for extra indices
# that aren't of length 1.
q1 = Qobj([[ 1.+0.j, 0.+0.j],
[ 0.+0.j, 1.+0.j],
[ 0.+0.j, 1.+0.j],
[ 1.+0.j, 0.+0.j],
[ 0.+0.j, 0.-1.j],
[ 0.+1.j, 0.+0.j],
[ 1.+0.j, 0.+0.j],
[ 0.+0.j, -1.+0.j]
], dims=[[4, 2], [2]])
assert_equal((q1 * q2 * q1.dag()).dims, [[4, 2], [4, 2]])
示例2: propagator_steadystate
# 需要导入模块: from qutip.qobj import Qobj [as 别名]
# 或者: from qutip.qobj.Qobj import dag [as 别名]
def propagator_steadystate(U):
"""Find the steady state for successive applications of the propagator
:math:`U`.
Parameters
----------
U : qobj
Operator representing the propagator.
Returns
-------
a : qobj
Instance representing the steady-state density matrix.
"""
evals, evecs = la.eig(U.full())
ev_min, ev_idx = _get_min_and_index(abs(evals - 1.0))
evecs = evecs.T
rho = Qobj(vec2mat(evecs[ev_idx]), dims=U.dims[0])
rho = rho * (1.0 / rho.tr())
rho = 0.5 * (rho + rho.dag()) # make sure rho is herm
return rho
示例3: test_QobjDagger
# 需要导入模块: from qutip.qobj import Qobj [as 别名]
# 或者: from qutip.qobj.Qobj import dag [as 别名]
def test_QobjDagger():
"Qobj adjoint (dagger)"
data = np.random.random((5, 5)) + 1j * np.random.random((5, 5)) - (0.5 + 0.5j)
A = Qobj(data)
B = A.dag()
assert_(np.all(B.data.todense() - np.matrix(data.conj().T) == 0))
assert_equal(A.isherm, B.isherm)
assert_equal(A.type, B.type)
assert_equal(A.superrep, B.superrep)
示例4: rand_herm
# 需要导入模块: from qutip.qobj import Qobj [as 别名]
# 或者: from qutip.qobj.Qobj import dag [as 别名]
def rand_herm(N, density=0.75, dims=None):
"""Creates a random NxN sparse Hermitian quantum object.
Uses :math:`H=X+X^{+}` where :math:`X` is
a randomly generated quantum operator with a given `density`.
Parameters
----------
N : int
Shape of output quantum operator.
density : float
Density between [0,1] of output Hermitian operator.
dims : list
Dimensions of quantum object. Used for specifying
tensor structure. Default is dims=[[N],[N]].
Returns
-------
oper : qobj
NxN Hermitian quantum operator.
"""
if dims:
_check_dims(dims, N, N)
# to get appropriate density of output
# Hermitian operator must convert via:
herm_density = 2.0 * arcsin(density) / pi
X = sp.rand(N, N, herm_density, format='csr')
X.data = X.data - 0.5
Y = X.copy()
Y.data = 1.0j * np.random.random(len(X.data)) - (0.5 + 0.5j)
X = X + Y
X.sort_indices()
X = Qobj(X)
if dims:
return Qobj((X + X.dag()) / 2.0, dims=dims, shape=[N, N])
else:
return Qobj((X + X.dag()) / 2.0)
示例5: steadystate_nonlinear
# 需要导入模块: from qutip.qobj import Qobj [as 别名]
# 或者: from qutip.qobj.Qobj import dag [as 别名]
def steadystate_nonlinear(L_func, rho0, args={}, maxiter=10,
random_initial_state=False, tol=1e-6, itertol=1e-5,
use_umfpack=True, verbose=False):
"""
Steady state for the evolution subject to the nonlinear Liouvillian
(which depends on the density matrix).
.. note:: Experimental. Not at all certain that the inverse power method
works for state-dependent Liouvillian operators.
"""
use_solver(assumeSortedIndices=True, useUmfpack=use_umfpack)
if random_initial_state:
rhoss = rand_dm(rho0.shape[0], 1.0, dims=rho0.dims)
elif isket(rho0):
rhoss = ket2dm(rho0)
else:
rhoss = Qobj(rho0)
v = mat2vec(rhoss.full())
n = prod(rhoss.shape)
tr_vec = sp.eye(rhoss.shape[0], rhoss.shape[0], format='coo')
tr_vec = tr_vec.reshape((1, n))
it = 0
while it < maxiter:
L = L_func(rhoss, args)
L = L.data.tocsc() - (tol ** 2) * sp.eye(n, n, format='csc')
L.sort_indices()
v = spsolve(L, v, use_umfpack=use_umfpack)
v = v / la.norm(v, np.inf)
data = v / sum(tr_vec.dot(v))
data = reshape(data, (rhoss.shape[0], rhoss.shape[1])).T
rhoss.data = sp.csr_matrix(data)
it += 1
if la.norm(L * v, np.inf) <= tol:
break
if it >= maxiter:
raise ValueError('Failed to find steady state after ' +
str(maxiter) + ' iterations')
rhoss = 0.5 * (rhoss + rhoss.dag())
return rhoss.tidyup() if qset.auto_tidyup else rhoss