【问题标题】:How do I convert a Python Array to a SymPy Matrix to calculate the determinant?如何将 Python 数组转换为 SymPy 矩阵以计算行列式?
【发布时间】:2017-11-01 15:46:36
【问题描述】:

我设法创建了一个这样的 python 数组:

MainMatrix=[[0 for x in range(n)] for y in range(n)]

(我更改了矩阵中的一些值)

现在,我想知道是否可以将其转换为 SymPy 矩阵,以便我可以计算行列式(假设 MainMatrix 中的所有值都不是整数,而有些是 SymPy 符号)。我想要这样的东西:

M=Matrix([MainMatrix])          #Conversion of Array to SymPy Matrix
M.det()                         #Computation of Determinant of the Matrix

(是的,我知道第一行不起作用,但我只是表示我的意图)

将不胜感激此转换的解决方案,或任何其他查找 MainMatrix 行列式的替代方法(请记住,所有条目都不是整数,有些是 SymPy 符号)。

【问题讨论】:

    标签: python arrays python-2.7 matrix sympy


    【解决方案1】:

    您的MainMatrix 已经是正确的格式。您只需将其传递给sympy.Matrix

    M = Matrix(MainMatrix)
    

    【讨论】:

      【解决方案2】:

      根据文档的例子,就是这么简单:

      from sympy import *
      import math
      
      n=3
      
      n_atoms=8
      
      MainMatrix=Matrix([[0 for x in range(n)] for y in range(n)])
      
      KappaMatrix=Matrix([0 for x in range(n-1)])
      
      MassMatrix=Matrix([0 for x in range(n)])
      
      Kappa=3
      
      ka_by_pi=4
      
      for i in range(1,n):
      
          KappaMatrix[i-1]=3
      
      for i in range(1,n+1):
      
          MassMatrix[i-1]=3
      
      for i in range(2,n):
      
          MainMatrix[i-1]= -KappaMatrix[i-2]/MassMatrix[i-1]
      
          MainMatrix[i-1]= (KappaMatrix[i-2] + KappaMatrix[i-1])/MassMatrix[i-1]
      
          MainMatrix[i-1]= -KappaMatrix[i-1]/MassMatrix[i-1]
      
          MainMatrix[0]=(KappaMatrix[0]+Kappa)/MassMatrix[0]
      
          MainMatrix[0]=-(KappaMatrix[0])/MassMatrix[0]
      
          i=symbols('i')
      
          MainMatrix[0]= -(Kappa/MassMatrix[0])*(math.cos(math.pi*ka_by_pi)+(i*math.sin(math.pi*ka_by_pi)))
      
          MainMatrix[n-1]= -(Kappa/MassMatrix[n-1])*(math.cos(math.pi*ka_by_pi)-(i*math.sin(math.pi*ka_by_pi)))
      
          MainMatrix[n-1]=-(KappaMatrix[n-2])/MassMatrix[n-1]
      
          MainMatrix[n-1]=(KappaMatrix[n-2]+Kappa)/MassMatrix[n-1]
      
          t=symbols('t')
      
      for j in range(0,n_atoms):
          MainMatrix[j]=MainMatrix[j]-(t**2)
      
      print(MainMatrix)
      

      【讨论】:

      • 如果我这样做,然后尝试使用 MainMatrix[i-1][i]=2 #JustAnExample 在 MainMatrix 中分配/更改一个值,那么它给了我一个错误: TypeError: ' Zero' 对象不支持项目分配我如何解决这个问题?
      • @Raj 您能否在问题中添加包含所有详细信息的示例?因为它对我有用,但也许我错过了什么
      • @Raj 我的意思是,你要构造的矩阵
      • 这里是关于矩阵构造的代码(因为太长所以没有分享):drive.google.com/open?id=0BzMBW_NtVc2abEMyZkYzc2xENkE
      • @Raj,鉴于我拥有的数据,这是我可以提供的更接近的方法,所以我希望它对你有所帮助,我更新了答案,看起来你只能调用一列,所以你可以做只是: MainMatrix[1] ,而不是 MainMatrix[1][0]
      猜你喜欢
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 2013-12-31
      • 2013-06-08
      • 2015-04-20
      • 2022-01-17
      相关资源
      最近更新 更多