表示¶
在各种基底中表示状态中的运算符的逻辑。
待办事项:
在连续希尔伯特空间中进行表示的工作。
文档默认基础功能。
- sympy.physics.quantum.represent.enumerate_states(*args, **options)[源代码][源代码]¶
返回给定状态的实例,附加虚拟索引
以两种不同的模式运行:
传递给它两个参数。第一个是将要索引的基本状态,第二个参数是要附加的索引列表。
传递了三个参数。第一个是再次要索引的基态。第二个是计数的起始索引。最后一个参数是您希望接收的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中指定的基相对应的基态实例。如果没有指定基,该函数会尝试形成给定表达式的默认基态。
有三种行为:
在选项中指定的基础已经是 StateBase 的一个实例。如果是这种情况,则直接返回。如果指定了类但不是实例,则返回一个默认实例。
指定的基础是一个操作符或一组操作符。如果是这种情况,则使用 operator_to_state 映射方法。
未指定基底。如果 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 表达式。
示例
在这里,我们通过子类化
Operator
和Ket
来创建 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)