我遇到类似A*x=lambda*x
的问题,其中A
的顺序为d*d
,x
的顺序为d*c
,而lambda是常量。已知A
和lambda
,矩阵x
未知。
有没有办法在matlab中解决这个问题? (与特征值类似,但x
是d*c
矩阵,而不是矢量)。
答案 0 :(得分:2)
如果我理解正确,x
就不一定有任何解决方案。如果A*x=lambda*x
,那么y
的任何列x
都会满足A*y=lambda*y
,因此x
的列只是A
对应于特征值的特征向量lambda
,如果lambda
实际上是特征值,则只会有任何解决方案。
[V,D] = eig(A)产生特征值矩阵(D)和特征向量 (V)矩阵A,使得A * V = V * D.矩阵D是规范形式 A - 在主对角线上具有A的特征值的对角矩阵。 矩阵V是模态矩阵 - 它的列是A的特征向量。
您可以使用它来检查lambda
是否是特征值,并找到任何相应的特征向量。
答案 1 :(得分:0)
您可以转换此问题。通过使用x(:)将x写为向量(具有大小d * c x 1)。然后可以将A重写为d * c x d * c矩阵,该矩阵沿对角线具有C个版本的A.
现在这是一个简单的特征值问题。
答案 2 :(得分:0)
它实际上是微不足道的。你的要求是A * X = lambda * X,其中X是一个数组。实际上,看看单个X列会发生什么。如果存在一个数组X,那么
就是这样A * X(:,i)= lambda * X(:,i)
对于X的所有列,对于λ的SAME值必须如此。实际上,这意味着X(:,i)是A的特征向量,具有相应的特征值lambda。更重要的是,它意味着X的每一列都具有与其他每列相同的特征值。
因此,对这个问题的一个简单的解决方案是简单地使用具有相同列的矩阵X,只要该列是A的特征向量。如果特征值具有大于1的多重性(因此存在具有相同特征值的多个特征向量)然后X的列可以是那些特征向量的任何线性组合。
在实践中尝试。我会选择一些简单的矩阵A.
>> A = [2 3;3 2];
>> [V,D] = eig(A)
V =
-0.70711 0.70711
0.70711 0.70711
D =
-1 0
0 5
V的第二列是特征向量,特征值为5.我们可以通过任意常数任意地缩放特征向量。所以现在选择矢量vec,并创建一个包含复制列的矩阵。
>> vec = [1;1];
>> A*[vec,vec,vec]
ans =
5 5 5
5 5 5
这应该让任何人都感到惊讶。