找到一组特征值对应的特征值

2024-05-21 06:09:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Python解决了这个任务的大部分,但不知道如何输入(甚至理解)剩余的信息。你不应该找到给定某个特征值的特征向量吗,因此它在下面的例子中是相反的:

让对称的3× 3矩阵AbeA=((1 2 1), (2 5 0), (1 0 5))

如果A具有以下三个特征向量,则找到三个相应的特征值:
v1=((-5), (2), (1))v2=((0), (-1), (2))v3=((1), (2), (1))


Tags: 信息矩阵v3例子v2v1特征值特征向量
2条回答

想想特征向量的定义。由矩阵a表示的线性变换的特征向量v是当对其应用该线性变换时仅在幅度而不是方向上改变的向量。特征向量大小的标量变化就是它的特征值。你有一个线性变换,你已经得到了它的特征向量-要找到特征值,你需要做的就是把变换应用到特征向量上,并确定每个特征向量的标度

给定矩阵arr和向量vec,如果vecarr的特征向量,那么:

np.dot(arr, vec) == lambda_ * vec

因此,遍历np.dot(arr, vec) / vec的所有值(最终忽略零向量作为势本征向量,并抑制势除零的误差),将揭示本征值:

import numpy as np


def find_eigenvalue(arr, vec):
    result = None
    if not np.all(np.isclose(vec, 0.0)):
        with np.errstate(divide='ignore', invalid='ignore'):
            for x, y in zip(np.dot(arr, vec), vec):
                if np.isclose(y, 0.0) and np.isclose(x, 0.0):
                    continue
                if result is None:
                    result = x / y
                elif not np.isclose(result, x / y):
                    result = None
                    break
    return result

效果如预期:



print(find_eigenvalue(arr, np.array([0, 0, 0])))
# None
print(find_eigenvalue(arr, np.array([1, 0, 0])))
# None
print(find_eigenvalue(arr, np.array([0, 1, 0])))
# None
print(find_eigenvalue(arr, np.array([0, 0, 1])))
# None
print(find_eigenvalue(arr, np.array([0, -1, 2])))
# 5
print(find_eigenvalue(arr, np.array([-5, 2, 1])))
# -0.0
print(find_eigenvalue(arr, np.array([1, 2, 1])))
# 6.0

最后,请注意np.linalg.svd()还将计算所有这些:

u, s, vh = np.linalg.svd(arr)

s将包含特征值,uvh将包含特征向量(更准确地说,u中的左奇异特征向量和vh中的右奇异特征向量的厄米特值)

相关问题 更多 >