量子对象
Qobj
- class Qobj(
- arg: ArrayLike | Any = None,
- dims: DimensionLike = None,
- copy: bool = True,
- superrep: str = None,
- isherm: bool = None,
- isunitary: bool = None,
一个用于表示量子对象的类,例如量子算符和状态。
Qobj 类是 QuTiP 中量子算符和状态向量的表示。该类还实现了 Qobj 实例之间的数学运算 +、-、*(以及除以一个复数),以及一系列常见的算符/状态操作。Qobj 构造函数可以选择性地接受维度
list和/或形状list作为参数。- Parameters:
- arg: array_like, data object or :obj:`.Qobj`
量子对象的向量/矩阵表示的数据。
- dims: list
用于张量积的对象的维度。
- copy: bool
指定Qobj是否应获取输入数据的副本,或使用原始数据的标志。
- Attributes:
- dataobject
存储Qobj的向量/矩阵表示的数据对象。
- dtypetype
用于存储数据的数据层类型。可能的类型在Qobj.to中描述。
- dimslist
跟踪张量结构的维度列表。
shapelist返回Qobj数据的形状。
- typestr
量子对象的类型:'bra'、'ket'、'oper'、'operator-ket'、'operator-bra' 或 'super'。
- superrepstr
如果type是‘super’时使用的表示形式。其中之一是‘super’(Liouville形式)、‘choi’(迹等于维度的Choi矩阵)或‘chi’(chi矩阵表示)。
- ishermbool
指示量子对象是否表示厄米算子。
- isunitarybool
指示量子对象是否表示酉算子。
- iscpbool
指示量子对象是否表示一个映射,以及该映射是否完全正定(CP)。
- ishpbool
指示量子对象是否表示一个映射,以及该映射是否保持厄米性(HP)。
- istpbool
指示量子对象是否表示一个映射,以及该映射是否是保迹的(TP)。
- iscptpbool
指示量子对象是否表示一个完全正且保迹(CPTP)的映射。
isketbool指示 Qobj 是否表示一个 ket 状态。
isbrabool指示 Qobj 是否表示一个 bra 状态。
isoperbool指示Qobj是否表示一个操作符。
issuperbool指示Qobj是否表示一个超算子。
isoperketbool指示 Qobj 是否表示一个 operator-ket 状态。
isoperbrabool指示 Qobj 是否表示一个 operator-bra 状态。
方法
copy()
创建 Qobj 的副本
conj()
量子对象的共轭。
contract()
收缩张量结构中的一维子空间。
cosm()
量子对象的余弦。
dag()
量子对象的伴随(dagger)。
data_as(format, copy)
量子对象的向量/矩阵表示。
diag()
量子对象的对角线元素。
dnorm()
量子算子的钻石范数。
dual_chan()
表示CP映射的量子对象的双通道。
eigenenergies(sparse=False, sort=’low’, eigvals=0, tol=0, maxiter=100000)
返回量子对象的特征能量(特征值)。
eigenstates(sparse=False, sort=’low’, eigvals=0, tol=0, maxiter=100000)
返回量子对象的特征能量和特征态。
expm()
量子对象的矩阵指数。
full(order=’C’)
返回量子对象data属性的密集数组。
groundstate(sparse=False, tol=0, maxiter=100000)
返回量子对象的基态的特征值和特征向量。
inv()
返回一个对应于操作符矩阵逆的Qobj。
logm()
量子算符的矩阵对数。
matrix_element(bra, ket)
返回操作符在bra和ket向量之间的矩阵元素。
norm(norm=’tr’, sparse=False, tol=0, maxiter=100000)
返回一个ket或算子的范数。
overlap(other)
两个状态向量或两个算子之间的重叠。
permute(order)
返回索引重新排序的复合qobj。
proj()
计算一个ket或bra向量的投影器。
ptrace(sel)
在执行部分迹操作后返回选定维度的量子对象。
purity()
计算量子对象的纯度。
sinm()
量子对象的正弦值。
sqrtm()
量子对象的矩阵平方根。
tidyup(atol=1e-12)
从量子对象中移除小元素。
tr()
量子对象的迹。
trans()
量子对象的转置。
transform(inpt, inverse=False)
执行由inpt矩阵定义的基础变换。
trunc_neg(method=’clip’)
移除负特征值并返回一个新的Qobj,该Qobj是一个有效的密度算子。
unit(norm=’tr’, sparse=False, tol=0, maxiter=100000)
返回归一化的量子对象。
- contract(inplace: bool = False) Qobj[source]
张量结构的一维子空间。未在超算符上定义。如果所有维度都是标量,则返回维度为[[1], [1]]的Qobj,即_多个_标量维度被收缩,但保留一个。
- Parameters:
- inplace: bool, optional
如果
True,则就地修改尺寸。如果False,则返回一个复制的对象。
- Returns:
- out:
Qobj 维度收缩的量子对象。如果
inplace为True,则返回self。
- out:
- cosm() Qobj[source]
量子算符的余弦。
操作符必须是方形的。
- Returns:
- oper
Qobj 操作符的矩阵余弦。
- oper
- Raises:
- TypeError
量子对象不是方形的。
注释
使用 Q.expm() 方法。
- data_as(format: str = None, copy: bool = True) Any[source]
从量子对象生成的矩阵。
- Parameters:
- formatstr, default: None
输出的类型,
Dense为“ndarray”,CSR为“csr_matrix”。如果格式不支持,将引发 ValueError。- copybool {False, True}
是否返回一个副本
- Returns:
- datanumpy.ndarray, scipy.sparse.matrix_csr, etc.
底层库类型的矩阵。
- diag() ndarray[source]
量子对象的对角元素。
- Returns:
- diagsarray
如果操作符是厄米特(Hermitian),则返回
real值的数组,否则返回complex值的数组。
- dnorm(B: Qobj = None) float[source]
计算钻石范数,或到另一个操作员的钻石距离。
- Parameters:
- B
Qobjor None 如果 B 不是 None,则返回此操作符与 B 之间的钻石距离 d(A, B) = dnorm(A - B),而不是钻石范数。
- B
- Returns:
- dfloat
这个算子的钻石范数,或者这个算子到B的钻石距离。
- eigenenergies(
- sparse: bool = False,
- sort: Literal['low', 'high'] = 'low',
- eigvals: int = 0,
- tol: float = 0,
- maxiter: int = 100000,
量子物体的本征能量。
特征能量(特征值)仅针对算子或超算子定义。
- Parameters:
- sparsebool
使用稀疏特征求解器
- sortstr
将特征值从‘低’到‘高’排序,或从‘高’到‘低’排序。
- eigvalsint
请求的特征值数量。默认值为所有特征值。
- tolfloat
稀疏特征求解器使用的容差(0=机器精度)。 如果容差设置得太低,稀疏求解器可能无法收敛。
- maxiterint
稀疏求解器执行的最大迭代次数(如果使用)。
- Returns:
- eigvalsarray
算子的特征值数组。
注释
稀疏特征求解器比密集版本慢得多。 只有在内存需求要求时才使用稀疏版本。
- eigenstates(
- sparse: bool = False,
- sort: Literal['low', 'high'] = 'low',
- eigvals: int = 0,
- tol: float = 0,
- maxiter: int = 100000,
- phase_fix: int = None,
本征态和本征能量。
本征态和本征能量仅针对算符和超算符定义。
- Parameters:
- sparsebool
使用稀疏特征求解器
- sortstr
将特征值(和向量)从‘低’到‘高’排序,或从‘高’到‘低’排序。
- eigvalsint
请求的特征值数量。默认值为所有特征值。
- tolfloat
稀疏特征求解器使用的容差(0 = 机器精度)。 如果容差设置得太低,稀疏求解器可能无法收敛。
- maxiterint
稀疏求解器执行的最大迭代次数(如果使用)。
- phase_fixint, None
如果不为None,设置每个ket的相位,使得ket[phase_fix,0]为实正数。
- Returns:
- eigvalsarray
算子的特征值数组。
- eigvecsarray
表示算子本征态的量子算子数组。本征态的顺序由本征值的顺序决定。
注释
稀疏特征求解器比密集版本慢得多。 只有在内存需求要求时才使用稀疏版本。
- expm(dtype: LayerType = None) Qobj[source]
量子算符的矩阵指数。
输入运算符必须是方形的。
- Parameters:
- dtypetype
应该输出的数据层类型。
- Returns:
- oper
Qobj 指数化量子算子。
- oper
- Raises:
- TypeError
量子算子不是方形的。
- full(
- order: Literal['C', 'F'] = 'C',
- squeeze: bool = False,
从量子对象生成的密集数组。
- Parameters:
- orderstr {‘C’, ‘F’}
返回C(默认)或Fortran顺序的数组。
- squeezebool {False, True}
压缩输出数组。
- Returns:
- dataarray
来自量子对象data属性的复杂数据数组。
- groundstate(
- sparse: bool = False,
- tol: float = 0,
- maxiter: int = 100000,
- safe: bool = True,
基态特征值和特征向量。
仅针对量子算子或超算子定义。
- Parameters:
- sparsebool
使用稀疏特征求解器
- tolfloat
稀疏特征求解器使用的容差(0 = 机器精度)。 如果容差设置得太低,稀疏求解器可能无法收敛。
- maxiterint
稀疏求解器执行的最大迭代次数(如果使用)。
- safebool (default=True)
检查简并基态
- Returns:
- eigvalfloat
量子算符基态的特征值。
- eigvec
Qobj 量子算符基态的Eigenket。
注释
稀疏特征求解器比密集版本慢得多。 只有在内存需求要求时才使用稀疏版本。
- inv(sparse: bool = False) Qobj[source]
量子算子的矩阵逆
操作符必须是方形的。
- Returns:
- oper
Qobj 操作符的矩阵逆。
- oper
- Raises:
- TypeError
量子对象不是方形的。
- property isbra: bool
指示 Qobj 是否表示一个 bra 状态。
- property isket: bool
指示 Qobj 是否表示一个 ket 状态。
- property isoper: bool
指示Qobj是否表示一个操作符。
- property isoperbra: bool
指示 Qobj 是否表示一个 operator-bra 状态。
- property isoperket: bool
指示 Qobj 是否表示一个 operator-ket 状态。
- property issuper: bool
指示Qobj是否表示一个超算子。
- norm(
- norm: Literal['l2', 'max', 'fro', 'tr', 'one'] = None,
- kwargs: dict[str, Any] = None,
量子对象的范数。
默认的范数是kets的L2范数和算子的迹范数。可以使用norm参数指定其他kets和算子范数。
- Parameters:
- normstr
使用哪种类型的范数。向量的允许值为‘l2’和‘max’。矩阵的允许值为‘tr’表示迹范数,‘fro’表示Frobenius范数,‘one’和‘max’。
- kwargsdict
额外的关键字参数传递给相关的范数求解器。有关每个范数函数的详细信息,请参见
data.norm。
- Returns:
- normfloat
请求的算子或状态量子对象的范数。
- overlap(other: Qobj) complex[source]
两个状态向量或两个算子之间的重叠。
给出当前bra或ket Qobj与另一个bra或ket Qobj之间的重叠(内积)。当其中一个Qobj是算子/密度矩阵时,它给出Hilbert-Schmidt重叠。
- Parameters:
- other
Qobj 量子对象,用于表示类型为‘ket’、‘bra’或密度矩阵的状态向量。
- other
- Returns:
- overlapcomplex
复数值重叠。
- Raises:
- TypeError
只能计算bra、ket和密度矩阵量子对象之间的重叠。
- permute(order: list) Qobj[source]
置换量子对象的张量结构。例如,
qutip.tensor(x, y).permute([1, 0])将给出与
相同的结果qutip.tensor(y, x)和
qutip.tensor(a, b, c).permute([1, 2, 0])将相同于
qutip.tensor(b, c, a)对于常规对象(bras、kets 和运算符),我们期望
order是一个整数平面列表,它指定了张量积的新顺序。对于超级操作符,我们期望
order类似于[[0, 2], [1, 3]]这告诉我们要根据 [0, 2, 1, 3] 进行排列,然后根据每个子列表的长度对索引进行分组。再举一个例子,排列一个维度为
[[[1, 2, 3], [1, 2, 3]], [[1, 2, 3], [1, 2, 3]]]通过一个
order[[0, 3], [1, 4], [2, 5]]应该给出一个具有尺寸的新对象
[[[1, 1], [2, 2], [3, 3]], [[1, 1], [2, 2], [3, 3]]].- Parameters:
- orderlist
指定新张量顺序的索引列表。
- Returns:
- P
Qobj 置换的量子对象。
- P
- ptrace(
- sel: int | list[int],
- dtype: LayerType = None,
对量子对象进行部分迹运算,保留选定的子空间。换句话说,迹掉所有未传递的子空间。
这通常是一个作用于算符的函数;在操作发生之前,bras和kets将被提升为密度矩阵,因为部分迹在纯态上本质上是未定义的。
对于当前在超算子形式中被表示为状态的运算符(即对象类型为operator-ket或operator-bra),部分迹的应用方式与运算符处于传统形式时相同。这意味着对于任何运算符x,
operator_to_vector(x).ptrace(0) == operator_to_vector(x.ptrace(0)),对于operator-bra也是如此。对于完整的超算子来说,情况有所不同。在QuTiP使用的形式中,如果一个算子的维度(dims)为[[2, 3], [2, 3]],那么它可以表示为一个维度为[2, 3, 2, 3]的希尔伯特空间上的状态,而超算子则是作用在这个联合空间上的算子。这个函数通过在超算子上执行部分迹,让选定的组件引用联合空间的元素,然后返回一个常规算子(类型为oper)。
- Parameters:
- selint or iterable of int
一个
int或list用于在部分追踪后保留的组件。 无论它们以何种顺序提供给 ptrace,所选的子空间都不会被重新排序。
- Returns:
- oper
Qobj 表示保留选定组件的部分迹的量子对象。
- oper
- purity() complex[source]
计算量子对象的纯度。
- Returns:
- state_purityfloat
返回量子对象的纯度。 对于纯态,纯度为1。 对于维度为d的混合态,1/d<=纯度<1。
- property shape: tuple[int, int]
返回Qobj数据的形状。
- sinm() Qobj[source]
量子算子的正弦值。
操作符必须是方形的。
- Returns:
- oper
Qobj 操作符的矩阵正弦。
- oper
- Raises:
- TypeError
量子对象不是方形的。
注释
使用 Q.expm() 方法。
- sqrtm(
- sparse: bool = False,
- tol: float = 0,
- maxiter: int = 100000,
量子运算符的平方根。运算符必须是方阵。
- Parameters:
- sparsebool
使用稀疏特征值/特征向量求解器。
- tolfloat
稀疏求解器使用的容差(0 = 机器精度)。
- maxiterint
稀疏求解器使用的最大迭代次数。
- Returns:
- oper
Qobj 操作符的矩阵平方根。
- oper
- Raises:
- TypeError
量子对象不是方形的。
注释
稀疏特征求解器比密集版本慢得多。 只有在内存需求要求时才使用稀疏版本。
- tidyup(atol: float = None) Qobj[source]
从量子对象中移除小元素。
- Parameters:
- atolfloat
tidyup使用的绝对容差。默认值通过qutip全局设置参数设置。
- Returns:
- oper
Qobj 移除了小元素的量子对象。
- oper
- to(data_type: LayerType, copy: bool = False) Qobj[source]
将此Qobj的基础数据存储转换为不同的存储表示形式。
可用的不同存储表示是“数据层类型”,这些类型对
qutip.core.data.to是已知的。默认情况下,这些类型是CSR、Dense和Dia,它们分别构建压缩稀疏行矩阵、对角矩阵和密集矩阵。使用更合适的数据存储时,某些算法和操作可能会更快或更准确。
- transform(inpt: list[Qobj] | ArrayLike, inverse: bool = False) Qobj[source]
由输入数组定义的基变换。
输入数组可以是一个定义变换的
matrix,或者是一个定义新基的list的kets。- Parameters:
- inptarray_like
定义变换的
matrix或list的kets。- inversebool
是否返回逆变换。
- Returns:
- oper
Qobj 新基中的运算符。
- oper
注释
此功能仍在开发中。
- trunc_neg(
- method: Literal['clip', 'sgs'] = 'clip',
截断负特征值并重新归一化。
通过移除该实例的负特征值,然后重新归一化以获得有效的密度算子,返回一个新的Qobj。
- Parameters:
- methodstr
用于去除负特征值的算法。“clip”简单地丢弃负特征值,然后重新归一化。“sgs”使用SGS算法(doi:10/bb76)来找到在Shatten 2-范数中最接近的正算子。
- Returns:
- oper
Qobj 一个有效的密度算子。
- oper
核心选项
- class CoreOptions(**options)[source]
qutip核心使用的选项,例如
Qobj比较的容差或系数的格式。值可以在
qutip.settings.core中更改,或者通过使用上下文来更改:with CoreOptions(atol=1e-6): ...选项:
- auto_tidyupbool
是否在稀疏操作期间进行整理。
- auto_tidyup_dimsbool [False]
在乘法、张量等操作上使用自动整理维度。 没有 auto_tidyup_dims 时:
basis([2, 2]).dims == [[2, 2], [1, 1]]使用 auto_tidyup_dims:
basis([2, 2]).dims == [[2, 2], [1]]- atolfloat {1e-12}
通用绝对容差。用于各种函数中以舍入小值。
- rtolfloat {1e-12}
一般相对容差。
- auto_tidyup_atolfloat {1e-14}
自动整理中使用的绝对容差(参见上面的
auto_tidyup参数)以及Qobj.tidyup中使用的atol的默认值。- function_coefficient_stylestr {“auto”}
函数系数期望的签名。选项有:
“pythonic”:签名应该是
f(t, ...),其中t是时间,...是直接传递给函数的其余参数。例如f(t, w, b=5)。“dict”:签名应为
f(t, args),其中t是时间,args是一个包含剩余参数的字典。例如f(t, {"w": w, "b": 5})。“auto”:根据提供的函数签名自动在上述两个选项之间选择。如果函数签名恰好是
f(t, args),则使用dict。否则使用pythonic。
- default_dtypeNonetype, str, type {None}
当设置时,创建
Qobj的函数,例如 :func:”qeye” 或 :func:”rand_herm”,将使用指定的数据类型。qutip.data.to已知的任何数据层 都被接受。当None时,这些函数 将默认使用合理的数据类型。
创建状态和操作符
量子态
- basis(
- dimensions: SpaceLike,
- n: int | list[int] = None,
- offset: int | list[int] = None,
- *,
- dtype: LayerType = None,
生成Fock态的向量表示。
- Parameters:
- dimensionsint or list of ints, Space
希尔伯特空间中的基态数量。如果是一个列表,那么结果对象将是这些维度空间上的张量积。
- nint or list of ints, optional (default 0 for all dimensions)
对应于所需数字状态的整数,如果省略,则默认为所有维度为0。形状必须与
dimensions匹配,例如,如果dimensions是一个列表,那么n必须被省略或是一个等长的列表。- offsetint or list of ints, optional (default 0 for all dimensions)
在相关维度的有限状态表示中包含的最低数字状态。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- state
Qobj 表示请求的数字状态的Qobj
|n>。
- state
注释
与量子光学工具箱的微妙不兼容性:在QuTiP中:
basis(N, 0) = ground state
但在qotoolbox中:
basis(N, 1) = ground state
示例
>>> basis(5,2) Quantum object: dims = [[5], [1]], shape = (5, 1), type = ket Qobj data = [[ 0.+0.j] [ 0.+0.j] [ 1.+0.j] [ 0.+0.j] [ 0.+0.j]] >>> basis([2,2,2], [0,1,0]) Quantum object: dims = [[2, 2, 2], [1, 1, 1]], shape = (8, 1), type = ket Qobj data = [[0.] [0.] [1.] [0.] [0.] [0.] [0.] [0.]]
- bell_state(
- state: Literal['00', '01', '10', '11'] = '00',
- *,
- dtype: LayerType = None,
返回选定的贝尔状态:
\[\begin{split}\begin{aligned} \lvert B_{00}\rangle &= \frac1{\sqrt2}(\lvert00\rangle+\lvert11\rangle)\\ \lvert B_{01}\rangle &= \frac1{\sqrt2}(\lvert00\rangle-\lvert11\rangle)\\ \lvert B_{10}\rangle &= \frac1{\sqrt2}(\lvert01\rangle+\lvert10\rangle)\\ \lvert B_{11}\rangle &= \frac1{\sqrt2}(\lvert01\rangle-\lvert10\rangle)\\ \end{aligned}\end{split}\]- Parameters:
- statestr [‘00’, ‘01’, ‘10’, ‘11’]
返回哪个贝尔状态
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- Bell_stateqobj
贝尔态
- bra(
- seq: list[int | str] | str,
- dim: int | list[int] = 2,
- *,
- dtype: LayerType = None,
为列表或字符串生成一个多粒子bra状态,其中每个元素代表相应粒子的状态。
- Parameters:
- seqstr / list of ints or characters
每个元素定义了相应粒子的状态。 (例如 [1,1,0,1] 或字符串“1101”)。 对于量子比特,也可以使用以下约定:
‘g’/’e’(基态和激发态)
‘u’/’d’(自旋向上和向下)
‘H’/‘V’(水平和垂直极化)
注意:对于维度大于9的情况,您需要使用列表。
- dimint (default: 2) / list of ints
每个粒子的空间维度: 如果相同则为int,如果不同则为list。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- braqobj
示例
>>> bra("10") Quantum object: dims = [[1, 1], [2, 2]], shape = [1, 4], type = bra Qobj data = [[ 0. 0. 1. 0.]]
>>> bra("Hue") Quantum object: dims = [[1, 1, 1], [2, 2, 2]], shape = [1, 8], type = bra Qobj data = [[ 0. 1. 0. 0. 0. 0. 0. 0.]]
>>> bra("12", 3) Quantum object: dims = [[1, 1], [3, 3]], shape = [1, 9], type = bra Qobj data = [[ 0. 0. 0. 0. 0. 1. 0. 0. 0.]]
>>> bra("31", [5, 2]) Quantum object: dims = [[1, 1], [5, 2]], shape = [1, 10], type = bra Qobj data = [[ 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]]
- coherent(
- N: int,
- alpha: float,
- offset: int = 0,
- method: str = None,
- *,
- dtype: LayerType = None,
生成一个具有特征值alpha的相干态。
在真空态上使用位移算子构造。
- Parameters:
- Nint
希尔伯特空间中的福克态数量。
- alphafloat/complex
相干态的特征值。
- offsetint, default: 0
包含在状态有限数状态表示中的最低数状态。使用非零偏移将使默认方法为‘analytic’。
- methodstring {‘operator’, ‘analytic’}, optional
生成相干态的方法。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- stateqobj
用于相干态的Qobj量子对象
注释
选择方法‘operator’(默认)或‘analytic’。使用‘operator’方法时,相干态是通过在大小为‘N’的截断希尔伯特空间中使用位移算子位移真空态生成的。此方法保证生成的状态是归一化的。使用‘analytic’方法时,相干态是通过在Fock基中使用相干态系数的解析公式生成的。如果截断到少量的Fock态,此方法不保证状态是归一化的,但在这种情况下会给出更准确的系数。
示例
>>> coherent(5,0.25j) Quantum object: dims = [[5], [1]], shape = [5, 1], type = ket Qobj data = [[ 9.69233235e-01+0.j ] [ 0.00000000e+00+0.24230831j] [ -4.28344935e-02+0.j ] [ 0.00000000e+00-0.00618204j] [ 7.80904967e-04+0.j ]]
- coherent_dm(
- N: int,
- alpha: float,
- offset: int = 0,
- method: str = None,
- *,
- dtype: LayerType = None,
相干态的密度矩阵表示。
通过
coherent的外积构建- Parameters:
- Nint
希尔伯特空间中的基态数量。
- alphafloat/complex
相干态的特征值。
- offsetint, default: 0
包含在状态的有限数量状态表示中的最低数字状态。
- methodstring {‘operator’, ‘analytic’}, optional
生成相干密度矩阵的方法。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- dmqobj
相干态的密度矩阵表示。
注释
选择方法‘operator’(默认)或‘analytic’。使用‘operator’方法时,相干密度矩阵通过在大小为‘N’的截断希尔伯特空间中使用位移算子位移真空态生成。此方法保证生成的密度矩阵是归一化的。使用‘analytic’方法时,相干密度矩阵使用Fock基中相干态系数的解析公式生成。如果截断到少量Fock态,此方法不保证状态是归一化的,但在这种情况下会给出更准确的系数。
示例
>>> coherent_dm(3,0.25j) Quantum object: dims = [[3], [3]], shape = [3, 3], type = oper, isHerm = True Qobj data = [[ 0.93941695+0.j 0.00000000-0.23480733j -0.04216943+0.j ] [ 0.00000000+0.23480733j 0.05869011+0.j 0.00000000-0.01054025j] [-0.04216943+0.j 0.00000000+0.01054025j 0.00189294+0.j ]]
- fock(
- dimensions: SpaceLike,
- n: int | list[int] = None,
- offset: int | list[int] = None,
- *,
- dtype: LayerType = None,
玻色福克(数)态。
与
basis相同。- Parameters:
- dimensionsint or list of ints, Space
希尔伯特空间中的基态数量。如果是一个列表,那么结果对象将是这些维度空间上的张量积。
- nint or list of ints, default: 0 for all dimensions
对应于所需数字状态的整数,如果省略,则默认为所有维度为0。形状必须与
dimensions匹配,例如,如果dimensions是一个列表,那么n必须被省略或是一个等长的列表。- offsetint or list of ints, default: 0 for all dimensions
在相关维度的有限状态表示中包含的最低数字状态。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- Requested number state \(\left|n\right>\).
示例
>>> fock(4,3) Quantum object: dims = [[4], [1]], shape = [4, 1], type = ket Qobj data = [[ 0.+0.j] [ 0.+0.j] [ 0.+0.j] [ 1.+0.j]]
- fock_dm(
- dimensions: int | list[int] | Space,
- n: int | list[int] = None,
- offset: int | list[int] = None,
- *,
- dtype: LayerType = None,
Fock态的密度矩阵表示
通过
basis的外积构造。- Parameters:
- dimensionsint or list of ints, Space
希尔伯特空间中的基态数量。如果是一个列表,那么结果对象将是这些维度空间上的张量积。
- nint or list of ints, default: 0 for all dimensions
对应于所需数字状态的整数,如果省略,则默认为所有维度为0。形状必须与
dimensions匹配,例如,如果dimensions是一个列表,那么n必须被省略或是一个等长的列表。- offsetint or list of ints, default: 0 for all dimensions
在相关维度的有限状态表示中包含的最低数字状态。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- dmqobj
Fock态的密度矩阵表示。
示例
>>> fock_dm(3,1) Quantum object: dims = [[3], [3]], shape = [3, 3], type = oper, isHerm = True Qobj data = [[ 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 1.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j]]
- ghz_state(N_qubit: int, *, dtype: LayerType = None) Qobj[source]
- Returns the N-qubit GHZ-state:
[ |00...00> + |11...11> ] / sqrt(2)
- Parameters:
- N_qubitint
状态中的量子比特数
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- Gqobj
N量子比特GHZ态
- ket(
- seq: list[int | str] | str,
- dim: int | list[int] = 2,
- *,
- dtype: LayerType = None,
为列表或字符串生成多粒子ket状态,其中每个元素代表相应粒子的状态。
- Parameters:
- seqstr / list of ints or characters
每个元素定义了相应粒子的状态。 (例如 [1,1,0,1] 或字符串“1101”)。 对于量子比特,也可以使用以下约定: - ‘g’/’e’(基态和激发态) - ‘u’/’d’(自旋向上和向下) - ‘H’/’V’(水平和垂直极化) 注意:对于维度大于9的情况,您需要使用列表。
- dimint or list of ints, default: 2
每个粒子的空间维度: 如果相同则为int,如果不同则为list。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- ketqobj
示例
>>> ket("10") Quantum object: dims = [[2, 2], [1, 1]], shape = [4, 1], type = ket Qobj data = [[ 0.] [ 0.] [ 1.] [ 0.]]
>>> ket("Hue") Quantum object: dims = [[2, 2, 2], [1, 1, 1]], shape = [8, 1], type = ket Qobj data = [[ 0.] [ 1.] [ 0.] [ 0.] [ 0.] [ 0.] [ 0.] [ 0.]]
>>> ket("12", 3) Quantum object: dims = [[3, 3], [1, 1]], shape = [9, 1], type = ket Qobj data = [[ 0.] [ 0.] [ 0.] [ 0.] [ 0.] [ 1.] [ 0.] [ 0.] [ 0.]]
>>> ket("31", [5, 2]) Quantum object: dims = [[5, 2], [1, 1]], shape = [10, 1], type = ket Qobj data = [[ 0.] [ 0.] [ 0.] [ 0.] [ 0.] [ 0.] [ 0.] [ 1.] [ 0.] [ 0.]]
- ket2dm(Q: Qobj) Qobj[source]
接受输入的ket或bra向量并返回由外积形成的密度矩阵。这与调用
Q.proj()完全相同。示例
>>> x=basis(3,2) >>> ket2dm(x) Quantum object: dims = [[3], [3]], shape = [3, 3], type = oper, isHerm = True Qobj data = [[ 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 1.+0.j]]
- maximally_mixed_dm(
- dimensions: SpaceLike,
- *,
- dtype: LayerType = None,
返回维度为N的希尔伯特空间的最大混合密度矩阵。
- Parameters:
- dimensionsint or list of ints, Space
希尔伯特空间中的基态数量。如果是一个列表,那么结果对象将是这些维度空间上的张量积。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- dm
Qobj 热态密度矩阵。
- dm
- phase_basis(
- N: int,
- m: int,
- phi0: float = 0,
- *,
- dtype: LayerType = None,
Pegg-Barnett 相位算符的第 m 个相位的基础向量。
- Parameters:
- Nint
希尔伯特空间中的基态数量。
- mint
对应于第m个离散相位的整数
phi_m = phi0 + 2 * pi * m / N- phi0float, default: 0
参考相位角。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- stateqobj
第m个Pegg-Barnett相位算子基态的Ket向量。
注释
Pegg-Barnett基态在截断的希尔伯特空间上形成一个完整的集合。
- projection(
- dimensions: int | list[int],
- n: int | list[int],
- m: int | list[int],
- offset: int | list[int] = None,
- *,
- dtype: LayerType = None,
投影操作符将状态 \(\lvert m\rangle\) 投影到状态 \(\lvert n\rangle\)。
- Parameters:
- dimensionsint or list of ints, Space
希尔伯特空间中的基态数量。如果是一个列表,那么结果对象将是这些维度空间上的张量积。
- n, mint
投影中的状态数量。
- offsetint, default: 0
投影仪有限数量状态表示中包含的最低数字状态。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- operqobj
请求的投影操作符。
- qutrit_basis(*, dtype: LayerType = None) list[Qobj][source]
三能级系统(qutrit)的基础状态
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- qstatesarray
qutrit基向量的数组
- singlet_state(*, dtype: LayerType = None) Qobj[source]
返回两个粒子的单态:
\[\lvert S\rangle = \frac1{\sqrt2}(\lvert01\rangle-\lvert10\rangle)\]这与第四个贝尔态相同。
- Parameters:
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- Bell_stateqobj
\(\lvert B_{11}\rangle\) 贝尔态
- spin_coherent(
- j: float,
- theta: float,
- phi: float,
- type: Literal['ket', 'bra', 'dm'] = 'ket',
- *,
- dtype: LayerType = None,
生成相干自旋态 \(\lvert \theta, \phi\rangle\)。
- Parameters:
- jfloat
状态的自旋。
- thetafloat
从z轴的角度。
- phifloat
从x轴的角度。
- typestring {‘ket’, ‘bra’, ‘dm’}, default: ‘ket’
生成的状态类型。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- stateqobj
用于自旋相干态的Qobj量子对象
- spin_state(
- j: float,
- m: float,
- type: Literal['ket', 'bra', 'dm'] = 'ket',
- *,
- dtype: LayerType = None,
生成自旋状态 \(\lvert j, m\rangle\),即自旋-j Sz 算符的特征值为 m 的特征态。
- Parameters:
- jfloat
状态的自旋 ()。
- mfloat
自旋-j Sz算符的特征值。
- typestring {‘ket’, ‘bra’, ‘dm’}, default: ‘ket’
生成的状态类型。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- stateqobj
用于自旋状态的Qobj量子对象
- state_index_number(dims: list[int], index: int) tuple[source]
返回给定状态索引的量子数表示,适用于由dims定义的复合结构系统。
示例
>>> state_index_number([2, 2, 2], 6) [1, 1, 0]
- Parameters:
- dimslist or array
量子状态维度数组,如其在Qobj中的显示。
- indexinteger
状态在标准枚举排序中的索引。
- Returns:
- statetuple
标准枚举顺序中对应于索引index的状态编号元组。
- state_number_enumerate(
- dims: list[int],
- excitations: int = None,
一个迭代器,用于枚举由dims给出的系统维度的所有状态数元组(形式为(n1, n2, n3, …)的量子数)。
示例
>>> for state in state_number_enumerate([2,2]): >>> print(state) ( 0 0 ) ( 0 1 ) ( 1 0 ) ( 1 1 )
- Parameters:
- dimslist
量子状态维度数组,如其在Qobj中的显示。
- excitationsinteger, optional
将状态空间限制为激发数低于或等于此值的状态。
- Returns:
- state_numbertuple
可以在循环和其他迭代中使用的连续状态编号元组,使用根据定义的标准状态枚举。
- state_number_index(dims: list[int], state: list[int]) int[source]
返回与状态对应的量子态的索引,给定一个由dims指定维度的系统。
示例
>>> state_number_index([2, 2, 2], [1, 1, 0]) 6
- Parameters:
- dimslist
量子状态维度数组,如其在Qobj中的显示。
- statelist
状态编号数组。
- Returns:
- idxint
由state给出的状态在标准枚举顺序中的索引。
- state_number_qobj(
- dims: SpaceLike,
- state: int | list[int] = None,
- *,
- dtype: LayerType = None,
返回由状态数组 state 指定的量子状态的 Qobj 表示。
注意
在 QuTiP 5.0 中已弃用,请改用
basis。示例
>>> state_number_qobj([2, 2, 2], [1, 0, 1]) Quantum object: dims = [[2, 2, 2], [1, 1, 1]], shape = [8, 1], type = ket Qobj data = [[ 0.] [ 0.] [ 0.] [ 0.] [ 0.] [ 1.] [ 0.] [ 0.]]
- thermal_dm(
- N: int,
- n: float,
- method: Literal['operator', 'analytic'] = 'operator',
- *,
- dtype: LayerType = None,
n粒子热态的密度矩阵
- Parameters:
- Nint
希尔伯特空间中的基态数量。
- nfloat
热态粒子数的期望值。
- methodstring {‘operator’, ‘analytic’}, default: ‘operator’
string用于设置生成热态概率的方法- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- dmqobj
热态密度矩阵。
注释
'operator' 方法(默认)使用截断的数字运算符
num(N)生成热态。这是在计算中应使用的方法。'analytic' 方法使用在无限希尔伯特空间中导出的解析系数。如果截断过于激进,解析形式不一定归一化。示例
>>> thermal_dm(5, 1) Quantum object: dims = [[5], [5]], shape = [5, 5], type = oper, isHerm = True Qobj data = [[ 0.51612903 0. 0. 0. 0. ] [ 0. 0.25806452 0. 0. 0. ] [ 0. 0. 0.12903226 0. 0. ] [ 0. 0. 0. 0.06451613 0. ] [ 0. 0. 0. 0. 0.03225806]]
>>> thermal_dm(5, 1, 'analytic') Quantum object: dims = [[5], [5]], shape = [5, 5], type = oper, isHerm = True Qobj data = [[ 0.5 0. 0. 0. 0. ] [ 0. 0.25 0. 0. 0. ] [ 0. 0. 0.125 0. 0. ] [ 0. 0. 0. 0.0625 0. ] [ 0. 0. 0. 0. 0.03125]]
- triplet_states(*, dtype: LayerType = None) list[Qobj][source]
返回两个粒子的三重态列表:
\[\lvert T_1\rangle = \lvert11\rangle \lvert T_2\rangle = \frac1{\sqrt2}(\lvert01\rangle + \lvert10\rangle) \lvert T_3\rangle = \lvert00\rangle\]- Parameters:
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- trip_stateslist
2粒子三重态
量子运算符
该模块包含用于生成各种常见量子算符的Qobj表示的函数。
- charge(
- Nmax: int,
- Nmin: int = None,
- frac: float = 1,
- *,
- dtype: LayerType = None,
生成从Nmin到Nmax的电荷状态上的对角电荷算子。
- Parameters:
- Nmaxint
要考虑的最大充电状态。
- Nminint, default: -Nmax
考虑的最低电荷状态。
- fracfloat, default: 1
如果需要,请指定分数电荷。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- CQobj
在 [Nmin, Nmax] 上操作收费。
注释
在版本3.2中添加。
- commutator( ) Qobj[source]
返回两个运算符 A 和 B 的 kind 类型(正常、反对)的对易子。
- Parameters:
- A, B
Qobj,QobjEvo 用于计算对易子的运算符。
- kind: str {“normal”, “anti”}, default: “anti”
计算哪种类型的交换器。
- A, B
- create(
- N: int,
- offset: int = 0,
- *,
- dtype: LayerType = None,
创建(提升)操作符。
- Parameters:
- Nint
希尔伯特空间中的基态数量。
- offsetint, default: 0
操作符的有限数状态表示中包含的最低数状态。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- operqobj
用于提升运算符的Qobj。
示例
>>> create(4) Quantum object: dims=[[4], [4]], shape=(4, 4), type='oper', isherm=False Qobj data = [[ 0.00000000+0.j 0.00000000+0.j 0.00000000+0.j 0.00000000+0.j] [ 1.00000000+0.j 0.00000000+0.j 0.00000000+0.j 0.00000000+0.j] [ 0.00000000+0.j 1.41421356+0.j 0.00000000+0.j 0.00000000+0.j] [ 0.00000000+0.j 0.00000000+0.j 1.73205081+0.j 0.00000000+0.j]]
- destroy(
- N: int,
- offset: int = 0,
- *,
- dtype: LayerType = None,
破坏(降低)操作符。
- Parameters:
- Nint
希尔伯特空间中的基态数量。
- offsetint, default: 0
操作符的有限数状态表示中包含的最低数状态。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- operqobj
用于降低运算符的Qobj。
示例
>>> destroy(4) Quantum object: dims=[[4], [4]], shape=(4, 4), type='oper', isherm=False Qobj data = [[ 0.00000000+0.j 1.00000000+0.j 0.00000000+0.j 0.00000000+0.j] [ 0.00000000+0.j 0.00000000+0.j 1.41421356+0.j 0.00000000+0.j] [ 0.00000000+0.j 0.00000000+0.j 0.00000000+0.j 1.73205081+0.j] [ 0.00000000+0.j 0.00000000+0.j 0.00000000+0.j 0.00000000+0.j]]
- displace(
- N: int,
- alpha: float,
- offset: int = 0,
- *,
- dtype: LayerType = None,
单模位移算子。
- Parameters:
- Nint
希尔伯特空间中的基态数量。
- alphafloat/complex
位移幅度。
- offsetint, default: 0
操作符的有限数状态表示中包含的最低数状态。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- operqobj
位移操作符。
示例
>>> displace(4,0.25) Quantum object: dims = [[4], [4]], shape = [4, 4], type = oper, isHerm = False Qobj data = [[ 0.96923323+0.j -0.24230859+0.j 0.04282883+0.j -0.00626025+0.j] [ 0.24230859+0.j 0.90866411+0.j -0.33183303+0.j 0.07418172+0.j] [ 0.04282883+0.j 0.33183303+0.j 0.84809499+0.j -0.41083747+0.j] [ 0.00626025+0.j 0.07418172+0.j 0.41083747+0.j 0.90866411+0.j]]
- fcreate(n_sites: int, site, dtype: LayerType = None) Qobj[source]
费米子产生算符。 我们使用Jordan-Wigner变换, 利用Jordan-Wigner ZZ..Z字符串, 按如下方式构造:
\[a_j = \sigma_z^{\otimes j} \otimes (\frac{\sigma_x - i \sigma_y}{2}) \otimes I^{\otimes N-j-1}\]- Parameters:
- n_sitesint
Fock空间中的站点数量。
- siteint
在Fock空间中添加一个费米子的位置。 对应于上述JW变换中的j。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- operqobj
用于提升运算符的Qobj。
示例
>>> fcreate(2) Quantum object: dims = [[2, 2], [2, 2]], shape = (4, 4), type = oper, isherm = False Qobj data = [[0. 0. 0. 0.] [0. 0. 0. 0.] [1. 0. 0. 0.] [0. 1. 0. 0.]]
- fdestroy(n_sites: int, site, dtype: LayerType = None) Qobj[source]
费米子湮灭算符。 我们使用Jordan-Wigner变换, 利用Jordan-Wigner ZZ..Z字符串, 按如下方式构造:
\[a_j = \sigma_z^{\otimes j} \otimes (\frac{\sigma_x + i \sigma_y}{2}) \otimes I^{\otimes N-j-1}\]- Parameters:
- n_sitesint
Fock空间中的站点数量。
- siteint
在Fock空间中添加一个费米子的位置。 对应于上述JW变换中的j。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- operqobj
用于销毁运算符的Qobj。
示例
>>> fdestroy(2) Quantum object: dims=[[2 2], [2 2]], shape=(4, 4), type='oper', isherm=False Qobj data = [[0. 0. 1. 0.] [0. 0. 0. 1.] [0. 0. 0. 0.] [0. 0. 0. 0.]]
- identity(
- dimensions: SpaceLike,
- *,
- dtype: LayerType = None,
身份运算符。
- Parameters:
- dimensions(int) or (list of int) or (list of list of int), Space
希尔伯特空间中的基态数量。如果提供为整数列表,则维度是该列表的乘积,但新Qobj的
dims属性将设置为该列表。根据传递的dimensions,可以生成oper或super。- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- operqobj
身份运算符 Qobj。
示例
>>> qeye(3) Quantum object: dims = [[3], [3]], shape = (3, 3), type = oper, isherm = True Qobj data = [[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.]] >>> qeye([2,2]) Quantum object: dims = [[2, 2], [2, 2]], shape = (4, 4), type = oper, isherm = True Qobj data = [[1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]]
- jmat(
- j: float,
- which: Literal[None],
- *,
- dtype: LayerType = None,
- jmat(
- j: float,
- which: Literal['x', 'y', 'z', '+', '-'],
- *,
- dtype: LayerType = None,
高阶自旋算子:
- Parameters:
- jfloat
操作符的自旋
- whichstr, optional
返回哪个操作符‘x’,’y’,’z’,’+’,’-‘。 如果未给出,则输出为[‘x’,’y’,’z’]
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- jmatQobj or tuple of Qobj
qobj用于请求的自旋运算符。
示例
>>> jmat(1) [ Quantum object: dims = [[3], [3]], shape = [3, 3], type = oper, isHerm = True Qobj data = [[ 0. 0.70710678 0. ] [ 0.70710678 0. 0.70710678] [ 0. 0.70710678 0. ]] Quantum object: dims = [[3], [3]], shape = [3, 3], type = oper, isHerm = True Qobj data = [[ 0.+0.j 0.-0.70710678j 0.+0.j ] [ 0.+0.70710678j 0.+0.j 0.-0.70710678j] [ 0.+0.j 0.+0.70710678j 0.+0.j ]] Quantum object: dims = [[3], [3]], shape = [3, 3], type = oper, isHerm = True Qobj data = [[ 1. 0. 0.] [ 0. 0. 0.] [ 0. 0. -1.]]]
- momentum(
- N: int,
- offset: int = 0,
- *,
- dtype: LayerType = None,
动量算子 p=-1j/sqrt(2)*(a-a.dag())
- Parameters:
- Nint
希尔伯特空间中的基态数量。
- offsetint, default: 0
操作符的有限数状态表示中包含的最低数状态。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- operqobj
动量算子作为Qobj。
- num(
- N: int,
- offset: int = 0,
- *,
- dtype: LayerType = None,
量子对象的数量运算符。
- Parameters:
- Nint
希尔伯特空间中的基态数量。
- offsetint, default: 0
操作符的有限数状态表示中包含的最低数状态。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- oper: qobj
用于数字运算符的Qobj。
示例
>>> num(4) Quantum object: dims=[[4], [4]], shape=(4, 4), type='oper', isherm=True Qobj data = [[0 0 0 0] [0 1 0 0] [0 0 2 0] [0 0 0 3]]
- phase(
- N: int,
- phi0: float = 0,
- *,
- dtype: LayerType = None,
单模Pegg-Barnett相位算子。
- Parameters:
- Nint
希尔伯特空间中的基态数量。
- phi0float, default: 0
参考阶段。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- operqobj
相对于参考相位的相位运算符。
注释
Pegg-Barnett 相位算子在截断的希尔伯特空间上是厄米的。
- position(
- N: int,
- offset: int = 0,
- *,
- dtype: LayerType = None,
位置运算符 \(x = 1 / sqrt(2) * (a + a.dag())\)
- Parameters:
- Nint
希尔伯特空间中的基态数量。
- offsetint, default: 0
操作符的有限数状态表示中包含的最低数状态。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- operqobj
位置运算符作为 Qobj。
- qdiags(
- diagonals: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | list[_SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes]],
- offsets: int | list[int] = None,
- dims: DimensionLike = None,
- shape: tuple[int, int] = None,
- *,
- dtype: LayerType = None,
从对角线的数组构造一个操作符。
- Parameters:
- diagonalsarray_like or sequence of array_like
要沿选定对角线放置的元素数组。
- offsetsint or sequence of ints, optional
- Sequence for diagonals to be set:
k=0 主对角线
k>0 第k个上对角线
k<0 第k条下对角线
- dimslist, optional
操作符的维度
- shapelist, tuple, optional
操作符的形状。如果省略,将生成一个足够大的正方形操作符以包含对角线。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
示例
>>> qdiags(sqrt(range(1, 4)), 1) Quantum object: dims = [[4], [4]], shape = [4, 4], type = oper, isherm = False Qobj data = [[ 0. 1. 0. 0. ] [ 0. 0. 1.41421356 0. ] [ 0. 0. 0. 1.73205081] [ 0. 0. 0. 0. ]]
- qeye(dimensions: SpaceLike, *, dtype: LayerType = None) Qobj[source]
身份运算符。
- Parameters:
- dimensions(int) or (list of int) or (list of list of int), Space
希尔伯特空间中的基态数量。如果提供为整数列表,则维度是该列表的乘积,但新Qobj的
dims属性将设置为该列表。根据传递的dimensions,可以生成oper或super。- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- operqobj
身份运算符 Qobj。
示例
>>> qeye(3) Quantum object: dims = [[3], [3]], shape = (3, 3), type = oper, isherm = True Qobj data = [[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.]] >>> qeye([2,2]) Quantum object: dims = [[2, 2], [2, 2]], shape = (4, 4), type = oper, isherm = True Qobj data = [[1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]]
- qeye_like(qobj: Qobj) Qobj[源代码]
与参考量子对象具有相同维度和类型的恒等运算符。
- Parameters:
- qobjQobj, QobjEvo
参考量子对象以复制维度。
- Returns:
- operqobj
身份运算符 Qobj。
- qutrit_ops(*, dtype: LayerType = None) list[Qobj][source]
三能级系统(qutrit)的运算符。
- Parameters:
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- opers: array
array 的 qutrit 操作符。
- qzero(
- dimensions: SpaceLike,
- dims_right: SpaceLike = None,
- *,
- dtype: LayerType = None,
零操作符。
- Parameters:
- dimensionsint, list of int, list of list of int, Space
希尔伯特空间中的基态数量。如果提供为整数列表,则维度是该列表的乘积,但新Qobj的
dims属性将设置为该列表。根据传递的dimensions,可以生成oper或super。- dims_rightint, list of int, list of list of int, Space, optional
当操作符为矩形时,右侧希尔伯特空间中的基态数量。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- qzeroqobj
零操作符 Qobj。
- qzero_like(qobj: Qobj) Qobj[source]
与参考相同维度和类型的零操作符。
- Parameters:
- qobjQobj, QobjEvo
参考量子对象以复制维度。
- Returns:
- qzeroqobj
零操作符 Qobj。
- sigmam(*, dtype: LayerType = None) Qobj[源代码]
Pauli自旋的湮灭算子。
- Parameters:
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
示例
>>> sigmam() Quantum object: dims = [[2], [2]], shape = [2, 2], type = oper, isHerm = False Qobj data = [[ 0. 0.] [ 1. 0.]]
- sigmap(*, dtype: LayerType = None) Qobj[source]
泡利自旋的创建操作符。
- Parameters:
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
示例
>>> sigmap() Quantum object: dims = [[2], [2]], shape = [2, 2], type = oper, isHerm = False Qobj data = [[ 0. 1.] [ 0. 0.]]
- sigmax(*, dtype: LayerType = None) Qobj[source]
泡利自旋1/2 sigma-x 算子
- Parameters:
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
示例
>>> sigmax() Quantum object: dims = [[2], [2]], shape = [2, 2], type = oper, isHerm = False Qobj data = [[ 0. 1.] [ 1. 0.]]
- sigmay(*, dtype: LayerType = None) Qobj[source]
泡利自旋1/2 sigma-y算子。
- Parameters:
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
示例
>>> sigmay() Quantum object: dims = [[2], [2]], shape = [2, 2], type = oper, isHerm = True Qobj data = [[ 0.+0.j 0.-1.j] [ 0.+1.j 0.+0.j]]
- sigmaz(*, dtype: LayerType = None) Qobj[源代码]
泡利自旋1/2 sigma-z 算子。
- Parameters:
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
示例
>>> sigmaz() Quantum object: dims = [[2], [2]], shape = [2, 2], type = oper, isHerm = True Qobj data = [[ 1. 0.] [ 0. -1.]]
- spin_Jm(j: float, *, dtype: LayerType = None) Qobj[source]
自旋-j 湮灭算符
- Parameters:
- jfloat
操作符的自旋
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- opQobj
qobj操作符的表示。
- spin_Jp(j: float, *, dtype: LayerType = None) Qobj[source]
自旋-j 创建算子
- Parameters:
- jfloat
操作符的自旋
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- opQobj
qobj操作符的表示。
- spin_Jx(j: float, *, dtype: LayerType = None) Qobj[source]
自旋-j x 算子
- Parameters:
- jfloat
操作符的自旋
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- opQobj
qobj表示的操作符。
- spin_Jy(j: float, *, dtype: LayerType = None) Qobj[source]
自旋-j y 算子
- Parameters:
- jfloat
操作符的自旋
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- opQobj
qobj表示的操作符。
- spin_Jz(j: float, *, dtype: LayerType = None) Qobj[source]
自旋-j z 算子
- Parameters:
- jfloat
操作符的自旋
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- opQobj
qobj操作符的表示。
- squeeze(
- N: int,
- z: float,
- offset: int = 0,
- *,
- dtype: LayerType = None,
单模压缩算子。
- Parameters:
- Nint
希尔伯特空间的维度。
- zfloat/complex
压缩参数。
- offsetint, default: 0
操作符的有限数状态表示中包含的最低数状态。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- oper
Qobj 压缩操作符。
- oper
示例
>>> squeeze(4, 0.25) Quantum object: dims = [[4], [4]], shape = [4, 4], type = oper, isHerm = False Qobj data = [[ 0.98441565+0.j 0.00000000+0.j 0.17585742+0.j 0.00000000+0.j] [ 0.00000000+0.j 0.95349007+0.j 0.00000000+0.j 0.30142443+0.j] [-0.17585742+0.j 0.00000000+0.j 0.98441565+0.j 0.00000000+0.j] [ 0.00000000+0.j -0.30142443+0.j 0.00000000+0.j 0.95349007+0.j]]
量子门
- berkeley(*, dtype: LayerType = None) Qobj[source]
表示伯克利门的量子对象。
- Parameters:
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- berkeley_gateqobj
伯克利门的量子对象表示
- cnot(*, dtype: LayerType = None) Qobj[source]
表示CNOT门的量子对象。
- Parameters:
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- cnot_gateqobj
CNOT门的量子对象表示
- cphase(theta: float, *, dtype: LayerType = None) Qobj[source]
返回表示受控相位位移门的量子对象。
- Parameters:
- thetafloat
相位旋转角度。
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- Uqobj
受控相位门的量子对象表示。
- cs_gate(*, dtype: LayerType = None) Qobj[源代码]
受控S门。
- Parameters:
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- result
Qobj 描述旋转的算子的量子对象。
- result
- csign(*, dtype: LayerType = None) Qobj[source]
表示CSIGN门的量子对象。
- Parameters:
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- csign_gateqobj
CSIGN门的量子对象表示
- ct_gate(*, dtype: LayerType = None) Qobj[source]
受控T门。
- Parameters:
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- result
Qobj 描述旋转的算子的量子对象。
- result
- cy_gate(*, dtype: LayerType = None) Qobj[source]
受控Y门。
- Parameters:
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- result
Qobj 描述旋转的算子的量子对象。
- result
- cz_gate(*, dtype: LayerType = None) Qobj[source]
受控Z门。
- Parameters:
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- result
Qobj 描述旋转的算子的量子对象。
- result
- fredkin(*, dtype: LayerType = None) Qobj[source]
表示Fredkin门的量子对象。
- Parameters:
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- fredkin_gateqobj
Fredkin门的量子对象表示。
- globalphase(
- theta: float,
- N: int = 1,
- *,
- dtype: LayerType = None,
返回表示全局相移门的量子对象。
- Parameters:
- thetafloat
相位旋转角度。
- Nint:
量子比特数量
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- phase_gateqobj
全局相移门的量子对象表示。
- hadamard_transform(
- N: int = 1,
- *,
- dtype: LayerType = None,
表示N量子比特Hadamard门的量子对象。
- Parameters:
- Nint:
量子比特数量
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- qqobj
N量子比特Hadamard门的量子对象表示。
- iswap(*, dtype: LayerType = None) Qobj[源代码]
表示iSWAP门的量子对象。
- Parameters:
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- iswap_gateqobj
iSWAP门的量子对象表示
- molmer_sorensen(
- theta: float,
- *,
- dtype: LayerType = None,
Mølmer–Sørensen门的量子对象。
- Parameters:
- theta: float
交互脉冲的持续时间。
- target: int
目标量子位的索引。
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- molmer_sorensen_gate:
Qobj Mølmer–Sørensen门的量子对象表示。
- molmer_sorensen_gate:
- phasegate(theta: float, *, dtype: LayerType = None) Qobj[source]
返回表示相移门的量子对象。
- Parameters:
- thetafloat
相位旋转角度。
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- phase_gateqobj
相移门的量子对象表示。
- qrot(
- theta: float,
- phi: float,
- *,
- dtype: LayerType = None,
由拉比振荡驱动的单量子比特旋转,无失谐。
- Parameters:
- phifloat
拉比脉冲的初始阶段。
- thetafloat
拉比脉冲的持续时间。
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- qrot_gate
Qobj 物理量子比特在拉比脉冲下的旋转的量子对象表示。
- qrot_gate
- qubit_clifford_group(*, dtype: LayerType = None) list[Qobj][源代码]
生成单量子比特上的Clifford群,使用Ross和Selinger给出的群表示法 (http://www.mathstat.dal.ca/~selinger/newsynth/)。
- Parameters:
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- oplist of Qobj
Clifford 操作符,表示为 Qobj 实例。
- rx(phi: float, *, dtype: LayerType = None) Qobj[source]
对操作符 sigmax 进行角度为 phi 的单量子比特旋转。
- Parameters:
- phifloat
旋转角度
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- resultqobj
描述旋转的算子的量子对象。
- ry(phi: float, *, dtype: LayerType = None) Qobj[源代码]
对操作符 sigmay 进行角度为 phi 的单量子比特旋转。
- Parameters:
- phifloat
旋转角度
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- resultqobj
描述旋转的算子的量子对象。
- rz(phi: float, *, dtype: LayerType = None) Qobj[source]
对操作符sigmaz进行角度为phi的单量子比特旋转。
- Parameters:
- phifloat
旋转角度
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- resultqobj
描述旋转的算子的量子对象。
- s_gate(*, dtype: LayerType = None) Qobj[source]
单量子比特旋转,也称为相位门或Z90门。
- Parameters:
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- result
Qobj 描述围绕z轴90度旋转的算子的量子对象。
- result
- snot(*, dtype: LayerType = None) Qobj[source]
表示SNOT(Hadamard)门的量子对象。
- Parameters:
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- snot_gateqobj
SNOT门的量子对象表示。
- sqrtiswap(*, dtype: LayerType = None) Qobj[source]
表示平方根iSWAP门的量子对象。
- Parameters:
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- sqrtiswap_gateqobj
平方根iSWAP门的量子对象表示
- sqrtnot(*, dtype: LayerType = None) Qobj[source]
单量子比特平方根非门。
- Parameters:
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- resultqobj
描述平方根NOT门的量子对象。
- sqrtswap(*, dtype: LayerType = None) Qobj[source]
表示平方根SWAP门的量子对象。
- Parameters:
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- sqrtswap_gateqobj
平方根SWAP门的量子对象表示
- swap(*, dtype: LayerType = None) Qobj[source]
表示SWAP门的量子对象。
- Parameters:
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- swap_gateqobj
SWAP门的量子对象表示
- swapalpha(alpha: float, *, dtype: LayerType = None) Qobj[source]
表示SWAPalpha门的量子对象。
- Parameters:
- alphafloat
SWAPalpha 门的角度。
- dtypestr or type, [keyword only] [optional]
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- swapalpha_gateqobj
SWAPalpha门的量子对象表示
能量受限操作符
- enr_destroy(dims, excitations, *, dtype=None)[源代码]
为激发数受限的状态空间中的模式生成湮灭算子。例如,考虑一个由4个模式组成的系统,每个模式有5个状态。总的希尔伯特空间大小为5**4 = 625。如果我们只对包含最多2个激发的状态感兴趣,我们只需要包括如下状态:
(0, 0, 0, 0) (0, 0, 0, 1) (0, 0, 0, 2) (0, 0, 1, 0) (0, 0, 1, 1) (0, 0, 2, 0) …
此函数创建了在此状态空间内作用的4种模式的湮灭算子:
a1, a2, a3, a4 = enr_destroy([5, 5, 5, 5], excitations=2)
从这一点开始,湮灭算符 a1, …, a4 可以按照通常的模式用于设置哈密顿量、坍缩算符和期望值算符等。
- Parameters:
- dimslist
复合量子系统每个子系统的维度列表。
- excitationsinteger
状态空间中包含的最大激发数。
- dtypetype or str, optional
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- a_opslist of qobj
由dims描述的复合量子系统中每个模式的湮灭算符列表。
- enr_fock(dims, excitations, state, *, dtype=None)[来源]
在激发数受限的状态空间中生成Fock态表示。dims参数是一个整数列表,定义了复合量子系统每个组分的量子态数量,而excitations指定了要包含在状态空间中的基态的最大激发数。state参数是一个整数元组,指定了要生成Fock态表示的状态(在数基表示中)。
- Parameters:
- dimslist
复合量子系统每个子系统的维度列表。
- excitationsinteger
状态空间中包含的最大激发数。
- statelist of integers
数字基数表示中的状态。
- dtypetype or str, optional
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- ketQobj
一个Qobj实例,表示在由dims和exciations定义的激发数限制状态空间中的Fock状态。
- enr_identity(dims, excitations, *, dtype=None)[source]
为通过dims和exciations参数定义的激发数受限状态空间生成恒等运算符。有关这些参数的更详细描述,请参阅enr_fock的文档字符串。
- Parameters:
- dimslist
复合量子系统每个子系统的维度列表。
- excitationsinteger
状态空间中包含的最大激发数。
- dtypetype or str, optional
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- opQobj
一个Qobj实例,表示在由dims和exciations定义的激发数限制状态空间中的恒等运算符。
- enr_state_dictionaries(dims, excitations)[source]
返回状态的数量,以及用于将状态元组转换为状态索引的查找字典,反之亦然,适用于具有给定组件数量和最大激发数的系统。
- Parameters:
- dims: list
一个包含每个子系统中状态数量的列表。
- excitationsinteger
维度的最大数量
- Returns:
- nstates, state2idx, idx2state: integer, dict, dict
状态的数量 nstates,一个用于从状态元组查找状态索引的字典,以及一个用于从状态索引查找状态元组的字典。state2idx 和 idx2state 是相互反转的,即
state2idx[idx2state[idx]] = idx和idx2state[state2idx[state]] = state。
- enr_thermal_dm(dims, excitations, n, *, dtype=None)[来源]
在由dims和exciations参数定义的激发数限制状态空间中生成热态的密度算子。有关这些参数的更详细描述,请参阅enr_fock的文档。dims中每个模式的温度由平均激发数n指定。
- Parameters:
- dimslist
复合量子系统每个子系统的维度列表。
- excitationsinteger
状态空间中包含的最大激发数。
- ninteger
热态中的平均激发数。n 可以是一个浮点数(适用于每个模式),或者是一个与 dims 长度相同的列表/数组,其中每个元素指定相应模式的温度。
- dtypetype or str, optional
存储表示。任何qutip.data.to已知的数据层都被接受。
- Returns:
- dmQobj
热态密度矩阵。
随机算符和状态
该模块是随机状态和操作符生成器的集合。
- rand_dm(
- dimensions: int | list[int] | list[list[int]] | Space,
- density: float = 0.75,
- distribution: Literal['ginibre', 'hs', 'pure', 'eigen', 'uniform'] = 'ginibre',
- *,
- eigenvalues: Sequence[float] = (),
- rank: int = None,
- seed: int | SeedSequence | Generator = None,
- dtype: str | type = None,
创建一个具有所需维度的随机密度矩阵。
- Parameters:
- dimensions(int) or (list of int) or (list of list of int)
希尔伯特空间的维度。如果作为整数列表提供,则维度是该列表的乘积,但新Qobj的
dims属性将设置为该列表。根据传递的dimensions,可以生成oper或super。- densityfloat, default: 0.75
输出密度矩阵的密度在[0,1]之间。由“pure”、“eigen”和“herm”使用。
分布 : str {“ginibre”, “hs”, “pure”, “eigen”, “uniform”},
- default: “ginibre”
用于获取密度矩阵的方法。
“ginibre” : 使用[BCSZ08]的算法生成的秩为
rank的Ginibre随机密度算子。“hs” : Hilbert-Schmidt 集合,等同于一个全秩的 ginibre 算子。
“pure”:由随机ket创建的密度矩阵。
“eigen”:具有给定
eigenvalues的密度矩阵。“herm”:使用
rand_herm从一个随机厄米矩阵构建。
- eigenvaluesarray_like, optional
输出厄米矩阵的特征值。长度必须与矩阵的形状匹配。
- rankint, optional
当使用“ginibre”分布时,密度矩阵的秩。 如果未提供,将默认为全秩运算符。
- seedint, SeedSequence, Generator, optional
用于创建随机数生成器的种子或预先准备好的生成器。当未提供时,将使用默认生成器。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- operqobj
密度矩阵量子算子。
- rand_herm(
- dimensions: int | list[int] | list[list[int]] | Space,
- density: float = 0.3,
- distribution: Literal['fill', 'pos_def', 'eigen'] = 'fill',
- *,
- eigenvalues: Sequence[float] = (),
- seed: int | SeedSequence | Generator = None,
- dtype: str | type = None,
创建一个随机的稀疏厄米量子对象。
- Parameters:
- dimensions(int) or (list of int) or (list of list of int)
希尔伯特空间的维度。如果作为整数列表提供,则维度是该列表的乘积,但新Qobj的
dims属性将设置为该列表。根据传递的dimensions,可以生成oper或super。- densityfloat, default: 0.30
输出埃尔米特算子的密度在[0,1]之间。
- distributionstr {“fill”, “pos_def”, “eigen”}, default: “fill”
用于获取密度矩阵的方法。
“fill” : 使用 \(H=0.5*(X+X^{+})\) 其中 \(X\) 是一个随机生成的量子算子,其元素均匀分布在
[-1, 1] + [-1j, 1j]之间。“eigen”:一个具有给定
eigenvalues的密度矩阵。它使用随机复数雅可比旋转来打乱操作符。“pos_def”:通过对角线优势返回一个正半定矩阵。
- eigenvaluesarray_like, optional
输出厄米矩阵的特征值。长度必须与矩阵的形状匹配。
- seedint, SeedSequence, Generator, optional
用于创建随机数生成器的种子或预先准备好的生成器。当未提供时,将使用默认生成器。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- oper
Qobj 厄米量子算子。
- oper
注释
如果给定一个特征值列表,对象将通过复杂的雅可比旋转创建。虽然这种方法对于小矩阵来说很快,但不应该重复用于生成大于约1000x1000的矩阵。
- rand_ket(
- dimensions: int | list[int] | list[list[int]] | Space,
- density: float = 1,
- distribution: Literal['haar', 'fill'] = 'haar',
- *,
- seed: int | SeedSequence | Generator = None,
- dtype: str | type = None,
创建一个随机的ket向量。
- Parameters:
- dimensions(int) or (list of int) or (list of list of int)
希尔伯特空间的维度。如果作为整数列表提供,则维度是该列表的乘积,但新Qobj的
dims属性将设置为该列表。根据传递的dimensions,可以生成oper或super。- densityfloat, default: 1
使用
fill方法时输出ket状态的密度在[0,1]之间。- distributionstr {“haar”, “fill”}, default: “haar”
用于获取kets的方法。
haar : 通过将Haar随机酉矩阵应用于固定纯态获得的Haar随机纯态。
fill : 用均匀分布的随机复数填充键。
- seedint, SeedSequence, Generator, optional
用于创建随机数生成器的种子或预先准备好的生成器。当未提供时,将使用默认生成器。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- operqobj
量子态向量。
- rand_kraus_map(
- dimensions: int | list[int] | list[list[int]] | Space,
- *,
- seed: int | SeedSequence | Generator = None,
- dtype: str | type = None,
在N维希尔伯特空间上以Kraus形式创建一个随机的CPTP映射。
- Parameters:
- dimensions(int) or (list of int) or (list of list of int)
希尔伯特空间的维度。如果作为整数列表提供,则维度是该列表的乘积,但新Qobj的
dims属性将设置为该列表。根据传递的dimensions,可以生成oper或super。- seedint, SeedSequence, Generator, optional
用于创建随机数生成器的种子或预先准备好的生成器。当未提供时,将使用默认生成器。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- oper_listlist of qobj
N^2 x N x N qobj 操作符。
- rand_stochastic(
- dimensions: int | list[int] | list[list[int]] | Space,
- density: float = 0.75,
- kind: Literal['left', 'right'] = 'left',
- *,
- seed: int | SeedSequence | Generator = None,
- dtype: str | type = None,
生成一个随机随机矩阵。
- Parameters:
- dimensions(int) or (list of int) or (list of list of int)
希尔伯特空间的维度。如果作为整数列表提供,则维度是该列表的乘积,但新Qobj的
dims属性将设置为该列表。根据传递的dimensions,可以生成oper或super。- densityfloat, default: 0.75
输出密度矩阵的密度在[0,1]之间。
- kindstr {“left”, “right”}, default: “left”
生成‘左’或‘右’随机矩阵。
- seedint, SeedSequence, Generator, optional
用于创建随机数生成器的种子或预先准备好的生成器。当未提供时,将使用默认生成器。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- operqobj
随机矩阵的量子算子形式。
- rand_super(
- dimensions: int | list[int] | list[list[int]] | Space,
- *,
- superrep: Literal['super', 'choi', 'chi'] = 'super',
- seed: int | SeedSequence | Generator = None,
- dtype: str | type = None,
返回一个随机绘制的超算子,作用于作用于N维的算子。
- Parameters:
- dimensions(int) or (list of int) or (list of list of int)
希尔伯特空间的维度。如果作为整数列表提供,则维度是该列表的乘积,但新Qobj的
dims属性将设置为该列表。根据传递的dimensions,可以生成oper或super。- superropstr, default: “super”
超算子的表示
- seedint, SeedSequence, Generator, optional
用于创建随机数生成器的种子或预先准备好的生成器。当未提供时,将使用默认生成器。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- rand_super_bcsz(
- dimensions: int | list[int] | list[list[int]] | Space,
- enforce_tp: bool = True,
- rank: int = None,
- *,
- superrep: Literal['super', 'choi', 'chi'] = 'super',
- seed: int | SeedSequence | Generator = None,
- dtype: str | type = None,
返回一个从Bruzda等人集合中随机抽取的超算子,用于CPTP映射[BCSZ08]。请注意,由于有限的数值精度,对于小于满秩的秩,零特征值可能会变得略微负,因此返回的算子实际上并不完全是正的。
- Parameters:
- dimensions(int) or (list of int) or (list of list of int)
希尔伯特空间的维度。如果提供一个整数,它被理解为要返回的超算符维度的平方根,相应的维度为
[[[N],[N]], [[N],[N]]]。如果提供为一个整数列表,则维度被理解为该超算符所应用的密度矩阵的空间:dimensions=[2,2]dims=[[[2,2],[2,2]], [[2,2],[2,2]]]。- enforce_tpbool, default: True
如果为True,则强制执行[BCSZ08]的迹保持条件;否则仅强制执行完全正性。
- rankint, optional
采样的超算符的秩。如果为None,则生成一个全秩的超算符。
- seedint, SeedSequence, Generator, optional
用于创建随机数生成器的种子或预先准备好的生成器。当未提供时,将使用默认生成器。
- superropstr, default: “super”
表示
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- rhoQobj
作用于向量化的dim × dim密度算子的超算子,从BCSZ分布中采样。
- rand_unitary(
- dimensions: int | list[int] | list[list[int]] | Space,
- density: float = 1,
- distribution: Literal['haar', 'exp'] = 'haar',
- *,
- seed: int | SeedSequence | Generator = None,
- dtype: str | type = None,
创建一个随机的稀疏酉量子对象。
- Parameters:
- dimensions(int) or (list of int) or (list of list of int)
希尔伯特空间的维度。如果作为整数列表提供,则维度是该列表的乘积,但新Qobj的
dims属性将设置为该列表。根据传递的dimensions,可以生成oper或super。- densityfloat, default: 1
输出酉算子的密度在[0,1]之间。
- distributionstr {“haar”, “exp”}, default: “haar”
用于获取酉矩阵的方法。
haar : 使用[Mez07]算法的Haar随机酉矩阵。
exp : 使用 \(\exp(-iH)\),其中 H 是一个随机生成的厄米算子。
- seedint, SeedSequence, Generator, optional
用于创建随机数生成器的种子或预先准备好的生成器。当未提供时,将使用默认生成器。
- dtypetype or str, optional
存储表示。任何
qutip.data.to已知的数据层都被接受。
- Returns:
- operqobj
单一量子运算符。
Qobj 操作
张量
用于通过张量积创建复合量子对象的模块。
- composite(*args: Qobj) Qobj[source]
- composite( ) QobjEvo
给定两个或多个运算符、kets或bras,返回对应于每个参数上的复合系统的Qobj。对于普通运算符和向量,这是张量积,而对于超算符和向量化运算符,这是列重排的张量积。
如果传入的是在希尔伯特空间和利乌维尔空间上支持的Qobjs混合体,则前者会被提升。普通运算符被假定为酉运算符,并使用
to_super进行提升,而kets和bras则通过取其投影器并使用operator_to_vector(ket2dm(arg))进行提升。
- super_tensor(*args: Qobj) Qobj[source]
- super_tensor( ) QobjEvo
计算输入超算符的张量积,通过将每个向量化算符作用的底层希尔伯特空间张量在一起。
- Parameters:
- argsarray_like
list或array的量子对象,具有type="super"。
- Returns:
- objqobj
一个复合量子对象。
- tensor(*args: Qobj) Qobj[source]
- tensor( ) QobjEvo
计算输入算子的张量积。
- Parameters:
- argsarray_like
list或array的张量积量子对象。
- Returns:
- objqobj
一个复合量子对象。
示例
>>> tensor([sigmax(), sigmax()]) Quantum object: dims = [[2, 2], [2, 2]], shape = [4, 4], type = oper, isHerm = True Qobj data = [[ 0.+0.j 0.+0.j 0.+0.j 1.+0.j] [ 0.+0.j 0.+0.j 1.+0.j 0.+0.j] [ 0.+0.j 1.+0.j 0.+0.j 0.+0.j] [ 1.+0.j 0.+0.j 0.+0.j 0.+0.j]]
- tensor_contract(
- qobj: Qobj,
- *pairs: tuple[int, int],
沿着一个或多个索引对收缩一个qobj。
注意
请注意,这里使用的是密集表示,因此不应该用于非常大的Qobjs。
- Parameters:
- qobj: Qobj
用于收缩子空间的运算符。
- pairstuple
一个或多个元组
(i, j)表示原始 qobj 的i和j维度应该被收缩。
- Returns:
- cqobjQobj
原始的 Qobj,所有命名的索引对都被收缩掉了。
量子对象(Qobj)类,用于表示量子状态和操作符,以及相关函数。
- ptrace(Q: Qobj, sel: int | list[int]) Qobj[源代码]
保留选定组件的Qobj的部分轨迹。
- Parameters:
- Q
Qobj 复合量子对象。
- selint/list
一个
int或list,用于在部分追踪后保留的组件。
- Q
- Returns:
- oper
Qobj 表示保留选定组件的部分迹的量子对象。
- oper
注释
此函数仅用于旧版兼容性。建议使用
ptrace()Qobj 方法。
超算符和Liouvillians
- lindblad_dissipator( ) Qobj[源代码]
- lindblad_dissipator( ) QobjEvo
Lindblad耗散器(广义)用于一对坍缩算子(a, b),或当b未指定时用于单个坍缩算子(a):
\[\mathcal{D}[a,b]\rho = a \rho b^\dagger - \frac{1}{2}a^\dagger b\rho - \frac{1}{2}\rho a^\dagger b\]- Parameters:
- aQobj or QobjEvo
折叠运算符的左侧部分。
- bQobj or QobjEvo, optional
折叠运算符的右侧部分。如果未指定,b 默认为 a。
- chifloat, optional
在某些系统中,可以通过数值评估稳态占据概率作为人工相位参数
chi的函数的导数来确定状态占据数概率分布的统计矩(均值、方差等),该参数乘以耗散项的a \rho a^dagger项,并通过e ^ (i * chi)引入。因子e ^ (i * chi)是通过统计矩的生成函数引入的。有关该技术的示例,请参见纳米机电系统的全计数统计和混合电路-QED中的光子介导电子传输。此参数已被弃用,并可能在QuTiP 5中移除。- data_onlybool, default: False
返回数据对象而不是Qobj
- Returns:
- Dqobj, QobjEvo
Lindblad耗散超算子。
- liouvillian( ) Qobj[source]
- liouvillian( ) QobjEvo
从哈密顿量和崩溃算子的
列表中组装Liouvillian超算子。- Parameters:
- HQobj or QobjEvo, optional
系统的哈密顿量或Liouvillian的哈密顿分量。如果未给出,则视为0。
- c_opsarray_like of Qobj or QobjEvo, optional
一个
list或array的折叠操作符。- data_onlybool, default: False
返回数据对象而不是Qobj
- chiarray_like of float, optional
在某些系统中,可以通过数值评估稳态占据概率作为人工相位参数
chi的导数来确定各种状态占据概率分布的统计矩(均值、方差等),这些参数包含在每个崩溃算子的lindblad_dissipator中。有关参考文献和更多详细信息,请参阅lindblad_dissipator的文档。此参数已被弃用,并可能在QuTiP 5中移除。
- Returns:
- LQobj or QobjEvo
Liouvillian 超算子。
- operator_to_vector(op: Qobj) Qobj[source]
给定一个矩阵形式的量子算子,创建一个向量表示。 传递的对象应具有
Qobj.type为'oper'或'super';此函数不适用于通用矩阵重塑。- Parameters:
- opQobj or QobjEvo
矩阵形式的量子算子。这必须具有‘oper’或‘super’类型。
- Returns:
- Qobj or QobjEvo
相同的对象,但重新转换为类型为‘operator-ket’的列堆叠向量形式。输出与传递的对象类型相同。
- spost(A: AnyQobj) AnyQobj[source]
由操作符A后乘形成的超操作符
- Parameters:
- AQobj or QobjEvo
用于后乘法的量子运算符。
- Returns:
- superQobj or QobjEvo
由输入的量子对象形成的超算子。
- spre(A: AnyQobj) AnyQobj[source]
由算子A预乘形成的超算子。
- Parameters:
- AQobj or QobjEvo
用于预乘的量子运算符。
- Returns:
- super :Qobj or QobjEvo
由输入的量子对象形成的超算子。
超算子表示
该模块实现了超算子表示之间的转换,包括超矩阵、Kraus、Choi和Chi(过程)矩阵形式。
- kraus_to_choi(kraus_ops: list[Qobj]) Qobj[source]
将Kraus算子列表转换为通道的Choi表示。
本质上,Kraus 算子是 Choi 矩阵的分解,并且从它们重建的过程应该遵循 \(E = \sum_{i} |K_i\rangle\rangle \langle\langle K_i|\),其中我们使用了 Kraus 算子的向量表示。
- Parameters:
- kraus_opslist[Qobj]
要转换为Choi表示的Kraus算子列表。
- Returns:
- choiQobj
一个量子对象,表示与
kraus_ops相同的映射,使得choi.superrep == "choi"。
- kraus_to_super(
- kraus_list: list[Qobj],
- sparse=False,
将Kraus运算符列表转换为超运算符。
- Parameters:
- kraus_listlist of Qobj
要转换的Kraus超算子列表。
- sparse: bool
如果为真,则防止生成密集的中间结果。
- to_chi(q_oper: Qobj) Qobj[源代码]
将表示量子映射的Qobj转换为Pauli基中的chi(过程)矩阵表示,使得返回的算符的迹等于系统的维度。
- Parameters:
- q_operQobj
要转换为Chi表示的超级运算符。如果
q_oper是type="oper",则它被视为通过共轭作用, 使得to_chi(A) == to_chi(sprepost(A, A.dag()))。
- Returns:
- chiQobj
一个量子对象,表示与
q_oper相同的地图,使得chi.superrep == "chi"。
- Raises:
- TypeError:
如果给定的量子对象不是映射,或者无法转换为Chi表示。
- to_choi(q_oper: Qobj) Qobj[source]
将表示量子映射的Qobj转换为Choi表示,使得返回的算符的迹等于系统的维度。
- Parameters:
- q_operQobj
要转换为Choi表示的超级运算符。如果
q_oper是type="oper",则它被视为通过共轭作用, 使得to_choi(A) == to_choi(sprepost(A, A.dag()))。
- Returns:
- choiQobj
一个量子对象,表示与
q_oper相同的映射,使得choi.superrep == "choi"。
- Raises:
- TypeError:
如果给定的量子对象不是映射,或者无法转换为Choi表示。
- to_kraus(
- q_oper: Qobj,
- tol: float = 1e-09,
将表示量子映射的Qobj转换为量子对象列表,每个对象表示给定映射的Kraus分解中的一个操作符。
- Parameters:
- q_operQobj
要转换为Kraus表示的超算子。如果
q_oper是type="oper",则它通过共轭作用, 使得to_kraus(A) == to_kraus(sprepost(A, A.dag())) == [A]。- tolFloat, default: 1e-9
用于丢弃特征值/Kraus操作的可选阈值参数。
- Returns:
- kraus_opslist of Qobj
量子对象的列表,每个对象代表
q_oper分解中的一个Kraus算子。
- Raises:
- TypeError: if the given quantum object is not a map, or cannot be
分解为Kraus算子。
- to_stinespring(
- q_oper: Qobj,
- threshold: float = 1e-10,
将表示量子映射 \(\Lambda\) 的 Qobj 转换为一对部分等距
A和B,使得对于所有输入X,有 \(\Lambda(X) = \Tr_2(A X B^\dagger)\),其中部分迹是在A和B的输出维度上的新索引上进行的。对于完全正数的输入,
A将始终等于B,直到精度误差。- Parameters:
- q_operQobj
要转换为Stinespring对的超算子。
- thresholdfloat, default: 1e-10
用于丢弃特征值/Kraus操作数的阈值参数。
- Returns:
- A, BQobj
表示输入Qobj的每个Stinespring矩阵的量子对象。
- to_super(q_oper: Qobj) Qobj[源代码]
将表示量子映射的Qobj转换为超矩阵(Liouville)表示。
- Parameters:
- q_operQobj
要转换为超矩阵表示的超级运算符。如果
q_oper是type="oper",则它被视为通过共轭作用, 使得to_super(A) == sprepost(A, A.dag())。
- Returns:
- superopQobj
一个量子对象,表示与
q_oper相同的地图,使得superop.superrep == "super"。
- Raises:
- TypeError
如果给定的量子对象不是映射,或者无法转换为超矩阵表示。
操作符和超操作符维度
用于操作维度规格的内部使用模块。
- from_tensor_rep(tensorrep, dims)[源代码]
to_tensor_rep的反向操作符。从具有N个索引的N维numpy数组和维度创建一个Qobj。- Parameters:
- tensorrep: ndarray
Numpy数组,每个维度对应dims中的一个索引。
- dims: list of list, Dimensions
Qobj 的维度。
- Returns:
- Qobj
重建的Qobj
- to_tensor_rep(q_oper)[源代码]
将
Qobj转换为一个形状为展平维度的numpy数组。- Parameters:
- q_oper: Qobj
要重塑的对象
- Returns:
- ndarray:
Numpy数组,每个维度对应dims中的一个索引。
示例
>>> ket.dims [[2, 3], [1]] >>> to_tensor_rep(ket).shape (2, 3, 1)
>>> oper.dims [[2, 3], [2, 3]] >>> to_tensor_rep(oper).shape (2, 3, 2, 3)
>>> super_oper.dims [[[2, 3], [2, 3]], [[2, 3], [2, 3]]] >>> to_tensor_rep(super_oper).shape (2, 3, 2, 3, 2, 3, 2, 3)
杂项
- simdiag(
- ops,
- evals: bool = True,
- *,
- tol: float = 1e-14,
- safe_mode: bool = True,
- use_dense_solver: bool = True,
可交换厄米矩阵的同步对角化。
- Parameters:
- opslist, array
list或array的 qobjs 表示对易的 Hermitian 运算符。- evalsbool, default: True
是否返回每个操作的特征值和特征向量,或者仅返回特征向量。
- tolfloat, default: 1e-14
用于检测退化本征态的容差。
- safe_modebool, default: True
是否检查所有操作符是否为厄米且可交换的。如果设置为
False并且操作符不可交换,返回的特征向量 通常只是第一个操作符的特征向量。- use_dense_solver: bool, default: True
是否强制使用numpy密集特征求解器。当
False时,稀疏运算符将使用scipy稀疏特征求解器,这不适用于此用途。
- Returns:
- eigstuple
表示量子对象的特征值和特征向量的数组元组,对应于每个算符的同步特征向量和特征值。
从Qobj中提取数据
期望值
- expect(oper: Qobj, state: Qobj) complex[source]
- expect( ) ndarray[Any, dtype[complex]]
- expect( ) list[complex]
- expect( ) list[ndarray[Any, dtype[complex]]]
计算操作符和状态的期望值。状态
k在操作符A上的期望定义为k.dag() @ A @ k,而对于密度矩阵R在操作符A上的期望则是trace(A @ R)。- Parameters:
- operqobj / list of Qobj
单个或列表的期望值运算符。
- stateqobj / list of Qobj
单个或列表的量子态或密度矩阵。
- Returns:
- exptfloat / complex / list / array
期望值。如果
oper是厄米特矩阵,则为real,否则为complex。如果传递了多个oper,则返回一个数组列表。如果state或oper是数组,则返回期望值的(嵌套)数组。
示例
>>> expect(num(4), basis(4, 3)) == 3 True
熵函数
- concurrence(rho)[source]
计算双量子比特态的并发纠缠度量。
- Parameters:
- stateqobj
用于双量子比特态的Ket、bra或密度矩阵。
- Returns:
- concurfloat
并发
参考文献
[1]https://en.wikipedia.org/wiki/Concurrence_(quantum_computing)
- entropy_conditional(rho, selB, base=2.718281828459045, sparse=False)[source]
计算选定密度矩阵组件的条件熵 \(S(A|B)=S(A,B)-S(B)\)。
- Parameters:
- rhoqobj
复合对象的密度矩阵
- selBint/list
为密度矩阵B选择的组件
- base{e, 2}, default: e
对数的底数。
- sparsebool, default: False
使用稀疏特征求解器。
- Returns:
- ent_condfloat
条件熵的值
- entropy_linear(rho)[source]
密度矩阵的线性熵。
- Parameters:
- rhoqobj
敏感度矩阵或ket/bra向量。
- Returns:
- entropyfloat
ρ的线性熵。
示例
>>> rho=0.5*fock_dm(2,0)+0.5*fock_dm(2,1) >>> entropy_linear(rho) 0.5
- entropy_mutual(rho, selA, selB, base=2.718281828459045, sparse=False)[源代码]
计算系统密度矩阵的选择组件之间的互信息 S(A:B)。
- Parameters:
- rhoqobj
复合量子系统的密度矩阵
- selAint/list
int 或 list 第一个选定的密度矩阵组件。
- selBint/list
int 或 list 的第二个选择的密度矩阵组件。
- base{e, 2}, default: e
对数的底数。
- sparsebool, default: False
使用稀疏特征求解器。
- Returns:
- ent_mutfloat
所选组件之间的互信息。
- entropy_relative(rho, sigma, base=2.718281828459045, sparse=False, tol=1e-12)[source]
计算两个密度矩阵之间的相对熵 S(rho||sigma)。
- Parameters:
- Returns:
- rel_entfloat
相对熵的值。保证大于零,并且只有当 rho 和 sigma 相同时才应等于零。
参考文献
参见Nielsen & Chuang的《量子计算与量子信息》, 第11.3.1节,第511页,了解量子相对熵的详细解释。
示例
首先我们定义两个密度矩阵:
>>> rho = qutip.ket2dm(qutip.ket("00")) >>> sigma = rho + qutip.ket2dm(qutip.ket("01")) >>> sigma = sigma.unit()
然后我们使用基数2(即
log2)和基数e(即log)计算它们的相对熵。>>> qutip.entropy_relative(rho, sigma, base=2) 1.0 >>> qutip.entropy_relative(rho, sigma) 0.6931471805599453
密度矩阵度量
该模块包含一系列用于计算状态和操作符之间度量(距离测量)的函数。
- average_gate_fidelity(oper, target=None)[source]
返回量子通道到目标通道的平均门保真度,如果未给出目标,则返回到身份通道的平均门保真度。
- Parameters:
- Returns:
- fidfloat
操作符和目标之间的平均门保真度,或操作符和单位矩阵之间的平均门保真度。
注释
平均门保真度的定义例如在: A. Gilchrist, N.K. Langford, M.A. Nielsen, Phys. Rev. A 71, 062310 (2005)。 平均门保真度所基于的状态保真度定义来自 R. Jozsa, Journal of Modern Optics, 41:12, 2315 (1994)。 它是
qutip.core.metrics.fidelity中实现的保真度的平方,该实现遵循Nielsen & Chuang的 “量子计算与量子信息”
- bures_angle(A, B)[source]
返回两个密度矩阵A和B之间的Bures角度。
Bures角度的范围从0(对于具有单位保真度的状态)到pi/2。
- Parameters:
- Aqobj
密度矩阵或状态向量。
- Bqobj
密度矩阵或状态向量,其维度与A相同。
- Returns:
- anglefloat
密度矩阵之间的Bures角度。
- bures_dist(A, B)[source]
返回两个密度矩阵 A 和 B 之间的 Bures 距离。
Bures距离的范围从0(对于具有单位保真度的状态)到sqrt(2)。
- Parameters:
- Aqobj
密度矩阵或状态向量。
- Bqobj
密度矩阵或状态向量,其维度与A相同。
- Returns:
- distfloat
密度矩阵之间的Bures距离。
- dnorm(A, B=None, solver='CVXOPT', verbose=False, force_solve=False, sparse=True)[source]
计算量子映射 q_oper 的钻石范数,使用 [Wat13] 的简化半定规划。
钻石范数SDP通过使用CVXPY来解决。
如果提供了B并且A和B都是酉矩阵,那么使用以下几何解释可以更高效地计算差异的钻石范数: \(\|A - B\|_{\diamond}\) 等于 \(2 \sqrt(1 - d^2)\),其中 \(d`是原点到 :math:`A B^{\dagger}\) 特征值的凸包的距离。 参见[AKN98]第18页,紧接在12.6证明之后的段落,作为参考。
- Parameters:
- AQobj
量子映射以获取钻石范数。
- BQobj or None
如果提供,则采用\(A - B\)的钻石范数。
- solverstr {“CVXOPT”, “SCS”}, default: “CVXOPT”
与CVXPY一起使用的求解器。“SCS”通常显著更快,但准确性稍差。
- verbosebool, default: False
如果为True,打印关于解决方案的额外信息。
- force_solvebool, default: False
如果为True,强制dnorm解决相关的SDP,即使已知参数的特殊情况。
- sparsebool, default: True
是否在凸优化问题中使用稀疏矩阵。 默认值为True。
- Returns:
- dnfloat
q_oper的钻石范数。
- Raises:
- ImportError
如果无法导入CVXPY。
- fidelity(A, B)[source]
计算两个密度矩阵之间的保真度(伪度量)。
- Parameters:
- Aqobj
密度矩阵或状态向量。
- Bqobj
密度矩阵或状态向量,其维度与A相同。
- Returns:
- fidfloat
A和B之间的保真度伪度量。
注释
使用Nielsen和Chuang的“量子计算与量子信息”中的定义。它是R. Jozsa在《现代光学杂志》41:12, 2315 (1994)中定义的保真度的平方根,用于
qutip.core.metrics.process_fidelity。示例
>>> x = fock_dm(5,3) >>> y = coherent_dm(5,1) >>> np.testing.assert_almost_equal(fidelity(x,y), 0.24104350624628332)
- hellinger_dist(A, B, sparse=False, tol=0)[source]
计算两个密度矩阵之间的量子Hellinger距离。
公式:
hellinger_dist(A, B) = sqrt(2 - 2 * tr(sqrt(A) * sqrt(B)))参见:D. Spehner, F. Illuminati, M. Orszag, 和 W. Roga, “使用Bures和Hellinger距离的量子相关性的几何度量” arXiv:1611.03449
- Parameters:
- Returns:
- hellinger_distfloat
A和B之间的量子Hellinger距离。范围从0到sqrt(2)。
示例
>>> x = fock_dm(5,3) >>> y = coherent_dm(5,1) >>> np.allclose(hellinger_dist(x, y), 1.3725145002591095) True
- hilbert_dist(A, B)[source]
返回两个密度矩阵A和B之间的希尔伯特-施密特距离。
- Parameters:
- Aqobj
密度矩阵或状态向量。
- Bqobj
密度矩阵或状态向量,其维度与A相同。
- Returns:
- distfloat
密度矩阵之间的Hilbert-Schmidt距离。
注释
参见 V. Vedral 和 M. B. Plenio, Phys. Rev. A 57, 1619 (1998).
- process_fidelity(oper, target=None)[source]
返回量子通道到目标通道的过程保真度,如果未给出目标,则返回到身份通道的过程保真度。两个通道之间的过程保真度定义为它们的归一化Choi矩阵之间的状态保真度。
- Parameters:
- Returns:
- fidfloat
操作符和目标之间的过程保真度,或操作符和单位矩阵之间的过程保真度。
注释
自 Qutip 5.0 起,此函数计算过程保真度,如 A. Gilchrist、N.K. Langford、M.A. Nielsen 在《Phys. Rev. A 71, 062310 (2005)》中所定义。以前,它计算的功能现在在 qutip-qtrl 中实现为
get_fidelity。过程保真度所基于的状态保真度定义来自R. Jozsa,现代光学杂志,41:12,2315(1994)。它是
qutip.core.metrics.fidelity中实现的平方,该实现遵循Nielsen & Chuang的“量子计算与量子信息”。
- tracedist(A, B, sparse=False, tol=0)[source]
计算两个密度矩阵之间的迹距离。 参见:Nielsen & Chuang, “量子计算与量子信息”
- Parameters:
- Aqobj
密度矩阵或状态向量。
- Bqobj
密度矩阵或状态向量,其维度与A相同。
- tolfloat, default: 0
如果使用稀疏特征求解器,则使用的容差。(0 = 机器精度)
- sparsebool, default: False
使用稀疏特征求解器。
- Returns:
- tracedistfloat
A和B之间的迹距离。
示例
>>> x=fock_dm(5,3) >>> y=coherent_dm(5,1) >>> np.testing.assert_almost_equal(tracedist(x,y), 0.9705143161472971)
量子态的测量
用于测量量子对象的模块。
- measure(state, ops, tol=None)[source]
一种调度方法,提供处理可观测样式测量和投影仪样式测量(POVMs和PVMs)的测量结果。
有关返回签名,请检查:
measure_observable用于可观测量的测量。measure_povm用于POVM测量。
- measure_observable(state, op, tol=None)[source]
在给定状态上执行由操作符指定的测量。
此函数模拟了许多量子力学入门教材中描述的经典量子测量。测量将状态坍缩到给定算子的一个本征态,测量结果是对应的本征值。
- Parameters:
- Returns:
- measured_valuefloat
测量的结果(op的一个特征值)。
- state
Qobj 新状态(如果给定的是ket,则为ket,否则为密度矩阵)。
示例
测量自旋向上基态的自旋z分量:
>>> measure_observable(basis(2, 0), sigmaz()) (1.0, Quantum object: dims = [[2], [1]], shape = (2, 1), type = ket Qobj data = [[-1.] [ 0.]])
由于自旋向上基是sigmaz的本征态,这个测量总是返回1作为测量结果(自旋向上基的本征值)和原始状态(直到一个全局相位)。
测量自旋向下基态的自旋x分量:
>>> measure_observable(basis(2, 1), sigmax()) (-1.0, Quantum object: dims = [[2], [1]], shape = (2, 1), type = ket Qobj data = [[-0.70710678] [ 0.70710678]])
这个测量在50%的时间内返回1,在另外50%的时间内返回-1。返回的新状态是sigmax的相应本征态。
也可以对密度矩阵进行测量。下面我们执行与上述相同的测量,但是是在表示纯自旋向下状态的密度矩阵上进行的:
>>> measure_observable(ket2dm(basis(2, 1)), sigmax()) (-1.0, Quantum object: dims = [[2], [2]], shape = (2, 2), type = oper Qobj data = [[ 0.5 -0.5] [-0.5 0.5]])
测量结果相同,但新状态以密度矩阵的形式返回。
- measure_povm(state, ops, tol=None)[source]
执行由POVM列表指定的测量。
此函数模拟POVM测量。测量将状态坍缩为测量结果之一,并返回与坍缩状态对应的操作符索引以及坍缩状态。
- measurement_statistics(state, ops, tol=None)[source]
一种调度方法,提供处理可观测样式测量和投影仪样式测量(POVMs和PVMs)的测量统计。
有关返回签名,请检查:
measurement_statistics_observable用于可观测测量。measurement_statistics_povm用于POVM测量。