1
#This file is part of QuTIP.
3
# QuTIP is free software: you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation, either version 3 of the License, or
6
# (at your option) any later version.
8
# QuTIP is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
# GNU General Public License for more details.
13
# You should have received a copy of the GNU General Public License
14
# along with QuTIP. If not, see <http://www.gnu.org/licenses/>.
16
# Copyright (C) 2011, Paul D. Nation & Robert J. Johansson
18
###########################################################################
19
from scipy import prod, finfo
20
import scipy.sparse as sp
21
import scipy.linalg as la
24
from scipy.sparse.linalg import spsolve
29
if (not isoper(L)) & (not issuper(L)):
30
raise TypeError('Steady states can only be found for oeprators or superoperators.')
35
rhoss.shape=[prod(rhoss.dims[0]),prod(rhoss.dims[1])]
37
rhoss.dims=[l.dims[0],1]
38
rhoss.shape=[prod(rhoss.dims[0]),1]
39
n=len(L.data.todense())
40
L1=L.data+eps*la.norm(L.data.todense(),inf)*sp.eye(n,n)
43
while (la.norm(L.data*v,inf)>tol) & (it<maxiter):
48
raise ValueError('Failed to find steady state after ' + str(maxiter) +' iterations')
50
#normalise according to type of problem
52
trow=eye(rhoss.shape[0],rhoss.shape[0])
53
trow=reshape(trow,(1,n))
54
rhoss.data=rhoss.data/sum(dot(trow,rhoss.data))
56
rhoss.data=rhoss.data/la.norm(rhoss.data)
57
rhoss.data=reshape(rhoss.data,(rhoss.shape[0],rhoss.shape[1])).T