Python 求解C*M=N(C,M和N是矩阵),其中M是已知的,N的结构在辛中给出
我遇到了这个矩阵乘法问题,其中M是一些具有已知值的非奇异3x3矩阵(即M=sympy。矩阵([[1,0,0],[0,2,0],[0,0,3]])C是一个要确定的3x3矩阵,N的形式如下: 1.N的第一行和第三行与C相同(例如N.row(0)[i]=C.row(0)[i]表示0>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)})Python 求解C*M=N(C,M和N是矩阵),其中M是已知的,N的结构在辛中给出,python,linear-algebra,sympy,matrix-multiplication,linear-equation,Python,Linear Algebra,Sympy,Matrix Multiplication,Linear Equation,我遇到了这个矩阵乘法问题,其中M是一些具有已知值的非奇异3x3矩阵(即M=sympy。矩阵([[1,0,0],[0,2,0],[0,0,3]])C是一个要确定的3x3矩阵,N的形式如下: 1.N的第一行和第三行与C相同(例如N.row(0)[i]=C.row(0)[i]表示0>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)}) 我不想说我理解你的代码,但解决方案实际上很容易猜测:第
我不想说我理解你的代码,但解决方案实际上很容易猜测:第一行和第三行
C
和N
必须是M
的左特征向量,特征值1
,在一般情况下不存在或必须为零。中间行的要求由C
解决因为M
是非奇异的,所以这是唯一的解决方案
让我们使用好的旧numpy以数字形式检查:
import numpy as np
M = np.random.random((3, 3))
M
# array([[ 0.39632944, 0.82429087, 0.88705214],
# [ 0.39092656, 0.63228762, 0.54931835],
# [ 0.76935833, 0.40833527, 0.46202912]])
C = np.outer((0,1,0),(1,1,1))
C
# array([[0, 0, 0]
# [1, 1, 1],
# [0, 0, 0]])
N = np.outer((0,1,0),M.sum(0))
N
# array([[ 0. , 0. , 0. ],
# [ 1.55661432, 1.86491377, 1.89839961],
# [ 0. , 0. , 0. ]])
np.allclose(C @ M , N)
# True
谢谢你的洞察力