如果使用 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?

非常感谢

最好的问候

【问题讨论】:

这不是一个很好的问题。如果我们假设特征值对于给定范围内的所有可能值都是实数,那么为它们找到可能值的区间是有意义的。特征向量没有定义的大小或符号,因此特征向量的非零实分量的间隔基本上从-oooo。我认为无论您最终尝试做什么,都可能有比使用您在这里要求的更好的方法。 感谢您的回复。上面符号矩阵的特征向量是作为参数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 已知矩阵元素的范围,如何获得符号矩阵的数值特征向量?的主要内容,如果未能解决你的问题,请参考以下文章

具有已知内在和外在矩阵的立体视觉 3d 点计算

matlab 中提取矩阵中已知坐标的值

同时访问矩阵的不同元素 python :: 索引 4 的错误超出了轴 0 的范围,大小为 4 [关闭]

Python:返回特定范围内的矩阵值,范围以元组形式给出(从,到)

python如何挑选矩阵中的不相领的列组成新的矩阵

python如何判断两个数组完全相等?