举例说明二次型和用 einsum 计算
什么是“二次型”
在数学中,特别是线性代数中,二次型(quadratic form) 是一个涉及向量和矩阵的表达式,其形式为:
[
Q(v) = v^T M v
]
其中:
- ( v ) 是一个向量(长度为 ( n ))。
- ( M ) 是一个 ( n \times n ) 的方阵(矩阵)。
- ( v^T ) 表示向量 ( v ) 的转置(即一个列向量变为行向量)。
这个表达式计算的结果是一个标量。
实际例子
假设我们有一个简单的二次型问题,其中:
- 向量 ( v ) 是 ( v = \begin{pmatrix} 1 \ 2 \end{pmatrix} )。
- 矩阵 ( M ) 是 ( M = \begin{pmatrix} 3 & 4 \ 4 & 5 \end{pmatrix} )。
现在,我们要计算这个二次型:
[
Q(v) = v^T M v
]
1. 手动计算
首先,我们将向量 ( v ) 和矩阵 ( M ) 代入公式:
[
v^T M = \begin{pmatrix} 1 & 2 \end{pmatrix} \begin{pmatrix} 3 & 4 \ 4 & 5 \end{pmatrix}
]
执行矩阵乘法:
[
v^T M = \begin{pmatrix} 1 \times 3 + 2 \times 4 & 1 \times 4 + 2 \times 5 \end{pmatrix} = \begin{pmatrix} 11 & 14 \end{pmatrix}
]
接着,我们再将结果与向量 ( v ) 相乘:
[
Q(v) = \begin{pmatrix} 11 & 14 \end{pmatrix} \begin{pmatrix} 1 \ 2 \end{pmatrix} = 11 \times 1 + 14 \times 2 = 11 + 28 = 39
]
所以,二次型 ( Q(v) ) 的值是 39。
2. 使用 numpy.einsum
计算
现在,我们使用 numpy.einsum
来计算这个二次型:
import numpy as np
v = np.array([1, 2])
M = np.array([[3, 4], [4, 5]])
# 使用 einsum 计算二次型
Q = np.einsum('i,ij,j->', v, M, v)
print(Q) # 输出 39
这段代码中,np.einsum('i,ij,j->', v, M, v)
表示计算 ( v^T M v ) 的值,结果同样是 39。
解读
这个例子中,我们展示了二次型的计算过程:
- 矩阵 ( M ) 表示的是一个二次形式,可能用于描述某种系统的能量或其他物理量。
- 向量 ( v ) 可以理解为输入的参数或状态。
- 二次型 ( Q(v) ) 计算的是在这个特定状态下,系统的总能量(或其他物理量)。
例如,在物理中,二次型可以用于描述一个系统的势能,其中矩阵 ( M ) 表示系统的耦合系数,向量 ( v ) 表示系统的位移。通过计算二次型 ( Q(v) ),我们可以得到系统在特定状态下的总能量。