如果使用 Python 已知矩阵元素的范围,如何获得符号矩阵的数值特征向量?
Posted
技术标签:
【中文标题】如果使用 Python 已知矩阵元素的范围,如何获得符号矩阵的数值特征向量?【英文标题】:How to obtain numerical eigenvectors of a symbolic matrix provided the ranges of the matrix elements are known using Python? 【发布时间】:2022-01-14 05:16:25 【问题描述】:我有一个 2 x 2 符号矩阵 M = Matrix([[a, b],[c, d]]) ,其中元素 a,b,c,d 的数值范围是已知的。 python中是否有已知的数值方法可以返回M的特征值和特征向量的范围?
我是 python 新手,所以我尝试使用 sympy.diagonalize() 方法P, D = M.diagonalize()
,但似乎只有在元素固定(而不是范围)时才有效。
这是一个示例代码:
from sympy import *
a, b, c, d = symbols('a b c d')
M = Matrix([[a, b],[c, d]])
#The ranges of the elements
a_min = 1
a_max = 4
b_min = 0.5
b_max = 7
c_min = -1
c_max = 1
d_min = -1
d_max = 1
for a in linspace(a_min,a_max,5):
for b in linspace(b_min,b_max,5):
for c in linspace(c_min,c_max,5):
for d in linspace(d_min,d_max,5):
P, D = M.diagonalize()
print(P)
print(D)
有没有办法通过每个元素的数值范围来获得 P 和 D?
非常感谢
最好的问候
【问题讨论】:
这不是一个很好的问题。如果我们假设特征值对于给定范围内的所有可能值都是实数,那么为它们找到可能值的区间是有意义的。特征向量没有定义的大小或符号,因此特征向量的非零实分量的间隔基本上从-oo
到oo
。我认为无论您最终尝试做什么,都可能有比使用您在这里要求的更好的方法。
感谢您的回复。上面符号矩阵的特征向量是作为参数a、b、c和d的函数给出的(这实际上是我们在执行上面的代码时得到的)。所以,我看不出特征向量的范围应该是无限的,因为参数的范围是有限的。我尝试使用 for 循环扫描参数,但它仍然返回符号特征向量。
您的矩阵M
仍然包含符号变量,只是在循环中您已将变量名称重新用于新的、不相关的浮点变量。这些是未使用的,不会神奇地出现在M
中。您需要直接从它们构造矩阵,或使用subst
函数或方法。
特征向量的任何倍数都是特征向量,因此如果存在第一个分量为 1 的特征向量,那么也有第一个分量等于任何实数或复数的特征向量。此外,特征值和特征向量都可能很复杂,在这种情况下,不清楚您所说的“间隔”是什么意思。同样在重复根的情况下,任何非零向量都可能是特征向量。你在这里要求的东西在数学上没有意义,所以我想退后一步,解释一下你为什么首先想要这个。
好的。让我重新表述我的问题。符号矩阵 M 的数值对角化是否提供的唯一信息是 M 中元素的范围? (使用python)。
【参考方案1】:
您可以使用 Python 中的函数来解决方阵的特征值/特征向量问题,即 numpy.linalg
中的 eig
函数。
更多参考:https://numpy.org/doc/stable/reference/generated/numpy.linalg.eig.html
【讨论】:
以上是关于如果使用 Python 已知矩阵元素的范围,如何获得符号矩阵的数值特征向量?的主要内容,如果未能解决你的问题,请参考以下文章
同时访问矩阵的不同元素 python :: 索引 4 的错误超出了轴 0 的范围,大小为 4 [关闭]