在Python QuTiP中集成失败 [英] Integration not successful in Python QuTiP

查看:420
本文介绍了在Python QuTiP中集成失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试使用QuTiP解决量子力学矩阵微分方程(林德布拉德方程).这是代码:

I have been trying to use QuTiP to solve a quantum mechanics matrix differential equation (a Lindblad equation). Here is the code:

from qutip import *
from matplotlib import *
import numpy as np

hamiltonian = np.array([[215, -104.1, 5.1, -4.3  ,4.7,-15.1 ,-7.8 ],
[-104.1,  220.0, 32.6 ,7.1, 5.4, 8.3, 0.8],
      [ 5.1, 32.6, 0.0, -46.8, 1.0 , -8.1, 5.1],
     [-4.3, 7.1, -46.8, 125.0, -70.7, -14.7, -61.5],
       [ 4.7, 5.4, 1.0, -70.7, 450.0, 89.7, -2.5],
    [-15.1, 8.3, -8.1, -14.7, 89.7, 330.0, 32.7],
     [-7.8, 0.8, 5.1, -61.5,  -2.5, 32.7,  280.0]])
H=Qobj(hamiltonian)
ground=Qobj(np.array([[ 0.0863685 ],
  [ 0.17141713],
  [-0.91780802],
  [-0.33999268],
  [-0.04835763],
  [-0.01859027],
  [-0.05006013]]))

rho0 = ground*ground.dag()
from scipy.constants import *
ktuple=physical_constants['Boltzmann constant in eV/K']
k = ktuple[0]* 8065.6
htuple = physical_constants['Planck constant in eV s'] 
hbar = (htuple[0]* 8065.6)/(2*pi)
gamma=(2*pi)*((k*300)/hbar)*(35/(150*hbar))

L1 = Qobj(np.array([[1,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]]))
L2 = Qobj(np.array([[0,0,0,0,0,0,0],[0,1,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]]))
L3 = Qobj(np.array([[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,1,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]]))
L4 = Qobj(np.array([[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,1,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]]))
L5 = Qobj(np.array([[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,1,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]]))
L6 = Qobj(np.array([[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,1,0],[0,0,0,0,0,0,0]]))
L7 = Qobj(np.array([[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,1]]))
#Since our gamma variable cannot be directly applied onto the Lindblad operator, we must multiply it with the collapse operators:

L1=gamma*L1
L2=gamma*L2
L3=gamma*L3
L4=gamma*L4
L5=gamma*L5
L6=gamma*L6
L7=gamma*L7

options = Options(nsteps=100000)

results = mesolve(H, rho0, np.linspace(0.0, 1000, 20),[L1,L2,L3,L4,L5,L6,L7],[],options=options)
print results

该代码应解决以下方程式:

This code is supposed to solve the following equation:

其中L_i是矩阵(在列表中:[L1,L2,L3,L4,L5,L6,L7]),H是哈密顿数,另一个矩阵,是密度矩阵,而是等于其中T是温度,k是玻尔兹曼常数,并且,其中h是普朗克常数.

where L_i are matrices (in the list: [L1,L2,L3,L4,L5,L6,L7]), H is the hamiltonian, another matrix, is the density matrix, and is a constant equal to where T is the temperature, k is the Boltzmann constant, and , where h is Planck's constant.

每次运行代码时,都会出现以下错误:

Every time I run the code, it gives me the following error:

ZVODE--  At T (=R1) and step size H (=R2), the
       corrector convergence failed repeatedly
       or with abs(H) = HMIN
      In above,  R1 =  0.0000000000000D+00   R2 =  0.1202322246215D-36
/usr/local/lib/python2.7/dist-packages/scipy/integrate/_ode.py:853: UserWarning: zvode: Repeated convergence failures. (Perhaps bad Jacobian supplied or wrong choice of MF o
r tolerances.)
  'Unexpected istate=%s' % istate))
Traceback (most recent call last):
  File "lindbladqutip.py", line 48, in <module>
    results = mesolve(H, rho0, np.linspace(0.0, 1000, 20),[L1,L2,L3,L4,L5,L6,L7],[],options=options)
  File "/projects/d6138712-e5f4-4d85-9d4d-77ce0a7b4a61/.local/lib/python2.7/site-packages/qutip/mesolve.py", line 264, in mesolve
    progress_bar)
  File "/projects/d6138712-e5f4-4d85-9d4d-77ce0a7b4a61/.local/lib/python2.7/site-packages/qutip/mesolve.py", line 692, in _mesolve_const
    return _generic_ode_solve(r, rho0, tlist, e_ops, opt, progress_bar)
  File "/projects/d6138712-e5f4-4d85-9d4d-77ce0a7b4a61/.local/lib/python2.7/site-packages/qutip/mesolve.py", line 866, in _generic_ode_solve
    raise Exception("ODE integration error: Try to increase "
Exception: ODE integration error: Try to increase the allowed number of substeps by increasing the nsteps parameter in the Options class.

进行一些调试分析后,第一次或第二次集成似乎失败了.该错误告诉我增加了我尝试过的nsteps参数.即使这样,它仍然会失败.更改时间列表(np.linspace函数可创建时间列表)也无效.

After doing some debugging analysis, it seems like the first or second integration fails. The error tells me to increase the nsteps parameter, which I have tried. Even then it fails. Changing the list of times (the np.linspace function makes the list of times) also has no effect.

我很想知道如何解决此错误.如果您需要更多详细信息,请发表评论.

I am desperate to know what I can do to fix this error. Please comment if you all need more details.

感谢您的所有帮助!

推荐答案

从编程的角度来看,问题似乎出在gamma的值上,因此是折叠运算符的大小.打印出gamma-它的顺序为10**25-这似乎是阻止求解器收敛的原因.

From a programming point of view, the problem appears to be your value of gamma and therefore the size of your collapse operators. Print out gamma - it is of the order 10**25 - this seems to be what is preventing the solver from converging.

仅出于测试目的(我是工程师,而不是量子物理学家...),我输入了一个较小的gamma值(例如0.1),该求解器似乎可以工作,并且在

Just for testing (I'm an engineer, not a quantum physicist...), I put in a smaller value of gamma (e.g. 0.1), the solver seems to work and gives apparently reasonable output in results.states

我不太了解您的gamma-似乎像您一样具有cm -1 s -2 的单位设置它.我想知道您是否只想除以hbar一次.正如我所说的,我不是量子物理学家,所以我只是在这里基于使程序挂在一起的原因以及一些维度分析来猜测.

I don't quite understand your gamma - it seems to have units of cm-1s-2 as you have set it up. I wonder if you only want to divide by hbar once, maybe. As I say, I'm not a quantum physicist, so I'm only guessing here based on what makes the programming hang together combined with a bit of dimensional analysis.

EDIT

EDIT

OP在注释中指示gamma的错误数量级/单位似乎确实是编程问题(即,防止数值演算收敛),但对于如何计算伽玛并不清楚.在此阶段,可能值得在 http://physics.stackexchange.com http://math.stackexchange.com 的相关信息-如有必要,请参考此内容.

OP indicates in comments that the wrong order of magnitude / units for gamma does seem to be the programming issue (i.e. preventing numerical calculus from converging), but isn't totally clear on how to calculate gamma. At this stage, it may be worth posting a question at either http://physics.stackexchange.com or http://math.stackexchange.com about that - referencing this one for context if necessary.

EDIT 2

EDIT 2

我注意到您在物理站点上问了这个相关问题.这可以清楚地说明γ的表达式来自,从而阐明了所提供的常数项因为这个问题中的30150实际上具有单位(分别为能量和频率).这会更改尺寸分析-伽玛的单位为s -1 ,或者在适当转换的情况下为cm -1 .

I note you asked this related question on the physics site. This makes it clear where the expression for gamma comes from and thereby clarifies that the constant terms presented as simply 30 and 150 in this question actually have units (Energy and frequency respectively). This changes the dimensional analysis - the units of gamma are s-1 or, with appropriate conversion, cm-1.

它还会显示您在评论中提及的值-300 cm -1 .

It also shows the value you mention in comments - 300 cm-1.

这篇关于在Python QuTiP中集成失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆