我使用Python解决了这一任务的大部分问题,但不确定如何输入(甚至理解)其余的信息。您不应该找到给定一些特征值的特征向量吗?因此,它出现在以下情况下:
设对称3×3矩阵A = ((1 2 1), (2 5 0), (1 0 5))
如果A有以下三个特征向量,则找出三个相应的特征值:
v1 = ((-5), (2), (1));v2 = ((0), (-1), (2));v3 = ((1), (2), (1))
发布于 2020-01-02 20:25:36
给定矩阵arr和向量vec,如果vec是arr的特征向量,那么:
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包含特征值,u和vh包含特征向量(更准确地说,u中的左奇异特征向量和vh中右奇异特征向量的hermitian )。
发布于 2020-01-02 19:40:06
考虑一下特征向量的定义。由矩阵A表示的线性变换的特征向量v是一个仅在幅度上而不是方向上变化的向量,当这种线性变换应用于它时。特征向量的标量变化是其特征值。你有一个线性变换,你得到了它的特征向量,为了找到特征值,你所需要做的就是把这个变换应用到特征向量上,并根据每个特征向量的标量来确定标量。
https://stackoverflow.com/questions/59568960
复制相似问题