我正在使用最大值,我相信我有一个简单的问题:如何将矩阵的特征值放在列表中,以便可以计算出最大的特征值?
根据我的阅读,如果M是一个矩阵,那么eigenvalues(M)是一个包含两个列表的列表,第一个包含M的特征值,第二个是代表它们各自的多重性的数字列表。因此,我想我需要做的是通过从特征值(M)中提取第一个列表来定义一个新列表。不过,不确定如何执行此操作。
另一个相关的问题:这些特征值中的某些会很复杂,因此当我使用列表的最大值时,最大值将忽略列表中的复数,而只是查看实值特征值,否则它将给我一个错误?
答案 0 :(得分:1)
首先我们输入矩阵:
M : matrix([1,2],[2,3])$
然后我们计算其特征值:
eigs : eigenvalues(M);
(%o56)[[2-sqrt(5),sqrt(5)+ 2],[1,1]]
最后,我们提取最大特征值:
lmax(first(eigs));
(%o59)sqrt(5)+ 2
关于复数列表的最大值,请记住,最大值的概念仅属于实数领域。最多没有一组复数。
答案 1 :(得分:1)
这就是我要做的。我将eigenvalues
的结果分配给两个变量,所以一个是第一个列表,另一个是第二个列表。请注意,我为此使用并行分配[a, b] : [foo, bar];
将foo
分配给a
,将bar
分配给b
。然后,将两个列表中的元素粘贴在一起,以保持每个特征值的多重性。最后,我将特征值按大小排序。我将按降幅排序,因此第一个元素是最大特征值及其多重性。
(%i2) A : matrix ([1/7, 15/14, 15/7], [-13/7, 85/14, 71/7], [9/7, -27/7, -47/7]);
[ 1 15 15 ]
[ - -- -- ]
[ 7 14 7 ]
[ ]
[ 13 85 71 ]
(%o2) [ - -- -- -- ]
[ 7 14 7 ]
[ ]
[ 9 27 47 ]
[ - - -- - -- ]
[ 7 7 7 ]
(%i3) [vals, mults] : eigenvalues (A);
1
(%o3) [[-, - 2, 1], [1, 1, 1]]
2
(%i4) vals_mults : map (lambda ([a, b], [a, b]), vals, mults);
1
(%o4) [[-, 1], [- 2, 1], [1, 1]]
2
(%i5) sort (vals_mults, lambda ([a, b], abs(a[1]) > abs(b[1])));
1
(%o5) [[- 2, 1], [1, 1], [-, 1]]
2
(%i6) first (%);
(%o6) [- 2, 1]