求解C * M = N(C,M和N是矩阵),其中M是已知的,N的结构在SymPy中给出

时间:2017-12-21 21:01:21

标签: python linear-algebra sympy matrix-multiplication linear-equation

我遇到过这个矩阵乘法问题,其中M是一些具有已知值的非奇异3x3矩阵(即M = sympy.Matrix([[1,0,0],[0,2,0],[0,0, 3]]))C是要确定的3x3矩阵,N是以下形式: 1.N的第1和第3行与C相同(例如N.row(0)[i] = C.row(0)[i] 0 <= i <= 2) 2.第2行中N的元素是M中相应列的总和(例如N.row(1)[1] = sum(M.col(1)))

在网上搜索表达这个问题的方法作为一个方程组我没有发现任何东西。我一直试图用符号矩阵来解决这个问题,通过解决三个不同的Ax = b形式的系统来解决这个问题。每个系统由C中的一行乘以M,b作为N的列,使得A = MT,x =(C.row(i))。T和b = N。

象征性地解决它导致了一种甚至无法理解的荒谬表达,我无法从中获得数字解决方案。

我的最新尝试如下:

import sympy as sp
def func(mat=matrix([[1, 1, 1], [0, 2, 2], [1, 4, 5]])):
    c11, c12, c13, c21, c22, c23, c31, c32, c33 = sp.symbols('c11, c12, c13, c21, c22, c23, c31, c32, c33')
    M = mat.T

    b1 = sp.Matrix([[x, y, z]]).T
    b2 = sp.Matrix([[sum(M.col(0)), sum(M.col(1)), sum(M.col(2))]]).T
    b3 = sp.Matrix([[a, b, c]]).T

    M1 = M.col_insert(3, b1)
    M2 = M.col_insert(3, b2)
    M3 = M.col_insert(3, b3)

    C1 = sp.linsolve(M1, (x, y, z))
    C2 = sp.linsolve(M2, (x, y, z))
    C3 = sp.linsolve(M3, (a, b, c))

    return C1, C2, C3

调用此方法会产生以下结果:

>>> func()
({(x + y - z, -x/2 + 2*y - 3*z/2, -y + z)}, {(-3, -17/2, 6)}, {(a + b - c, -a/2 + 2*b - 3*c/2, -b + c)})

1 个答案:

答案 0 :(得分:1)

我不会声称我理解您的代码,但解决方案实际上很容易猜到:CN的第一行和第三行必须是{{1}的特征向量具有特征值M,在一般情况下不存在或必须为零。中间行要求由1全部解决,因为C是非奇异的,这是唯一的解决方案。

让我们用好旧的numpy来数字检查这个:

M