特征值和特征向量
我们这里讨论线性代数很重要的特征值相关的计算。我们定义一个矩阵A , 计算特征值和特征向量时我们都以这个矩阵为主要讨论对象:
(%i1) A: matrix([4,0,1],[2,3,2],[1,0,4]);
&">nbsp; [ 4 0 1 ]
[ ]
(%o1) [ 2 3 2 ]
[ ]
[ 1 0 4 ]
我们计算一下特征值:
(%i2) eigenvalues(A);
(%o2) [[5, 3], [1, 2]]
么样,很方便吧...等等,特征值怎么会出来两个向量呢!?原来,真正的特征值是放在结果的第一个list 当中,也就是5 和3。那第二个list 代表什么呢?代表的就是每个特征值的几何重数, 也就是每个特征值对应的特征向量空间之维度。换言之,这是比较完整的特征值资讯!
我们也可以用eigenvectors 计算特征向量。事实上,eigenvectors 也会把特征值列出来,所以是包含前面eigenvalues 功能的指令。不过如果我们一开始就介绍eigenvectors,看到那有点复杂的结果大家可能会昏倒。现在已经会了eigenvalues,大概就没问题了:
(%i3) eigenvectors(A);
(%o3) [[[5, 3], [1, 2]], [1, 2, 1], [1, 0, - 1], [0, 1, 0]]
第一部份和eigenvectors 输出一样,就是说11545.html">我们有5 有和3 两个特征值,其mutiplicities 分别是1 和2。因此,对于5 应该要有一个对应的特征向量,即[1, 2, 1] ,对于3会有两个,分别是接下来的[1, 0, −1] 和[0, 1, 0] 。这些向量会生成相对应特征值的向量空间。
手动特征值的计算
上一节介绍Maxima 内建特征值计算,并不一定每个人都喜欢。比方说显示的方式比较特别,另外就是不是一步一步算的,心里有时也有不踏实的感觉。因此,我们这里介绍一下如何用Maxima 一步一步的把特征值求出来。
我们再用一次上一节的例子:
(%i4) A: matrix([4,0,1],[2,3,2],[1,0,4]);
[ 4 0 1 ]
[ ]
(%o4) [ 2 3 2 ]
[ ]
[ 1 0 4 ]
我们先求特征多项式,也就是A − tI 的行列式值:
(%i5) f: charpoly(A,t);
2
(%o5) t + (3 - t) (4 - t) - 3
如果想要看到比较漂亮的式子, 可以将f 展开:
(%i6) expand(f);
3 2
(%o6) - t + 11 t - 39 t + 45
我们还可以将f 做因式分解, 这样就可以清楚看到A 有几个特征值, 和各特征值的代数重数:
(%i7) factor(f);
2
(%o7) - (t - 5) (t - 3)
这样我们就求得A 的特征值是5 和3 。
另一个解法是,我们可以求f = 0 的零根。做法是使用solve 指令:
(%i8) solve(f=0, t);
(%o8) [t = 5, t = 3]
当然,我们算法正确,应该是得到和前面一样的结果。