SageMath:获取矩阵的虚部

SageMath: Getting the imaginary part of a matrix

假设您有一个包含复数项的矩阵,并且您想提取每个项的虚部并在 Sage 中创建一个新矩阵。例如,假设

M = [[1 + 2i, 5 + 3*i], [5, 3*i]]

我想得到

M_imag = [[2, 3], [0, 3]]

我知道 z.imag() returns 复数的虚部 z 在 sage 中。以下代码也适用于向量: [z.real() for z in v] 但我无法让它为矩阵工作。

我知道then NumPy library provides the means for this。但我不想将 Sage 矩阵更改为 numpy。最终,如果有办法将 NumPy 矩阵改回 Sage,那也行得通。我更喜欢独立于其他库(包括 NumPy)的解决方案。

如何在 Sage 中实现这一点?

我认为这会解决您的问题[[z.imag() for z in v] for v in M]。您遍历 M 中的行,然后遍历每行中的元素并计算它的虚部。

请注意,这实际上定义了列表的列表,而不是矩阵:

sage: M = [[1 + 2*i, 5 + 3*i], [5, 3*i]]

使其显示为列表列表:

sage: M
[[2*I + 1, 3*I + 5], [5, 3*I]]

其“父级”是列表的 class:

sage: parent(M)
<class 'list'>

要定义矩阵,请使用列表列表(或 NumPy 数组)的 matrix

sage: M = matrix([[i, 3], [5, i]])

显示为矩阵:

sage: M
[I 3]
[5 I]

并且生活在 space 个矩阵中:

sage: parent(M)
Full MatrixSpace of 2 by 2 dense matrices
over Number Field in I with defining polynomial x^2 + 1 with I = 1*I

按如下方式更改整行或单个条目:

sage: M[0, :] = matrix([[2*I + 1, 3*I + 5]])
sage: M[1, 1] = 3*I

并查看结果:

sage: M
[2*I + 1 3*I + 5]
[      5     3*I]

获取矩阵的 LaTeX 代码:

sage: latex(M)
sage: latex(M)
\left(\begin{array}{rr}
2 i + 1 & 3 i + 5 \
5 & 3 i
\end{array}\right)

看到排版很好的矩阵:

sage: view(M)

计算轨迹和行列式:

sage: M.trace()
5*I + 1
sage: M.det()
-12*I - 31

对每个条目应用映射,例如realimag得到实部或虚部:

sage: A = M.apply_map(real)
sage: B = M.apply_map(imag)

并查看结果:

sage: A, B, A + i*B, M
(
[1 5]  [2 3]  [2*I + 1 3*I + 5]  [2*I + 1 3*I + 5]
[5 0], [0 3], [      5     3*I], [      5     3*I]
)

进一步阅读