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
对每个条目应用映射,例如real
或imag
得到实部或虚部:
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]
)
进一步阅读
假设您有一个包含复数项的矩阵,并且您想提取每个项的虚部并在 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
对每个条目应用映射,例如real
或imag
得到实部或虚部:
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]
)
进一步阅读