假设您有一个包含复杂条目的矩阵,并且您希望提取每个条目的虚分量,并在Sage中创建一个新的矩阵。例如,假设
M = [[1 + 2i, 5 + 3*i], [5, 3*i]]我想要
M_imag = [[2, 3], [0, 3]]我知道z.imag()返回sage中复数z的虚部。另外,下面的代码适用于向量:[z.real() for z in v],但我不能让它对矩阵工作。
我认识然后,NumPy库提供了这样的方法。。但我不想把Sage矩阵改成numpy。最终,如果有一种方法可以将NumPy矩阵更改为Sage,那么这也是可行的。我更喜欢独立于其他库(包括NumPy )的解决方案。
如何才能在圣人身上实现这一点呢?
发布于 2021-05-19 16:30:56
请注意,这确实定义了列表列表,而不是矩阵:
sage: M = [[1 + 2*i, 5 + 3*i], [5, 3*i]]这样它就像列表的列表一样显示:
sage: M
[[2*I + 1, 3*I + 5], [5, 3*I]]它的“父”是列表的类别:
sage: parent(M)
<class 'list'>若要定义矩阵,请使用列表列表(或matrix数组)的matrix:
sage: M = matrix([[i, 3], [5, i]])它以矩阵形式显示:
sage: M
[I 3]
[5 I]生活在矩阵的空间里:
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]
)进一步阅读
https://stackoverflow.com/questions/67596326
复制相似问题