我正在实现本文中描述的系统,但我有点卡住了。我最近才遇到张量/特征值等,如果这有点简单,请原谅!
给定一个 2x2 张量,我如何计算它的主要和次要特征向量?
易于翻译成 C# 的实现的加分点;)
(我使用的是 MATLAB 矩阵表示法;分号表示“新行”。)
[u;v] 是 [ab; cd] 与特征值 t if [ab; cd] [u;v] = t[u;v]。这意味着 au+bv=tu 和 cu+bv=tv; 即,(at)u+bv=0 和 cu+(dt)v=0。如果这有任何非平凡的解决方案,那是因为这两个方程除了一个常数因子之外是相同的;那么你的特征向量是 [u;v] = [b;ta]。(当然,唯一的只有一个常数因子。)
特征值是可能的 t 值;也就是说,除了常数因子之外,这两个方程是相同的。如果矩阵 [at b; c dt]是奇异的,表示其行列式为零,表示(at)(dt)-bc=0,表示t^2 - (a+d)t + (ad-bc) = 0。
所以:求解特征值的方程,然后按照我上面描述的方式得到特征向量。
特征值可能是复杂的(例如,对于旋转)。在这种情况下,您也会得到复杂的特征向量,这是正确的,因为 Av=kv 不能具有 A,v 实数但 k 不是实数。
两个警告。
一些矩阵有两个相等的特征值。它们可能有也可能没有两个独立的特征向量。如果矩阵是单位矩阵的常数倍数——形式为 [k 0; 0 k]——那么它确实有两个独立的特征向量,实际上任何两个独立的向量都可以,因为一切都是特征向量。否则,只有一个特征向量,任何依赖于两个特征向量的定理或算法都可能失败。这将发生,例如,使用 [1 k; 形式的“剪切”矩阵。0 1]。
在大于 2 的维度中,您不想以这种方式做事。计算特征向量和特征值有更好(但更复杂)的方法,并且您无法拥有“正确”数量的独立特征向量的方法更广泛。