【发布时间】:2021-11-01 17:32:37
【问题描述】:
我有以下代码
import numpy as np
import sympy as sp
def bra(i,d):
arr = np.zeros((1,d))
if i <= (d-1):
arr[:,i] = 1
else:
print("Index Out of bounds")
return arr
def density(i,j,d):
return bra(i,d).T*bra(j,d)
SIGMA = (1/3)*(np.kron(np.kron(bra(0,3),bra(1,3)).T,np.kron(bra(0,3),bra(1,3)))+np.kron(np.kron(bra(1,3),bra(2,3)).T,np.kron(bra(1,3),bra(2,3)))+np.kron(np.kron(bra(2,3),bra(0,3)).T,np.kron(bra(2,3),bra(0,3))))
DELTA = (1/3)*(np.kron(np.kron(bra(1,3),bra(0,3)).T,np.kron(bra(1,3),bra(0,3)))+np.kron(np.kron(bra(2,3),bra(1,3)).T,np.kron(bra(2,3),bra(1,3)))+np.kron(np.kron(bra(0,3),bra(2,3)).T,np.kron(bra(0,3),bra(2,3))))
本质上,bra(i,d) 给出了一个 (1,d) 数组,其中第 (1,i) 个元素为 1,其余元素为 0。例如,
bra(0,3)=[[1,0,0]]
bra(1,3)=[[0,1,0]]
bra(0,3)=[[0,0,1]]
density(i,j,d) 返回 (d,d) 矩阵,第 (i,j) 个元素为一,其余为零,例如,
density(0,1,3) = array([[0., 1., 0.], [0., 0., 0.],[0., 0., 0.]]).
使用上面的代码,我使用 np.kron 生成了一个 (9,9) Matrix 对象
a = sp.symbols('a', positive = True)
HORO = (2/21)*(np.kron(density(0,0,3),density(0,0,3))+np.kron(density(1,0,3),density(0,1,3))+np.kron(density(0,0,3),density(2,2,3))
+np.kron(density(0,1,3),density(1,0,3))+np.kron(density(1,1,3),density(1,1,3))+np.kron(density(2,1,3),density(1,2,3))
+np.kron(density(0,2,3),density(2,0,3))+np.kron(density(1,2,3),density(2,1,3))+np.kron(density(2,2,3),density(2,2,3)))+(a/7)*SIGMA+((5-a)/7)*DELTA
M = np.asmatrix(HORO)
可以证明 M 矩阵是可逆的 是下面的(9,9)矩阵
matrix([[0.0952380952380952, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0.0476190476190476*a, 0, 0.0952380952380952, 0, 0, 0, 0, 0],
[0, 0, 0.333333333333333 - 0.0476190476190476*a, 0, 0, 0,
0.0952380952380952, 0, 0],
[0, 0.0952380952380952, 0,
0.238095238095238 - 0.0476190476190476*a, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0.0952380952380952, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0.0476190476190476*a, 0, 0.0952380952380952, 0],
[0, 0, 0, 0, 0, 0, 0.0476190476190476*a, 0, 0],
[0, 0, 0, 0, 0, 0.0952380952380952, 0,
0.238095238095238 - 0.0476190476190476*a, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0.0952380952380952]], dtype=object)
对于这个符号矩阵,我想将特征值计算为
M.eigenvals()
但是,它返回以下错误
AttributeError: 'matrix' object has no attribute 'eigenvals'
我不知道出了什么问题。
【问题讨论】:
-
M到底是什么?向我们展示其eigenvals方法的文档。换句话说,证明该代码的合理性。 -
我不确定如何证明代码的合理性。它被编写来产生一个可逆矩阵,我想要它的特征值。尽管如此,我还是尽可能地解释了代码的点点滴滴
-
我不是在问
why。我想让你证明那个类的一个对象有那个方法。在 Python 中,每个对象类都有一组已定义的方法。如果你使用了错误的方法,或者有错误的对象类,你会得到这种attribute错误。您不能向list询问其keys,就好像它是dict。你不能append到dict。 -
好的,我会切入正题。
sympy.Matrix对象确实有eigenvals方法。 docs.sympy.org/latest/tutorial/…。np.matrix类没有! numpy.org/doc/stable/reference/generated/numpy.matrix.html。不要在没有密切关注他们的文档的情况下混搭sympy和numpy! -
好的。我明白了,我需要一个 sympy.matrix 对象。谢谢。
标签: python-3.x numpy matrix sympy eigenvalue