我用Symphy做了一些手术,偶然发现:
如果我声明以下矩阵并try 得到它的2-范数(最大sing.value):
from sympy import Matrix
Matrix([[4, 1, 0, 0], [1, 4, 1, 0], [0, 1, 4, 1], [0, 0, 1, 4]]) # declare matrix
print(x.norm(2)) # print it's 2-norm
我得到了预期的结果:
sqrt(9*sqrt(5)/2 + 43/2)
但是,当我声明一个看似等价的矩阵并试图得到它的2-范数时,我得到了一个错误:
from sympy import Matrix
x = Matrix([[7, -13, -3, -1, 0], [-2, 4, 2, 0, 0], [5, -9, -2, 0, 1]]) # declare matrix
print(x.norm(2)) # print it's 2-norm
错误:
Traceback (most recent call last):
File "main.py", line 29, in <module>
print(x.norm(2))
File "venv/lib/python3.9/site-packages/sympy/matrices/matrices.py", line 1984, in norm
return Max(*self.singular_values())
File "venv/lib/python3.9/site-packages/sympy/functions/elementary/miscellaneous.py", line 391, in __new__
args = frozenset(cls._new_args_filter(args))
File "venv/lib/python3.9/site-packages/sympy/functions/elementary/miscellaneous.py", line 564, in _new_args_filter
raise ValueError("The argument '%s' is not comparable." % arg)
Value错误: The argument 'sqrt(121 + 43127/(3*(1723619 + 2*sqrt(199009527)*I/9)**(1/3)) + (1723619 + 2*sqrt(199009527)*I/9)**(1/3))' is not comparable.
我阅读了源代码,了解到is not comparable
意味着一个对象可以计算成实数,或者已经是实数了.我不明白这个矩阵是如何计算成实数的(它是一个矩阵).
有谁能解释为什么我在一个矩阵上出现了这个错误,而在另一个矩阵上却没有?
谢谢