构建时间依赖系统
QobjEvo
- class QobjEvo
一个用于表示时间依赖的量子对象的类,例如量子算符和状态。
重要的是,
QobjEvo实例用于表示在使用 QuTiP 求解器时的时间依赖量子对象。一个
QobjEvo实例可以从以下之一构建:一个可调用的
f(t: double, args: dict) -> Qobj,返回在时间t处的量子对象的值。一个
[Qobj, Coefficient]对,其中Coefficient可以是任何coefficient可以接受的项(例如一个函数、一个系数的numpy数组、一个字符串表达式)。一个可调用对象、对或
Qobj的列表。一个
QobjEvo(在这种情况下会创建一个副本,所有其他参数都会被忽略,除了args,如果传递了,它将替换现有的参数)。
- Parameters:
- Q_objectcallable, list or
Qobj 时间依赖量子对象的规范。请参阅上文的完整描述和下面的示例部分以获取示例。
- argsdict, optional
一个包含系数参数的字典。 如果没有需要参数的函数或字符串系数存在,则可以省略参数。
- tlistarray-like, optional
与作为numpy数组提供的系数值对应的时间列表。如果没有作为numpy数组提供系数,
tlist可以省略,否则它是必需的。tlist中的时间不需要等距,但必须排序。默认情况下,将使用三次样条插值来在时间
t处插值(numpy数组)系数的值。如果系数被视为阶跃函数,请传递参数order=0(见下文)。- orderint, default=3
用于在时间
t插值(numpy数组)系数值的样条插值的顺序。0使用前一个或左侧的值。- copybool, default=True
是否复制在
Q_object参数中提供的Qobj实例。- compressbool, default=True
是否在实例创建后压缩
QobjEvo实例的项。这将单个项中的常数项相加,并将具有相同
Qobj的[Qobj, coefficient]对组合成一个包含系数总和的单一对。参见
compress。- function_style{None, “pythonic”, “dict”, “auto”}
Q_object中可调用对象使用的函数签名风格。 如果风格是None,则使用qutip.settings.core["function_coefficient_style"]的值。否则,提供的值将覆盖全局设置。- boundary_conditions2-Tuple, str or None, optional
样条评估的边界条件。默认值为None。 对应于scipy.interpolate.make_interp_spline的bc_type。 详情请参阅Scipy的文档: https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.make_interp_spline.html
- Q_objectcallable, list or
- Attributes:
- dimslist
跟踪张量结构的维度列表。
- shape(int, int)
跟踪张量结构的维度列表。
- typestr
量子对象的类型:'bra'、'ket'、'oper'、'operator-ket'、'operator-bra' 或 'super'。
- superrepstr
如果type是‘super’时使用的表示形式。可以是‘super’(Liouville形式)或‘choi’(迹为维度的Choi矩阵)。
示例
一个从函数构造的
QobjEvo:def f(t, args): return qutip.qeye(N) * np.exp(args['w'] * t) QobjEvo(f, args={'w': 1j})
对于基于列表的
QobjEvo,列表必须由Qobj或[Qobj, Coefficient]对组成:QobjEvo([H0, [H1, coeff1], [H2, coeff2]], args=args)
系数可以使用
Coefficient对象指定,也可以通过函数、字符串、numpy数组或任何可以传递给coefficient函数的对象指定。有关完整描述,请参阅coefficient的文档。一个由函数指定的系数的示例:
def f1_t(t, args): return np.exp(-1j * t * args["w1"]) QobjEvo([[H1, f1_t]], args={"w1": 1.})
以及由字符串表达式指定的系数:
H = QobjEvo( [H0, [H1, 'exp(-1j*w1*t)'], [H2, 'cos(w2*t)']], args={"w1": 1., "w2": 2.} )
系数也可以表示为numpy数组,给出系数值的列表:
tlist = np.logspace(-5, 0, 100) H = QobjEvo( [H0, [H1, np.exp(-1j * tlist)], [H2, np.cos(2. * tlist)]], tlist=tlist )
系数数组的长度必须与tlist相同。
一个
QobjEvo也可以通过简单的算术操作来构建,将Qobj与Coefficient结合,例如:coeff = qutip.coefficient("exp(-1j*w1*t)", args={"w1": 1}) qevo = H0 + H1 * coeff
- __call__()
获取在
t时刻的Qobj。- Parameters:
- tfloat
评估
QobjEvo的时间。- _argsdict [optional]
新参数作为一个字典。使用
arguments(new_args)更新参数。- **kwargs
新的参数作为关键字。使用
arguments(**new_args)更新参数。
注释
如果位置参数
_args和关键字参数都传递了新值,那么两者都会被使用。如果一个键同时存在于两者中,_args字典中的值将优先。
- arguments(_args=None, **kwargs)
更新参数。
- Parameters:
- _argsdict [optional]
新参数作为一个字典。使用
arguments(new_args)更新参数。- **kwargs
新的参数作为关键字。使用
arguments(**new_args)更新参数。
注释
如果位置参数
_args和关键字参数都传递了新值,那么两者都会被使用。如果一个键同时存在于两者中,_args字典中的值将优先。
- compress()
在
QobjEvo组件中寻找冗余:常量部分(没有
Coefficient的Qobj)将被求和。 具有相同Qobj的对[Qobj, Coefficient]将被合并。示例:
[[sigmax(), f1], [sigmax(), f2]] -> [[sigmax(), f1+f2]]QobjEvo被原地转换。- Returns:
- None
- conj()
获取量子对象的逐元素共轭。
- dag()
获取量子对象的埃尔米特伴随。
- dtype
QobjEvo 数据层的类型。 当使用不同的数据层时,我们返回各部分之和的类型。
- expect(t, state, check_real=True)
在时间
t时,此算符的期望值与状态。- Parameters:
- tfloat
操作员应用的时间。
- stateQobj
乘积的右侧矩阵
- check_realbool (True)
当虚部小于实部的一个因子
settings.core['rtol']时,是否将结果转换为real。
- Returns:
- expectfloat or complex
state.adjoint() @ self @ state如果state是一个 ket。trace(self @ matrix)如果state是一个算子或算子-ket。
- expect_data(t, state)
期望值定义为
state.adjoint() @ self @ state如果state是一个向量,或者state是一个算符且self是一个 超算符。如果state是一个算符且self是一个 算符,则期望值为trace(self @ matrix)。
- isbra
指示系统是否表示一个bra状态。
- isconstant
系统是否会根据
t变化
- isket
指示系统是否表示一个ket状态。
- isoper
指示系统是否表示一个操作符。
- isoperbra
指示系统是否表示一个操作符-左矢状态。
- isoperket
指示系统是否表示一个算子-态状态。
- issuper
指示系统是否表示一个超级操作符。
- linear_map(op_mapping, *, _skip_check=False)
将映射应用于每个Qobj贡献。
示例
QobjEvo([sigmax(), coeff]).linear_map(spre)给出相同的结果
QobjEvo([spre(sigmax()), coeff])- Parameters:
- op_mapping: callable
应用于每个元素的函数。
- Returns:
QobjEvo修改后的对象
注释
不修改系数,因此
linear_map(conj)不会给出 QobjEvo 的共轭。它仅适用于线性变换。
- matmul(t, state)
该操作符在时间
t对状态的作用。self(t) @ state- Parameters:
- tfloat
操作员应用的时间。
- stateQobj
乘积的右侧矩阵
- Returns:
- productQobj
结果产品作为 Qobj
- matmul_data(t, state, out=None)
计算
out += self(t) @ state
- num_elements
组成系统的部件数量
- tidyup(atol=1e-12)
从量子对象中移除小元素。
- to(data_type)
将所有组件的基础数据存储转换为所需的存储表示形式。
可用的不同存储表示是“数据层类型”。默认情况下,这些是
Dense、Dia和CSR,它们分别构建一个密集矩阵、对角稀疏矩阵和一个压缩稀疏行矩阵。QobjEvo被原地转换。- Parameters:
- data_typetype
此
Qobj的数据应转换的数据层类型。
- Returns:
- None
- to_list()
将QobjEvo恢复到列表形式。
- trans()
量子对象的转置
系数
- coefficient(
- base: CoefficientLike,
- *,
- tlist: ArrayLike = None,
- args: dict = {},
- args_ctypes: dict = {},
- order: int = 3,
- compile_opt: dict = None,
- function_style: str = None,
- boundary_conditions: tuple | str = None,
- **kwargs,
构建时间依赖系统的
Coefficient:` QobjEvo = Qobj + Qobj * Coefficient + Qobj * Coefficient + ... `系数可以是一个函数、字符串或numpy数组。其他包可能会添加对其他类型系数的支持。
对于基于函数的系数,函数签名必须是以下之一:
f(t, ...)其中其他参数作为普通的“pythonic”参数提供(例如f(t, w, a=5))f(t, args)其中参数在一个名为args的“字典”中提供
默认情况下,签名样式由
qutip.settings.core["function_coefficient_style"]设置控制,但可以通过指定function_style="pythonic"或function_style="dict"来覆盖。示例:
Python风格的函数签名:
def f1_t(t, w): return np.exp(-1j * t * w) coeff1 = coefficient(f1_t, args={"w": 1.})
字典风格函数签名:
def f2_t(t, args): return np.exp(-1j * t * args["w"]) coeff2 = coefficient(f2_t, args={"w": 1.})
对于基于字符串的系数,字符串必须是可编译的Python代码,结果为一个复数。定义了以下符号:
sin, cos, tan, asin, acos, atan, pi, sinh, cosh, tanh, asinh, acosh, atanh, exp, log, log10, erf, zerf, sqrt, real, imag, conj, abs, norm, arg, proj, numpy as np, scipy.special as spe (python 接口) 和 cython_special (scipy cython 接口)
示例:
coeff = coefficient('exp(-1j*w1*t)', args={"w1":1.})
在编译时,字符串系数需要‘args’。 它是一个(名称:对象)的字典。键必须是有效的变量字符串。
编译选项可以作为“compile_opt=CompilationOptions(…)”传递。
对于numpy数组格式,数组必须是一个1d的dtype float或complex。 一个时间列表(float64),必须给出系数的时间点(tlist)。 系数数组的长度必须与tlist相同。 tlist中的时间点不需要等距,但必须排序。 默认情况下,将使用三次样条插值来计算时间t处的系数。关键字
order设置插值的阶数。当order = 0时,插值是一个阶跃函数,其值为最近的值。示例:
tlist = np.logspace(-5,0,100) H = QobjEvo(np.exp(-1j*tlist), tlist=tlist)
scipy.interpolate的CubicSpline、PPoly和Bspline也被转换为插值系数(与从ndarray创建的相同类型的系数)。来自 scipy 的其他插值方法被转换为基于函数的系数(与从可调用对象创建的相同类型的系数)。- Parameters:
- baseobject
将基础对象转换为系数。
- argsdict, optional
传递给函数或字符串系数的参数字典。
- orderint, default=3
基于数组系数的样条顺序。
- tlistiterable, optional
基于系数的数组每个元素的时间。
- function_stylestr {“dict”, “pythonic”, None}, optional
基于系数的函数签名。
- args_ctypesdict, optional
编译基于数组的系数时,args的C类型。
- compile_optCompilationOptions, optional
用于编译基于字符串的系数的选项集。
- boundary_conditions: 2-tupule, str or None, optional
为样条插值指定边界条件。
- **kwargs
传递给系数的额外参数。
编译选项
- class CompilationOptions(**options)[source]
控制基于字符串的系数编译为Cython的选项。
这些选项可以全局设置:
settings.compile["compiler_flags"] = "-O1"在一个
with块中:with CompilationOptions(use_cython=False):或者作为一个实例:
coefficient(coeff, compile_opt=CompilationOptions(recompile=True))编译选项:
- use_cython: bool
是否将字符串编译为cython代码或使用python的
exec。- recompilebool
不要使用之前制作的文件,而是构建一个新的文件。
- try_parse: bool [True]
是否尝试解析字符串以进行重用和静态类型检查。
- static_typesbool [True]
是否对常量和参数使用C类型。
- accept_intNone, bool
是否使用类型
int作为整数常量和参数,或者将其升级为float或complex。 如果为 None,则仅在代码中找到订阅时使用int。- accept_floatbool
是否使用类型
float或将它们升级为complex。- compiler_flagsstr
传递给编译器的标志,例如:“-Wall -O3”… 与您的编译器和操作系统不匹配的标志可能导致编译失败。 当尝试确定字符串模式是否之前被使用时,请使用“recompile=True”。
- link_flagsstr
链接到传递给编译器的库。它们不能用于向字符串系数添加功能。
- extra_importstr
在文件头部添加的Cython代码。可用于添加额外的导入或cimport代码,例如: extra_import=”from scipy.linalg import det” extra_import=”from qutip.core.data cimport CSR”
- clean_on_errorbool [True]
当编写一个无法导入的cython文件时,请删除它。
- build_dir: str [None]
cythonize的构建目录。