使用sympy的决定因素

时间:2014-11-07 10:00:56

标签: python sympy

以下代码根据x,y,z生成3x3矩阵。我想生成矩阵的行列式。但无法这样做。

import numpy as np
import sympy as sp
from sympy import *
from sympy.matrices import Matrix
x,y,z =sp.symbols('x,y,z')
H1=np.array([[x,y,z]])
H2=np.array([[0.0630,0.0314,-0.0001],[0.0314,96.1659,-0.0001],[-0.0001,-0.0001,0.0001]])
H3=H1.T
H=H1*H2*H3
print H

要查找上述矩阵的行列式,我使用以下命令。

H.det()

但它显示错误

AttributeError: 'numpy.ndarray' object has no attribute 'det' 

2 个答案:

答案 0 :(得分:5)

首先需要将numpy n维数组转换为sympy矩阵,然后执行符号行列式的计算。 @hildensia说什么不会起作用,因为H是一个numpy对象,它不会与符号实体一起工作。

>>> M = sp.Matrix(H)
>>> M
Matrix([
[ 0.063*x**2,   0.0314*x*y, -0.0001*x*z],
[ 0.0314*x*y, 96.1659*y**2, -0.0001*y*z],
[-0.0001*x*z,  -0.0001*y*z, 0.0001*z**2]])
>>> M.det()
0.000604784913*x**2*y**2*z**2

答案 1 :(得分:0)

numpy中的行列式不是数组类的成员,而是linalg模块中的函数。所以只需使用:

np.linalg.det(H)