表示

在各种基底中表示状态中的运算符的逻辑。

待办事项:

  • 在连续希尔伯特空间中进行表示的工作。

  • 文档默认基础功能。

sympy.physics.quantum.represent.enumerate_states(*args, **options)[源代码][源代码]

返回给定状态的实例,附加虚拟索引

以两种不同的模式运行:

  1. 传递给它两个参数。第一个是将要索引的基本状态,第二个参数是要附加的索引列表。

  2. 传递了三个参数。第一个是再次要索引的基态。第二个是计数的起始索引。最后一个参数是您希望接收的ket的数量。

尝试调用 state._enumerate_state。如果失败,则返回一个空列表。

参数:
参数列表

请参阅上面的操作模式列表以获取解释

示例

>>> from sympy.physics.quantum.cartesian import XBra, XKet
>>> from sympy.physics.quantum.represent import enumerate_states
>>> test = XKet('foo')
>>> enumerate_states(test, 1, 3)
[|foo_1>, |foo_2>, |foo_3>]
>>> test2 = XBra('bar')
>>> enumerate_states(test2, [4, 5, 10])
[<bar_4|, <bar_5|, <bar_10|]
sympy.physics.quantum.represent.get_basis(
expr,
*,
basis=None,
replace_none=True,
**options,
)[源代码][源代码]

返回一个与选项=s中指定的基相对应的基态实例。如果没有指定基,该函数会尝试形成给定表达式的默认基态。

有三种行为:

  1. 在选项中指定的基础已经是 StateBase 的一个实例。如果是这种情况,则直接返回。如果指定了类但不是实例,则返回一个默认实例。

  2. 指定的基础是一个操作符或一组操作符。如果是这种情况,则使用 operator_to_state 映射方法。

  3. 未指定基底。如果 expr 是一个状态,则返回其类的默认实例。如果 expr 是一个算符,则将其映射到相应的状态。如果两者都不是,则我们无法获得基态。

如果基础无法映射,则不会进行更改。

这将从 represent 内部调用,并且 represent 只会传递 QExpr 的实例。

TODO (?): 支持 Muls 和其他类型的表达式?

参数:
表达式操作符或状态基类

寻求其基础的表达式

示例

>>> from sympy.physics.quantum.represent import get_basis
>>> from sympy.physics.quantum.cartesian import XOp, XKet, PxOp, PxKet
>>> x = XKet()
>>> X = XOp()
>>> get_basis(x)
|x>
>>> get_basis(X)
|x>
>>> get_basis(x, basis=PxOp())
|px>
>>> get_basis(x, basis=PxKet)
|px>
sympy.physics.quantum.represent.integrate_result(orig_expr, result, **options)[源代码][源代码]

返回对给定表达式中任何单位 (|x><x|) 进行积分的结果。旨在用于对连续基表示的结果进行积分。

此函数对可能插入到量子表达式中的任何单位进行积分,并返回结果。它使用传递给它的基态的希尔伯特空间区间来确定积分的极限。必须指定单位选项才能使其工作。

注意:这主要由 represent() 内部使用。给出的示例仅用于展示使用场景。

参数:
原始表达式量子表达式

要表达的原始表达式

结果: Expr

我们希望积分的最终表示形式

示例

>>> from sympy import symbols, DiracDelta
>>> from sympy.physics.quantum.represent import integrate_result
>>> from sympy.physics.quantum.cartesian import XOp, XKet
>>> x_ket = XKet()
>>> X_op = XOp()
>>> x, x_1, x_2 = symbols('x, x_1, x_2')
>>> integrate_result(X_op*x_ket, x*DiracDelta(x-x_1)*DiracDelta(x_1-x_2))
x*DiracDelta(x - x_1)*DiracDelta(x_1 - x_2)
>>> integrate_result(X_op*x_ket, x*DiracDelta(x-x_1)*DiracDelta(x_1-x_2),
...     unities=[1])
x*DiracDelta(x - x_2)
sympy.physics.quantum.represent.rep_expectation(expr, **options)[源代码][源代码]

返回给定算符的 <x'|A|x> 类型表示。

参数:
表达式操作符

要在指定基底中表示的算子

示例

>>> from sympy.physics.quantum.cartesian import XOp, PxOp, PxKet
>>> from sympy.physics.quantum.represent import rep_expectation
>>> rep_expectation(XOp())
x_1*DiracDelta(x_1 - x_2)
>>> rep_expectation(XOp(), basis=PxOp())
<px_2|*X*|px_1>
>>> rep_expectation(XOp(), basis=PxKet())
<px_2|*X*|px_1>
sympy.physics.quantum.represent.rep_innerproduct(expr, **options)[源代码][源代码]

返回给定状态的类似内积的表示(例如 <x'|x>)。

尝试计算与指定基中的一个bra的内部乘积。应该只传递一个KetBase或BraBase的实例。

参数:
表达式KetBase 或 BraBase

要表示的表达式

示例

>>> from sympy.physics.quantum.represent import rep_innerproduct
>>> from sympy.physics.quantum.cartesian import XOp, XKet, PxOp, PxKet
>>> rep_innerproduct(XKet())
DiracDelta(x - x_1)
>>> rep_innerproduct(XKet(), basis=PxOp())
sqrt(2)*exp(-I*px_1*x/hbar)/(2*sqrt(hbar)*sqrt(pi))
>>> rep_innerproduct(PxKet(), basis=XOp())
sqrt(2)*exp(I*px*x_1/hbar)/(2*sqrt(hbar)*sqrt(pi))
sympy.physics.quantum.represent.represent(expr, **options)[源代码][源代码]

在给定的基底中表示量子表达式。

在量子力学中,抽象态和算符可以在各种基组中表示。在此操作下,以下变换发生:

  • Ket -> 列向量或函数

  • Bra -> 函数的行向量

  • 运算符 -> 矩阵或微分运算符

此函数是此操作的顶级接口。

此函数遍历 SymPy 表达式树,查找具有 _represent 方法的 QExpr 实例。然后调用此方法,并用该方法返回的表示形式替换对象。默认情况下,_represent 方法将分派到处理特定基组表示逻辑的其他方法。这些方法的命名约定如下:

def _represent_FooBasis(self, e, basis, **options)

此函数将具有在其基集合中表示其类实例的逻辑,该基集合具有名为 FooBasis 的类。

参数:
表达式表达式

要表示的表达式。

基础算符, 基组

包含关于基组信息的物体。如果使用了一个算符,则假设基组是该算符的正交本征向量。不过,通常情况下,基组参数可以是任何包含基组信息的对象。

选项dict

传递给底层方法的选项的键/值对,该方法用于查找表示。这些选项可用于控制表示的执行方式。例如,这里可以设置基组的大小。

返回:
e表达式

表示量子表达式的 SymPy 表达式。

示例

在这里,我们通过子类化 OperatorKet 来创建 z 自旋算符及其自旋 1/2 向上本征态。通过定义 _represent_SzOp 方法,该 ket 可以在 z 自旋基中表示。

>>> from sympy.physics.quantum import Operator, represent, Ket
>>> from sympy import Matrix
>>> class SzUpKet(Ket):
...     def _represent_SzOp(self, basis, **options):
...         return Matrix([1,0])
...
>>> class SzOp(Operator):
...     pass
...
>>> sz = SzOp('Sz')
>>> up = SzUpKet('up')
>>> represent(up, basis=sz)
Matrix([
[1],
[0]])

这里我们看到一个在连续基底中表示的例子。我们看到,表示各种笛卡尔位置算符和kets的组合的结果,给我们带来了涉及DiracDelta函数的连续表达式。

>>> from sympy.physics.quantum.cartesian import XOp, XKet, XBra
>>> X = XOp()
>>> x = XKet()
>>> y = XBra('y')
>>> represent(X*x)
x*DiracDelta(x - x_2)
>>> represent(X*x*y)
x*DiracDelta(x - x_3)*DiracDelta(x_1 - y)