--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-38-e22a3acdc24c> in <module> ----> 1 trigonal(M) <ipython-input-37-a88e8395e643> in trigonal(A) 12 for i in range(10): 13 for j in range(10): ---> 14 coeff_matrix[i, j] = T[i, j].coeff(sp.Symbol('a{}'.format(j + 1))) 15 return(coeff_matrix) AttributeError: 'numpy.complex128' object has no attribute 'coeff'会出现这个报错
时间: 2023-08-15 19:26:14 浏览: 111
这个错误是因为 numpy 的 complex128 对象没有 `coeff` 方法。`coeff` 方法是 SymPy 中的方法,用于计算多项式中某个变量的系数。你需要将 T 中的元素转换成 SymPy 中的符号对象后再调用 `coeff` 方法。
修改后的代码如下:
```
import sympy as sp
import numpy as np
def trigonal(A):
# 求出特征向量和特征值
eig_val, eig_vec = np.linalg.eig(A)
# 按照特征值从小到大的顺序将特征向量组成新的矩阵 P
P = eig_vec[:, eig_val.argsort()]
# 计算 P 的逆矩阵 P_inv
P_inv = np.linalg.inv(P)
# 用 P 和 P_inv 三角化矩阵 A
T = np.dot(P_inv, np.dot(A, P))
# 将 T 中的元素转换成 SymPy 中的符号对象,然后计算系数
coeff_matrix = sp.Matrix(np.zeros((10, 10)))
for i in range(10):
for j in range(10):
coeff_matrix[i, j] = sp.Poly(sp.simplify(T[i, j])).coeff(sp.Symbol('a{}'.format(j + 1)))
return(coeff_matrix)
```
在这个修改后的代码中,我们先使用 SymPy 中的 `simplify` 方法将 T 中的元素化简为一个多项式,然后使用 `Poly` 方法将多项式转换成 SymPy 中的多项式对象,最后调用 `coeff` 方法来计算系数。
阅读全文