【问题标题】:SageMath: Getting the imaginary part of a matrixSageMath:获取矩阵的虚部
【发布时间】:2021-05-19 03:00:43
【问题描述】:

假设您有一个包含复杂条目的矩阵,并且您想提取每个条目的虚部并在 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] 但我无法让它适用于矩阵。

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

如何在 Sage 中实现这一点?

【问题讨论】:

    标签: python numpy matrix sage


    【解决方案1】:

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

    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'>
    

    要定义矩阵,请使用列表列表(或 NumPy 数组)的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
    

    对每个条目应用映射,例如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]
    )
    

    进一步阅读

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 谢谢@Lisa!我不敢相信您的“我希望这会有所帮助”在编辑中被删除。无论如何,它确实有帮助。对您的代码稍作修改就可以满足我的期望:Matrix([[z.imag() for z in v] for v in M])。如另一个答案所示,这给了我与M.apply_map(imag) 相同的输出。看来M.apply_map(imag) 也稍微快了一点。
      猜你喜欢
      • 1970-01-01
      • 2016-02-20
      • 2014-01-15
      • 2019-05-14
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多