举例说明二次型和用 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) ),我们可以得到系统在特定状态下的总能量。

posted @ 2024-08-12 10:06  立体风  阅读(17)  评论(0编辑  收藏  举报