【问题标题】:How to find inverse of a matrix with one constant variable (using arrays)?如何找到具有一个常量变量的矩阵的逆矩阵(使用数组)?
【发布时间】:2021-01-25 16:11:43
【问题描述】:

我试图找到它的倒数,但 numpy 似乎只能找到数字的倒数。我有alpha 不等于零。

我该怎么做?

from sympy import *
import numpy as np 
import scipy.linalg 

A = np.array([[1,2,3],[2,2,3],[3,4,5]])
B = np.array([[1,0,3],[8,2,3],[3,9,5]])

alpha = symbols('a')
K = A - alpha*B
print(np.linalg.inv(K))

【问题讨论】:

    标签: python arrays numpy scipy sympy


    【解决方案1】:

    你是对的,NumPy inv 函数需要数字输入。有关 SymPy Matrix 对象的 basic methods 的 SymPy 文档说“要找到矩阵的逆矩阵,只需将其提升到 -1 次方即可。”

    所以...

    from sympy import *
    import numpy as np 
    import scipy.linalg 
    
    A = np.array([[1,2,3],[2,2,3],[3,4,5]])
    B = np.array([[1,0,3],[8,2,3],[3,9,5]])
    
    alpha = symbols('a')
    K = A - alpha*B
    
    M = Matrix(K)
    print("M:")
    print(repr(M))
    print()
    print("inv(M):")
    print(repr(M**-1))
    

    输出:

    M:
    Matrix([
    [  1 - a,       2, 3 - 3*a],
    [2 - 8*a, 2 - 2*a, 3 - 3*a],
    [3 - 3*a, 4 - 9*a, 5 - 5*a]])
    
    inv(M):
    Matrix([
    [                      (17*a - 2)/(181*a**2 - 33*a + 2), -(27*a - 2)/(181*a**2 - 33*a + 2),                             6*a/(181*a**2 - 33*a + 2)],
    [                      (31*a - 1)/(181*a**2 - 33*a + 2),   (4*a - 4)/(181*a**2 - 33*a + 2),                     -(21*a - 3)/(181*a**2 - 33*a + 2)],
    [-(66*a**2 - 38*a + 2)/(181*a**3 - 214*a**2 + 35*a - 2),   (9*a + 2)/(181*a**2 - 33*a + 2), -(2*a**2 + 12*a - 2)/(181*a**3 - 214*a**2 + 35*a - 2)]])
    

    正如@OscarBenjamin 在评论中指出的那样,您还可以使用inv 方法,即M.inv()

    【讨论】:

    • 一个 sympy 矩阵也有一个 inv 方法,即 M.inv() 用于逆。
    猜你喜欢
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多